4o代码
要自己计算π的值,可以使用一种数值方法来逼近,比如莱布尼茨级数(莱布尼茨级数)或者更高效的迭代算法之一,如贝利-波尔温-普劳夫公式(BBP)公式)。
这里使用莱布尼茨级数来近似计算π的小数点后20位
萊布尼茨公式
def calculate_pi(terms):
pi_estimate = 0.0
for k in range(terms):
pi_estimate += ((-1) ** k) / (2 * k + 1)
return pi_estimate * 4
# 设置计算的项数
terms = 1000000 # 项数越多,精度越高
# 计算π
pi_value = calculate_pi(terms)
# 输出π小数点后20位
print(f"{pi_value:.20f}")
结果:
3.14159165358977432447
o1代码
from decimal import Decimal, getcontext
def calculate_pi(n):
getcontext().prec = n + 5 # Set precision higher to ensure accuracy
pi = Decimal(0)
k = 0
while True:
# Bailey–Borwein–Plouffe formula for Pi
new_term = (Decimal(1) / (16 ** k)) * (
Decimal(4) / (8 * k + 1) -
Decimal(2) / (8 * k + 4) -
Decimal(1) / (8 * k + 5) -
Decimal(1) / (8 * k + 6)
)
pi += new_term
if abs(new_term) < Decimal('1e-' + str(n)):
break
k += 1
pi_str = str(+pi)
return pi_str[:n + 2] # Include '3.' plus n decimal places
# Calculate Pi to 20 decimal places
pi_20_digits = calculate_pi(20)
print(pi_20_digits)
计算结果:3.14159265358979323846
正确的答案