Миллион знаков после запятой в Python

Недавно мы углубились в бесконечные ряды в исчислении, и, как говорится, мне так весело с ним. Я вывел свою собственную серию инверсных tan infinte в python и установил 1, чтобы получить pi/4*4, чтобы получить pi. Я знаю, что это не самый быстрый алгоритм, поэтому давайте не будем обсуждать мой алгоритм. Что я хотел бы обсудить, так это как я представляю очень и очень маленькие числа в python. Что я замечаю, так это то, что мои программы повторяют серию, она останавливается где-то на 20 десятичных разрядах (дать или взять). Я попытался использовать десятичный модуль, и это только подтолкнуло к 509. Я хочу бесконечное (почти) представление.

Есть ли способ сделать такую ​​вещь? Я считаю, что ни один тип данных не сможет справиться с такой необъятностью, но если вы покажете мне способ обойти это, я был бы очень признателен.

1 ответ

Десятичный модуль Python требует, чтобы вы указали "контекст", который влияет на то, насколько точным будет представление.

Я мог бы порекомендовать gmpy2 для такого типа вещей - вы можете выполнить расчет на рациональных числах (произвольная точность) и конвертировать в десятичное на последнем шаге.

Вот пример - замените свой собственный алгоритм по мере необходимости:

import gmpy2
# See https://gmpy2.readthedocs.org/en/latest/mpfr.html
gmpy2.get_context().precision = 10000
pi = 0
for n in range(1000000):
    # Formula from http://en.wikipedia.org/wiki/Calculating_pi#Arctangent
    numer = pow(2, n + 1)
    denom = gmpy2.bincoef(n + n, n) * (n + n + 1)
    frac = gmpy2.mpq(numer, denom)
    pi += frac
    # Print every 1000 iterations
    if n % 1000 == 0:
        print(gmpy2.mpfr(pi))
Другие вопросы по тегам