Экспоненциальная очень малого числа в python
Я пытаюсь вычислить экспоненту -1200 в python (это пример, мне не нужен -1200 в частности, но набор чисел, которые находятся вокруг -1200).
>>> math.exp(-1200)
0.0
это дает мне недостаточный поток; как я могу обойти эту проблему?
Спасибо за любую помощь :)
2 ответов
в стандартной библиотеке, вы можете посмотреть на decimal
модуль:
>>> import decimal
>>> decimal.Decimal(-1200)
Decimal('-1200')
>>> decimal.Decimal(-1200).exp()
Decimal('7.024601888177132554529322758E-522')
Если вам нужно больше функций, чем decimal
поддержка, вы можете посмотреть на библиотеку mpmath
, который я использую и как много:
>>> import mpmath
>>> mpmath.exp(-1200)
mpf('7.0246018881771323e-522')
>>> mpmath.mp.dps = 200
>>> mpmath.exp(-1200)
mpf('7.0246018881771325545293227583680003334372949620241053728126200964731446389957280922886658181655138626308272350874157946618434229308939128146439669946631241632494494046687627223476088395986988628688095132e-522')
но если возможно, вы должны увидеть, можете ли вы изменить свои уравнения, чтобы работать полностью в пространстве журнала.
попробуйте вычислить в логарифмической области как можно дольше. Т. е. избегайте вычисления точного значения, но продолжайте работать с экспонентами.
exp (-1200) - очень небольшое число(так же, как exp (1200) - очень большое), поэтому, возможно, точное значение не совсем то, что вас интересует. Если вам нужно только сравнить эти числа, то логарифмического пространства должно быть достаточно.