簡體   English   中英

為什么我的 Chudnovsky 算法程序給出了錯誤的結果?

[英]Why does my program for the Chudnovsky algorithm give the wrong result?

我正在嘗試在 python 中編寫 Chudnovsky 算法。 但是,當我運行我的代碼時,它給了我一個非常小的數字(-5.051212624421025e-55),它不是 pi。 我在中學,我不知道任何人可以幫助我。 我究竟做錯了什么?

這是 Chudnovsky 公式的鏈接: https ://levelup.gitconnected.com/generating-the-value-of-pi-to-a-known-number-of-decimals-places-in-python-e93986bb474d

這是我的代碼:

import math

def fact(exi):
    memory = exi
    for i in range(1, exi):
        memory *= i
    return memory

k = 10
s = 0

for i in range(0, k):
    a = -1^k
    b = fact(6*k)
    c = (545140134*k) + 13591409
    d = fact(3*k)
    e = (fact(k))^3
    f = (3 * k) + 3/2
    g = math.pow(640320, f)

    numerator = (a*b*c)
    denominator = (d*e*f)

    s += (numerator / denominator)

s *= 12
print(1 / s)

這是我更新的代碼:

import math

def fact(exi):
    memory = exi
    for i in range(1, exi):
        memory *= i
    return memory

k = 17
s = 0

for i in range(1, k):
    a = (-1)**i
    b = fact(6*i)
    c = (545140134*i) + 13591409
    d = fact(3*i)
    e = (fact(i))**3
    f = (3 * i) + 3/2
    g = math.pow(640320, f)
    num = (a*b*c)
    den = (d*e*g)
    s += (num / den)
s *= 12
print(1 / s)

我看到兩個錯誤:

  1. Wikipedia上顯示的公式進行比較時,看起來您應該使用迭代變量i (在公式中命名為q ),其中您當前在循環中使用k 在您的代碼中, ki的上限。

  2. Python 中的冪運算符是** ,而不是^ (按位異或)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM