Я пытаюсь реализовать алгоритм Чудновского для вычисления pi. Я использую формулы из этого описания https://www.craig-wood.com/nick/articles/pi-chudnovsky/
Теперь он работает, но максимальное количество цифр, которое он может показать, равно 3.141592653589793238462643385 - всего 27 цифр.
Почему Python ограничивает количество цифр в этом скрипте? Может быть, я использую Decimal неправильно?
Вот мой код (обновлено):
from decimal import Decimal, getcontext
from math import factorial
import sys
def calculate_pi(max_K, number_of_digits):
getcontext.prec = number_of_digits+2
a_k, b_k, C, a_sum, b_sum = 1, 0, 640320, 1, 0
for k in range(1,max_K):
a_k *= -(Decimal(24)/Decimal(C**3))*Decimal((6*k-5)*(2*k-1)*(6*k-1))/Decimal(k**3)
a_sum += a_k
b_sum += a_k*k
pi = 426880*Decimal(10005).sqrt()/Decimal(13591409*a_sum + 545140134*b_sum)
print str(pi)[:number_of_digits+2]
def main(number_of_digits):
pi = calculate_pi(10000, number_of_digits)
if __name__ == "__main__":
number_of_digits = int(sys.argv[1])
main(number_of_digits)
Во-первых, этот сайт не является поисковым сайтом. Однако меня заинтересовала проблема и проверила сайт, который вы упомянули.
Если вы посмотрите на определение a
, вы увидите, что первое слагаемое равно 1
, а не -6*5*4/640320^3
. Кроме того, поскольку вы начинаете свой цикл при k = 1
, вам также необходимо назначить переменные a_sum
и b_sum
с первыми слагаемыми a_0 = 1
и b_0 = 0
.
Используйте getcontext().prec =...
вместо getcontext.prec =...