Как работать с большими числами в Python 3 (рекуррентная функция)? - PullRequest
0 голосов
/ 21 ноября 2019

У меня небольшая проблема со слишком большими числами с плавающей точкой в ​​Python. Возникают ошибки переполнения.

Функция выглядит следующим образом:

N(t + 1) = (1 + c) N(t) - (c / d) * N(t)**2 где t - время, а c и d - константы.

Мне нужно, чтобы рассчитать доодна минута (t = 60). Но после t = 8, 9 или 10 я получил ошибку переполнения.

def nValue(t):
    n_calc = []
    c = 2.3 # 0..3
    d = 95  # 1..250
    n_0 = 450 # 0..600
    n_1 = (1 + c) * n_0 - c / d * n_0**2
    n_calc.append(n_0)
    n_calc.append(n_1)
    for i in range(2, t+1):
        n_curr = (1 + c) * n_calc[i- 1] - (c / d) * (n_calc[i- 1]**2)
        n_calc.append(n_curr)

    return n_calc

Должен ли я использовать десятичный тип, BigFloat или что-то другое?

Наконец я должен нарисовать график ... (2D Matplotlib сюжет). Может мне стоит как-то «масштабировать» это уравнение?

1 Ответ

0 голосов
/ 21 ноября 2019

Вы можете просто использовать этот предыдущий ответ в качестве ссылки. OverflowError: (34, 'Результат слишком велик') Десятичный класс не имеет ограничений, поэтому вы должны использовать use. Он служит той же цели, что и GMP и другие библиотеки произвольной точности.

Надеюсь, это поможет вам. https://en.wikipedia.org/wiki/List_of_arbitrary-precision_arithmetic_software

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...