我用它来查找事实(100)的所有数字的总和,它给了我正确的输出648。
while(fact>0):
r=fact%10
sum=sum+r
fact=fact//10
print(sum)
但是,在使用相同的脚本(用//替换为math.floor()函数)时,我获得了675作为输出。
while(fact>0):
r=fact%10
sum=sum+r
fact=floor(fact/10)
print(sum)
请帮助我解决这个异常问题。据我了解,N // x和math.floor()是可互换的。
答案 0 :(得分:0)
使用/
将输出一个浮点数,该浮点将打开float arithmetic error的门。简而言之,这意味着由于计算机如何存储实数,您的除法单位数字是错误的,因此您不应该依赖浮点除法。
在有限数量的二进制表示形式中压缩无限多个实数是不可能的。因此,每个实数只能由带有一定误差的浮点数来近似。这是众所周知的,即使它不是特定于Python的,它也是文档mentions it。
可以计算出一个近似值的最大浮点误差,尽管仅知道对于诸如fact(100) / 10
这样的非常大的浮点数,该误差大于1。这意味着四舍五入为整数会给出错误的结果。
因此,每当您可以使用整数算术而不是浮点算术时,都应该这样做,因为整数算术总是精确的。