Чудновская формула в питоне

1

Я пытаюсь реализовать алгоритм Чудновского для вычисления 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)
Теги:
algorithm
pi

2 ответа

1

Во-первых, этот сайт не является поисковым сайтом. Однако меня заинтересовала проблема и проверила сайт, который вы упомянули.

Если вы посмотрите на определение a, вы увидите, что первое слагаемое равно 1, а не -6*5*4/640320^3. Кроме того, поскольку вы начинаете свой цикл при k = 1, вам также необходимо назначить переменные a_sum и b_sum с первыми слагаемыми a_0 = 1 и b_0 = 0.

  • 0
    Большое спасибо за ваш комментарий! Я знаю, но не знаю, где я могу найти помощь по этой задаче (
  • 0
    На самом деле да, stackoverflow также (не «только», но «также») сайт поиска ошибок. Есть правила, как задать вопрос именно потому, что люди приходят сюда, говоря: «Мой код не работает, помогите мне».
0

Используйте getcontext().prec =... вместо getcontext.prec =...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню