为什么python限制小数位数?

问题描述 投票:0回答:1
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。

image of factor prints

python math pi
1个回答
0
投票

您应该使用小数,例如获得 1000 位数字

>>> import decimal
>>> decimal.getcontext().prec = 1000 #1000 decimal precision
>>> decimal.getcontext().prec
1000
>>> decimal.Decimal(1)/decimal.Decimal(7)
Decimal('0.1428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571428571429')
© www.soinside.com 2019 - 2024. All rights reserved.