Python中的无限整数

107 投票
3 回答
158499 浏览
提问于 2025-04-18 12:12

Python 3中有 float('inf')Decimal('Infinity'),但没有 int('inf')。那么,为什么表示无限整数的数字在这个语言里缺失呢? int('inf') 是不是不合理呢?

3 个回答

5

对于 Python 2,有时候你需要一个非常大的整数。比如说,我可能想用 x[:n] 来生成一个子数组,而有时我希望 n 的值能让整个数组都被生成出来。因为 n 不能是浮点数(Python 需要整数),所以你需要一个“很大的整数”。一个好的方法是使用系统能提供的最大整数:sys.maxint。下面是一个例子:

# MAX_SOURCES = sys.maxint # normal setting
MAX_SOURCES = 5 # while testing

# code to use an array ...
... sources[:MAX_SOURCES]

这样,在测试的时候,我可以使用一个较小的源数组,但在实际使用中则可以用完整的数组。

12

摘自这里:https://www.gnu.org/software/libc/manual/html_node/Infinity-and-NaN.html

IEEE 754 浮点数可以表示正无穷、负无穷和 NaN(不是一个数字)

也就是说,floatDecimal 这两种数据类型可以存储这些特殊的值。不过,基本类型 int 就没有办法存储这些值。当你超过一个无符号的 32 位整数的最大值(2^32)时,它会直接回到 0。

如果你想的话,可以创建一个类,里面包含一个整数,这样就可以让这个整数有可能表示无穷大的值。

20

你说得对,整数的无穷大是有可能的,但在Python标准库中并没有添加这个功能。这可能是因为在大多数情况下,math.inf已经可以替代它(正如Martijn在评论中提到的)。

与此同时,我在PyPI上添加了一个扩展整数的实现:

In [0]: from numbers import Integral, Real

In [0]: from extended_int import int_inf, ExtendedIntegral, Infinite

In [0]: i = int_inf

In [4]: float(i)
Out[4]: inf

In [5]: print(i)
inf

In [6]: i ** i

Out[6]: inf

In [7]: i
Out[7]: inf

In [9]: isinstance(i, Real)

Out[9]: True

In [10]: isinstance(i, Integral)

Out[10]: False

In [11]: isinstance(i, Infinite)

Out[11]: True

In [12]: isinstance(i, ExtendedIntegral)

Out[12]: True

In [13]: isinstance(2, ExtendedIntegral)

Out[13]: True

In [14]: isinstance(2, Infinite)

Out[14]: False

撰写回答