簡體   English   中英

為什么以“0”和“3”開頭大約有區別

[英]Why is there a difference between starting with a "0" and "3" for approx

我試圖通過pi= 3 + (4/(2*3*4)) - (4/(4*5*6)) + (4/(6*7*8)) - … (等等)。 但是,我的代碼(如下所示)在以下情況下有 2 個單獨的答案(3.1415926535900383 和 3.141592653590042):

  1. approx 變量分別以“0”和“3”開頭
  2. n=10000

有誰知道為什么?

def approximate_pi(n):
    approx=0
    deno=2
    if n == 1:
        return 3
    for x in range(n-1):
        if x%2:
            approx -= 4/((deno)*(deno+1)*(deno+2))
        else:
            approx += 4/((deno)*(deno+1)*(deno+2))
        deno+=2
    return approx+3

def approximate_pi(n):
    approx=3
    deno=2
    if n == 1:
        return 3
    for x in range(n-1):
        if x%2:
            approx -= 4/((deno)*(deno+1)*(deno+2))
        else:
            approx += 4/((deno)*(deno+1)*(deno+2))
        deno+=2
    return approx

我認為是因為在 pc 中你不能有精確的浮點數。 您可以在此處獲得更多信息: 為什么十進制數不能用二進制精確表示?

這是因為 float 在 python 中的方式。 如果您沒有小數點前的數字,它會提供 3 個額外的精度數字(來自我的試驗)。 這會改變答案,因為當您從 0 開始時,您會得到完全不同的計算。

近似算法近似。 這兩個數字都不是 π 的真實值。 您的兩個版本從不同的起點開始,那么為什么您對它們給出的近似值略有不同感到驚訝? 重要的是,你運行它們的時間越長,它們就會越接近真實值。

請注意,不是浮點數的有限精度表示的人工制品。 雖然浮點舍入會影響您的結果,但即使使用無限精度算術,您也會看到差異。

暫無
暫無

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

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