我编写了一个简单的代码来近似指数积分函数(Ei 函数)。此函数已在其他库(如 mpmath)中实现,但由于某些原因,我不想使用它们。在这个近似中,有一些数学实现(如阶乘)。当函数逼近所需的项数少于 100 时,我的代码适用于相对较小的值,但对于大数(例如 200)的逼近,我需要将项数增加到 200-300 项以上。在这些情况下,我收到此错误:
OverflowError: int too large to convert to float
我也搜索了这个错误。人们建议使用Decimal来解决这个问题,但我无法让它工作。感谢您为解决此问题提供的任何帮助。这是我的代码:
#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)