0

我编写了一个简单的代码来近似指数积分函数(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)
4

0 回答 0