我在一段代码上遇到了一些问题,最后做了下面的命令行代码,这只是一个实验,我没有在实际代码中的任何变量中存储如此大的值(取模10 ** 9 + 7)。
INDICATOR = 1
我不明白为什么整数除法会在浮点除法失败时给出正确的输出。
我基本上算出了:INDICATOR = 2
答案 0 :(得分:3)
因为精确。
整数和浮点数的编码方式不同。特别是在python 3中,整数可以任意大-例如,当您将整数转换为二进制数时,您提供的整数可以超过250位。它们的存储方式可以容纳它们的大小。
但是,浮点数被限制为一定的大小-通常为64位。这64位分为符号(1位),尾数和指数-尾数中的位数限制了数字的精确度。 Python's documentation contains a section on this limitation。
所以,当您这样做
(a//(b*c))%(10**9 +7)
您正在使用整数再次执行该计算,该整数又是任意大的。但是,当您这样做时:
(a/(b*c))%(10**9 +7)
您正在使用只有18个有效数字的数字执行该计算-这已经不精确了,使用它进行更多的计算只会进一步破坏答案。
如果需要使用非常大的浮点数,可以避免这种情况的方法是使用python的decimal module(属于标准库),不会出现这些问题。
答案 1 :(得分:2)
原因是整数是精确的,但浮点数受浮点精度的限制:Python2.7 default float precision