Использование десятичных знаков в математических функциях в Python

math — это модуль Python, используемый многими для выполнения немного более сложных математических функций и использующий модуль decimal. Можно правильно вычислить 1.2-1.1=0.0999~, но используя тип decimal, это 0.1.

Моя проблема в том, что эти два модуля плохо работают друг с другом. Например, log(1000, 10)=2.9999~, но использование типа decimal дает тот же результат. Как я могу заставить эти два работать друг с другом? Нужно ли мне реализовывать свои собственные функции? Нет ли способа?

Можете ли вы полностью сохранить свои расчеты в среде модуля decimal? Например. decimal.Decimal(1000).log10() -> Decimal('3').

sj95126 10.10.2022 20:38
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
69
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

В Decimal есть метод log10.

from decimal import *
a = Decimal('1000')
print(a.log10())

Однако для меня было бы более разумно использовать функцию, которая вычисляет точное значение логарифма, если вы пытаетесь решить логарифмы с точными целочисленными решениями. Обычно ожидается, что логарифмические функции при типичном использовании выдают некоторый иррациональный результат. Вместо этого вы можете использовать цикл for и повторяющееся деление.

Ответ принят как подходящий

У вас есть методы Decimal.log10, Decimal.ln и Decimal.logb каждого экземпляра Decimal и многие другие (max, sqrt):

from decimal import Decimal

print(Decimal('0.001').log10())
# Decimal('-3')
print(Decimal('0.001').ln())
# Decimal('-6.907755278982137052053974364')

Однако функций тригонометрии нет.

Более продвинутой альтернативой для вычислений с произвольной точностью является mpmath, доступная на PyPI. Конечно, он также не даст вам sin или tan, потому что sin(x) иррационально для многих значений x, и поэтому хранить его как Decimal не имеет смысла. Однако, учитывая фиксированную точность, вы можете вычислить эти функции с помощью ряда Tailor и т. д. с помощью mpmath. Вы также можете сделать Decimal(math.sin(0.17)), чтобы получить десятичную дробь, содержащую что-то близкое к синусу 0,17 радиана.

Также смотрите официальные рецепты Decimal.

Другие вопросы по теме