总的来说遇到整数溢出

时间:2019-09-24 04:43:54

标签: python python-3.x integer-overflow

我的印象是python Integers是任意精度的。但是今天,当解决a leetCode problem并使用错误答案进行多次提交时,我终于在解决方案中添加了C = [{fruit: apple, number:4, qual: good }, {fruit: pear, number: 3, qual: bad}] 并成功了。我很困惑为什么会发生,下面是我的代码:

mod

我的猜测是溢出会导致错误的结果,每次求和时都会修改部分结果来解决问题。还是我想念其他东西?

1 个答案:

答案 0 :(得分:1)

您正在使用浮点数进行计算:

return int(self.recurse(d,f,target,memo)%(math.pow(10,9) + 7))

这会强制使用浮点数计算模数,这不是整数溢出,而是导致错误结果的浮点数误差。

让我们做d, f, target = 30, 30, 500。然后int(self.recurse(d, f, target, memo)返回1319186227454333254490768998141738589030871,一个int,而math.pow(10, 9) + 71000000007.0,一个float

这就是你在做什么:

print(1319186227454333254490768998141738589030871 % 1000000007.0)  # wrong
811448245.0

如果您改为确保股息也是整数(10 ** 9 + 71000000007):

print(1319186227454333254490768998141738589030871 % 1000000007)  # right   
222616187