对于python中的大n值,除以10会得到不准确的答案

时间:2016-10-27 16:28:43

标签: python python-3.x

我正在解决一个解决2 ^ 1000位数之和的简单问题。我知道,解决方案非常简单;但请看这段代码:

n=2**1000
sum=0
while n>0:
    sum+=n%10
    n=int(n/10)
    print(n)
print(sum)

上面的代码段给出了错误的答案。但是,如果我做了一个小改动:

n=2**1000
sum=0
while n>0:
    sum+=n%10
    n//=10     # changed
    print(n)
print(sum)

然后答案是正确的。有人能告诉我这里的区别是什么吗?

(注意:这种差异仅适用于n的大值。)

1 个答案:

答案 0 :(得分:5)

看起来你正在使用python3,//运算符执行整数除法,而/运算符执行浮点除法,这对于巨大的值会失去精度。

例如:

>>> int((2**1000 / 49) * 49) == 2**1000
False