为什么math.inf是浮点数,为什么不能将其转换为整数?

时间:2019-05-02 23:32:19

标签: python math infinity

我正在做一些实验,并且正在尝试这样做:

import math
for i in range(math.inf):
    print(i)

我希望它与此完全相同:

c = 0
while True:
    print(c)
    c += 1

但是它更像这样

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'float' object cannot be interpreted as an integer

然后我尝试将inf转换为浮点数:

import math
for i in range(int(math.inf)):
    print(i)

但这给了我这个错误,表明您不能将float infinity转换为整数。

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OverflowError: cannot convert float infinity to integer

现在我的问题是为什么会发生这种情况,为什么无穷大首先是浮点数。是因为某些基本的数学法则还是这是对否则执行某些问题的解决方案?

谢谢!

2 个答案:

答案 0 :(得分:6)

无穷大不是整数

math.inffloat('inf')等价,并且是一个符合IEEE 754(除了NaN值等)的浮点功能。从Python更新摘要中:

  

添加了许多浮点功能。 float()函数现在将   将字符串nan转换为IEEE 754 Not A Number值,然后将+ inf和   -inf变为正或负无穷大。这可以在具有IEEE 754语义的任何平台上使用。 (由Christian Heimes贡献;问题   1635。)


但是,如果您想遍历ℕ并且不使用while循环,则生成器的魔力可以助您一臂之力。

import itertools
natural_numbers = itertools.count()

for n in natural_numbers:
    ...

或者您可以使用itertools.count(1)遍历ℤ+))

答案 1 :(得分:3)

math.inf不是特定值;它是一个特殊的标识符,比值更像nan。它被定义为最大浮点数,用于标记需要特殊处理的值。它的语义定义是它大于任何可表达的值:它是 infinity 。您无法将其强制转换为int,因为没有定义的等效项。

可能要出于您的目的使用常数sys.maxint。有关更多详细信息,请参见initializr