Ответ 1
Число, которое вы запрашиваете для вычисления math.exp, имеет в десятичной форме более 110 000 цифр. Это немного вне диапазона двойника, поэтому он вызывает переполнение.
Я получаю ошибку переполнения, когда я пытаюсь выполнить этот расчет, но я не могу понять, почему.
1-math.exp(-4*1000000*-0.0641515994108)
Число, которое вы запрашиваете для вычисления math.exp, имеет в десятичной форме более 110 000 цифр. Это немного вне диапазона двойника, поэтому он вызывает переполнение.
Чтобы исправить это, используйте:
try:
ans = math.exp(200000)
except OverflowError:
ans = float('inf')
Я думаю, что значение становится слишком большим, чтобы вписываться в double
в python, поэтому вы получаете OverflowError
. Самое большое значение, которое я могу вычислить exp
на моей машине в Python, просто немного больше, чем 709.78271.
Это может дать вам понять, почему:
http://www.wolframalpha.com/input/?i=math.exp%28-4*1000000*-0.0641515994108%29
Обратите внимание на показатель 111442.
Попробуйте np.exp() вместо math.exp()
Numpy обрабатывает переполнения более изящно, np.exp(999) приводит к inf и 1./(1. + np.exp(999)), следовательно, просто приводит к нулю
import math
import numpy as np
print(1-np.exp(-4*1000000*-0.0641515994108))