Миллион знаков после запятой в 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))