我正在嘗試使用 Python 和這個維基百科頁面自學 Chudnovsky 的演算法:

我試圖撰寫最右邊使用 Sigma 符號的方程。我熟悉 Python,但數學不是很好。我給自己定的目標是看看能不能準確地列印出至少 100 位的圓周率。
公式中有 5 組括號,所以我嘗試對 5 個不同的組件中的每一個進行編碼。我還撰寫了一個執行階乘的函式,因為在 5 個組件/括號中的 3 個中使用了階乘。
這是我的 23 行作業代碼,有人可以幫我理解為什么它不能準確地達到 100 位嗎?它準確到第 28 位:3.1415926535897932384626433832。然后對于第 29 位數字它說 8 但它應該是 7...
import math
from decimal import *
def factorial(n):
if n == 0:
return 1
memory = n
for i in range(1, n):
memory *= i
return memory
iterations = 500
_sum = 0
#here's the Sigma part
for q in range(0, iterations):
a = factorial(6*q)
b = (545140134*q) 13591409
c = factorial(3*q)
d = (factorial(q))**3
e = (-262537412640768000)**q
numerator = (a*b)
denominator = (c*d*e)
_sum = Decimal(numerator / denominator)
#ensures that you get 100 digits for pi
getcontext().prec = 100
sq = Decimal(10005).sqrt()
overPI = Decimal(426880 * sq)
pi = (overPI) * (Decimal(1 / _sum))
print("Pi is", pi)
感謝您提供的任何幫助。
uj5u.com熱心網友回復:
在檔案開頭設定小數精度,以便將其應用于所有后續操作:
from decimal import * getcontext().prec = 100Decimal在除法或乘法之前將一個或兩個運算元轉換為:# bad, float to decimal -> loss of precision _sum = Decimal(numerator / denominator) # better, precision preserved _sum = Decimal(numerator) / Decimal(denominator)
結果 - 精確到 98 dp(100 平方英尺減去舍入誤差):
# 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Pi is 3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117069
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/483271.html
標籤:Python python-3.x 数学 符号数学 圆周率
下一篇:如何反轉連續的百分比計算?
