为什么Python 3.4给出了大数除法的错误答案,我如何测试可分性?

Zoo*_*ook 4 python floating-point precision division

在我的程序中,我使用除法来测试结果是否为整数,我正在测试可分性.但是,我得到了错误的答案.这是一个例子:

print(int(724815896270884803/61))
Run Code Online (Sandbox Code Playgroud)

给出11882227807719424.

print(724815896270884803//61)
Run Code Online (Sandbox Code Playgroud)

给出正确的结果11882227807719423.

为什么浮点结果错误,如何测试大数是否可被61整除?我是否真的需要进行整数除法然后将其相乘并查看它是否相等?

mhl*_*ter 7

你应该计算模数(%)而不是分割:

print(724815896270884803 % 61)
Run Code Online (Sandbox Code Playgroud)

这类似于进行整数除法并返回余数(回想小学长除法).剩下的0意思是它是可分的.


NPE*_*NPE 5

浮点结果是错误的,因为将两个整数分开/会产生一个浮点数,并且你的除法的确切结果不能完全表示为a float.确切的结果11882227807719423必须四舍五入到最接近的可表示数字:

In [1]: float(11882227807719423)
Out[1]: 1.1882227807719424e+16
Run Code Online (Sandbox Code Playgroud)