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

Why is math.inf a float and why can't I convert it to an integer?

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

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

现在我的问题是为什么会发生这种情况以及为什么无穷大首先是一个浮点数。是因为一些潜在的数学定律,还是这是解决其他问题的方法?

提前致谢!

无穷大不是整数

math.inf 等同于 float('inf') 并且是根据 IEEE 754 实现的浮点功能(除了 NaN 值等)。来自 Python 更新摘要:

Many floating-point features were added. The float() function will now turn the string nan into an IEEE 754 Not A Number value, and +inf and -inf into positive or negative infinity. This works on any platform with IEEE 754 semantics. (Contributed by Christian Heimes; issue 1635.)


但是,如果您想迭代 ℕ 而不使用 while 循环,生成器的魔力可以助您一臂之力。

import itertools
natural_numbers = itertools.count()

for n in natural_numbers:
    ...

或者您可以使用 itertools.count(1) 迭代 ℤ+ ;)

math.inf不是具体值;它是一个特殊的标识符,更多的是 nan 而不是一个值。它被定义为一个浮点数,用于标记需要特殊处理的值。它的语义定义是它大于任何可表达的值:它是 infinity。您不能将其转换为 int,因为没有定义的等价物。

可能想要使用常量sys.maxint。有关详细信息,请参阅 here