我的印象是python Integers是任意精度的。但是今天,当解决a leetCode problem并使用错误答案进行多次提交时,我终于在解决方案中添加了C = [{fruit: apple, number:4, qual: good }, {fruit: pear, number: 3, qual: bad}]
并成功了。我很困惑为什么会发生,下面是我的代码:
mod
我的猜测是溢出会导致错误的结果,每次求和时都会修改部分结果来解决问题。还是我想念其他东西?
答案 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) + 7
是1000000007.0
,一个float
。
这就是你在做什么:
print(1319186227454333254490768998141738589030871 % 1000000007.0) # wrong
811448245.0
如果您改为确保股息也是整数(10 ** 9 + 7
或1000000007
):
print(1319186227454333254490768998141738589030871 % 1000000007) # right
222616187