我正在解决一个编程问题,要求我找到一个很大的数字(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
答案 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()
但是返回浮点数。这些遵循严格的标准,在内存中定义了格式,限制了可能的范围。您尝试计算的值超出了该范围,因此会出现错误。