Я написал простой код для аппроксимации экспоненциальной интегральной функции (функция Ei). Эта функция уже была реализована в других библиотеках (например, mpmath), но по некоторым причинам я не хочу их использовать. В этом приближении есть некоторая математическая реализация (например, факториал). Мой код прекрасно работает для сравнительно небольших значений, когда количество необходимых терминов для приближения функции меньше 100, но для аппроксимации больших чисел (например, 200) мне нужно увеличить количество терминов до 200-300. В этих случаях я получаю эту ошибку:
OverflowError: int too large to convert to float
Я также искал эту ошибку. Люди предложили использовать Десятичный для решения этой проблемы, но я не мог заставить его работать. Я ценю любую помощь, чтобы решить эту проблему. Вот мой код:
#This code has been written for approximation of Ei(200) with 150 terms that gives the error
import numpy as np
gamma = 0.5772156649 # gamma is a constant
def Ei(X, k, b): # Ei (X: number , k : number of terms in approximation, b: Approximation of entire function which is part of approximation)
for s in range(1, k + 1): # Factorial
fact = 1
for i in range(1, s + 1):
fact = fact * i
b += (pow(-1., s + 1) * pow(-X, s) / (s * fact))
return gamma + np.log(X) - b
# Compare with Ei function in mpmath
from mpmath import ei
print (ei(200))
B = Ei(200, 150, 0) # Gives OverflowError Error
print (B)