为什么//(除法楼层)产生结果,但是math.floor()给出OverflowError

时间:2019-07-11 16:27:51

标签: python division floor

我正在解决一个编程问题,要求我找到一个很大的数字(10 ^ 100,000)和另一个数字(10 ^ 5)的浮点除法。 但是,当我从数学模块导入floor时,它给了我一个运行时错误,但是当我使用//进行尝试时,它向我显示了结果。

我想知道为什么会有这种差异? //和math.floor()有什么区别。

我是初学者,无法找到相关资料。

使用

使用math.floor


>>> import math
>>> math.floor( pow(10,1000) / 1000 )
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OverflowError: integer division result too large for a float

使用//

pow(10,1000) // 1000
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

3 个答案:

答案 0 :(得分:4)

这是因为pow(10,1000) / 1000浮点除法,而pow(10,1000) // 1000整数除法

如您所见,在您的情况下,integer division result [is] too large for a float是因为pow(10,1000) / 1000尝试产生浮点数,但结果将是10**997,即使在64位中也不适合浮动。双精度浮点格式(也称为“ binary64”)为固定宽度,可让您存储数字up to 10**308。如果您仍然想存储此数字,则需要使用"binary80" format,它是现成的Python中没有的,可能仍然无法准确表示结果。

Python中的整数除法有所不同,因为int类型仅受您的RAM限制。例如,Python可以在眨眼间计算出 integer 10**10000(即your_huge_number ** 10!)。

答案 1 :(得分:1)

pow(10, 1000) / 1000返回一个整数。

pow(10, 1000)会产生错误,因为它需要将pow(10, 1000) // 1000转换为一个不能太大的浮点数。

{{1}}执行整数除法,不需要转换为浮点数。

答案 2 :(得分:-1)

OverflowError: integer division result too large for a float

这告诉您几乎所有需要了解的内容。

\\是整数除法。就像这个问题一样,当数字很大时,Python将本地使用大整数计算。

pow()但是返回浮点数。这些遵循严格的标准,在内存中定义了格式,限制了可能的范围。您尝试计算的值超出了该范围,因此会出现错误。