pi=3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
U = 314
D = 100
print(U/D,U,D)
best=3.0
while True:
if abs((U+1)/D-pi)<abs(U/D-pi):
if abs((U+1)/D-pi)<abs(best-pi):
best=(U+1)/D
print(U+1,D,abs((U+1)/D-pi))
U+=1
elif abs((U-1)/D-pi)<abs(U/D-pi):
if abs((U-1)/D-pi)<abs(best-pi):
best=(U-1)/D
print(U,D,abs((U-1)/D-pi))
U-=1
else:
D+=1
我运行这段代码是为了尝试找到 pi 的因子估计值,但正如您在下面看到的,最终小数不会再进一步,程序告诉我 pi 和我的数字之间的错误是 0,这不可能是真的,因为 pi 不是不是一个因素。
如何更改代码,使小数点限制高于 e-17?
我已经尝试将每个值乘以 1e17,但最后的因子仍然打印 0。
您应该使用小数,例如获得 1000 位数字
>>> import decimal
>>> decimal.getcontext().prec = 1000 #1000 decimal precision
>>> decimal.getcontext().prec
1000
>>> decimal.Decimal(1)/decimal.Decimal(7)
Decimal('0.1428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571429')