Ошибка в приближении функции (OverflowError: int слишком велика для преобразования в float) - PullRequest
0 голосов
/ 31 марта 2020

Я написал простой код для аппроксимации экспоненциальной интегральной функции (функция 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)
...