Python 3 有
float('inf')
和 Decimal('Infinity')
但没有 int('inf')
。那么,为什么该语言中缺少表示无限整数集的数字呢? int('inf')
不合理吗?
你说得对,整数无穷大是可能的,而且没有任何一个被添加到 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
取自此处:https://www.gnu.org/software/libc/manual/html_node/Infinity-and-NaN.html
IEEE 754 浮点数可以表示正无穷大或负无穷大,以及 NaN(不是数字)
也就是说,
float
和Decimal
的表示可以存储这些特殊值。然而,基本类型int
中没有任何东西可以存储相同的内容。当您超过无符号 32 位 int 中 2^32 的限制时,您只需再次翻转到 0 即可。
如果需要,您可以创建一个包含整数的类,该整数可以具有无限值的可能性。
对于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]
因此,在测试时,我可以使用较小的源数组,但在生产中使用完整的数组。
我认为原因是Python中的
int
类型是任意精度,与浮点类型float
不同。后者使用浮点数的 IEEE 标准二进制表示形式。另一方面,int
类型也使用 IEEE 标准二进制表示形式的整数,最多可表示最大,然后切换到任意精度表示形式,该表示形式仅受系统的硬件/软件配置的限制。几乎任何你能想到的数字都可以存储在 Python 中,就像宇宙中的分子数量适合任何计算机一样。从这个意义上说,整数的无穷大的意义几乎没有实际意义。