對於我的學校項目,我試圖計算使用不同方法的價值。我發現的一個公式是可以使用arctan(x)的泰勒展開計算的Machin公式。爲什麼使用Machin Formula給出一個錯誤的值來計算pi的值?
我寫了下面的代碼在python:
import decimal
count = pi = a = b = c = d = val1 = val2 = decimal.Decimal(0) #Initializing the variables
decimal.getcontext().prec = 25 #Setting percision
while (decimal.Decimal(count) <= decimal.Decimal(100)):
a = pow(decimal.Decimal(-1), decimal.Decimal(count))
b = ((decimal.Decimal(2) * decimal.Decimal(count)) + decimal.Decimal(1))
c = pow(decimal.Decimal(1/5), decimal.Decimal(b))
d = (decimal.Decimal(a)/decimal.Decimal(b)) * decimal.Decimal(c)
val1 = decimal.Decimal(val1) + decimal.Decimal(d)
count = decimal.Decimal(count) + decimal.Decimal(1)
#The series has been divided into multiple small parts to reduce confusion
count = a = b = c = d = decimal.Decimal(0) #Resetting the variables
while (decimal.Decimal(count) <= decimal.Decimal(10)):
a = pow(decimal.Decimal(-1), decimal.Decimal(count))
b = ((decimal.Decimal(2) * decimal.Decimal(count)) + decimal.Decimal(1))
c = pow(decimal.Decimal(1/239), decimal.Decimal(b))
d = (decimal.Decimal(a)/decimal.Decimal(b)) * decimal.Decimal(c)
val2 = decimal.Decimal(val2) + decimal.Decimal(d)
count = decimal.Decimal(count) + decimal.Decimal(1)
#The series has been divided into multiple small parts to reduce confusion
pi = (decimal.Decimal(16) * decimal.Decimal(val1)) - (decimal.Decimal(4) * decimal.Decimal(val2))
print(pi)
的問題是,我得到PI的權值只能做到15個個小地方,無論是循環重演的次數。
例如:
在第一循環的11次重複
PI = 3.141592653589793408632493
在100次循環的第一循環
pi的= 3.141592653589793410703296
我不由於arctan(1/239)非常小並且達到極小的v,所以增加第二個循環的重複次數只需要重複幾次,因此不應影響只有15位小數的pi值。
附加信息:
的梅欽公式指出:
π = (16 * Summation of (((-1)^n)/2n+1) * ((1/5)^(2n+1))) - (4 * Summation of (((-1)^n)/2n+1) * ((1/239)^(2n+1)))
我沒有檢查你的代碼,但寫入Decimal(1/5)沒有問題嗎?它不提供0.2但是0.2000 .... 1110223024 ...因爲1/5首先被轉換爲浮點數並且float不能精確地存儲0.2。寫入十進制(1)/十進制(5)可準確提供0.2 – Jal