如何在 Python 中表示无限数?

Posted

技术标签:

【中文标题】如何在 Python 中表示无限数?【英文标题】:How can I represent an infinite number in Python? 【发布时间】:2011-12-08 12:53:54 【问题描述】:

如何在 python 中表示无限数?无论您在程序中输入哪个数字,任何数字都不应大于这个无穷大的表示。

【问题讨论】:

math.inf 在优化问题中作为初始值很有用,因为它可以与 min 一起正常工作,例如。 min(5, math.inf) == 5。例如,在最短路径算法中,您可以将未知距离设置为math.inf,而无需特殊情况None 或假设上限9999999。同样,您可以使用-math.inf 作为最大化问题的起始值。 在大多数情况下,在优化问题中使用 math.inf 的替代方法是从第一个值开始。 不禁想知道有多少 Python 问题似乎吸引了多种方式来做同样的事情。那个 Pythonian 或与 Python 的 Zen 是如何兼容的...... @nyholku 同意.. There should be one-- and preferably only one --obvious way to do it. 【参考方案1】:

在 Python 中,你可以这样做:

test = float("inf")

在 Python 3.5 中,您可以:

import math
test = math.inf

然后:

test > 1
test > 10000
test > x

永远都是真的。当然,正如所指出的那样,除非 x 也是无穷大或“nan”(“不是数字”)。

另外(仅限 Python 2.x),与Ellipsis 相比,float(inf) 更小,例如:

float('inf') < Ellipsis

将返回 true。

【讨论】:

如果 x 也是 inf 那就不对了。 请注意,无穷大是在标准 IEEE 754-1985 (en.wikipedia.org/wiki/IEEE_754-1985) 中定义的,任何现代语言都将依赖它。另一点是,根据这个规范,无穷大必须(显然)是一个浮点数。这或许可以解释为什么 Python 选择了这种笨拙的语法。 如果 x 是内置的 Ellipsis 也不是真的,它比一切都大,包括无穷大。 float("inf") &lt; Ellipsis 返回 True 不确定最后一个,math.inf &lt; ...float('inf') &gt; Ellipsis 会抛出TypeError: unorderable types: float() &lt; ellipsis(),至少对我而言。 我在 3.5。可能是 2.x/3.x 的东西。【参考方案2】:

从 Python 3.5 开始你可以使用math.inf:

>>> import math
>>> math.inf
inf

【讨论】:

【参考方案3】:

似乎没有人明确提到负无穷大,所以我想我应该添加它。

对于负无穷:

-math.inf

对于正无穷大(只是为了完整性):

math.inf

【讨论】:

【参考方案4】:

我不知道你在做什么,但是float("inf") 给你一个浮点数,它比任何其他数字都大。

【讨论】:

【参考方案5】:

NumPy 库中有一个无穷大:from numpy import inf。要获得负无穷大,只需写-inf

【讨论】:

【参考方案6】:

另一种不太方便的方法是使用Decimal class:

from decimal import Decimal
pos_inf = Decimal('Infinity')
neg_inf = Decimal('-Infinity')

【讨论】:

你为什么不添加为什么它不那么方便,为什么有人应该使用它 让我们看看:Decimal('Infinity') == float('inf') 返回True,所以它几乎是一样的。 @afzal_SH float('inf') is float('inf') 也返回False infinity 甚至与它本身不同,所以你的评论对我来说没有多大意义,恕我直言 float('inf') is float('inf') -> False,只是认为它们是具有不同实例的不同对象,而不是内部内容不同——实际上正如@nemesisdesign 指出的那样,float('int') == float('int') 坚持@987654332 @。这与比较可变对象(如 [1,2,3] 是 [1,2,3] 和 [1,2,3] == [1,2,3])是相同的问题,它们依次为 False和 True.. 更多信息请参阅:***.com/questions/2988017/…【参考方案7】:

在 python2.x 中有一个肮脏的 hack 可以达到这个目的(除非绝对必要,否则永远不要使用它):

None < any integer < any string

因此检查 i &lt; '' 对任何整数 i 保持 True

它在 python3 中已被合理弃用。现在这样的比较结束了

TypeError: unorderable types: str() < int()

【讨论】:

如果你真的有你用这个,至少用一些可读的名字包装它:MIN_INFINITY = None; INFINITY = "inf"; MIN_INFINITY &lt; x &lt; INFINITY 但你不必使用这个。【参考方案8】:

如果你使用 SymPy,你也可以使用 sympy.oo

>>> from sympy import oo
>>> oo + 1
oo
>>> oo - oo
nan

等等

【讨论】:

【参考方案9】:

对于正无穷

pos_inf_val = float("infinity")

对于负无穷

neg_inf_val = float("-infinity")

【讨论】:

【参考方案10】:

python中表示

float("inf") or float("INF") or float("Inf") or float("inF") or float("infinity") or float("Infinity") 创建一个 float 对象持有

你也可以在python中表示-∞

float("-inf") or float("-INF") or float("-Inf") or float("-infinity") 创建一个持有 -∞

的浮动对象

您可以执行算术运算

infinity = float("inf")
ninfinity = float("-inf")
nan = float("nan")

print(infinity*infinity)#inf
print(ninfinity+infinity)#not a number
print(1/-infinity)#is -0.0
print(nan*nan)# is not a number
print(1/infinity) # is 0.0 since 1/∞ is 0

输出:

$ python3 floating.py
inf
nan
-0.0
nan
0.0

【讨论】:

以上是关于如何在 Python 中表示无限数?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 函数结果中表示“未找到索引”

如何在 JavaScript 中表示浮点数? [复制]

如何在 proto 文件中表示接口实现

如何在 javascript 中表示其他语言?

如何在 TypeOrm 中表示视图?

如何在 GADT 中表示此 FSM