如何在Python中表示一个无限数?


558

如何在python中表示无穷大?无论您在程序中输入哪个数字,任何数字都不得大于此无穷大表示形式。


29
math.inf可以用作优化问题中的初始值,因为它可以与min(例如)一起正确使用。min(5, math.inf) == 5。例如,在最短路径算法中,您可以设置未知距离,math.inf而无需特殊情况None或假定上限9999999。同样,您可以将其-math.inf用作最大化问题的起始值。
上校恐慌

在大多数情况下,在优化问题中使用math.inf的替代方法是从第一个值开始。
Tobias Bergkvist

Answers:


705

在Python中,您可以执行以下操作:

test = float("inf")

在Python 3.5中,您可以执行以下操作:

import math
test = math.inf

然后:

test > 1
test > 10000
test > x

永远是真的。当然,除非指出,否则x也是无穷大或“ nan”(“非数字”)。

另外(Python的ONLY 2.X)中,在比较Ellipsisfloat(inf)较小,例如:

float('inf') < Ellipsis

将返回true。


15
如果x也是inf,那将不是真的。
Maxim Egorushkin 2011年

5
请注意,无穷大是在标准IEEE 754-1985(en.wikipedia.org/wiki/IEEE_754-1985)中定义的,任何现代语言都将依赖它。另一点是,根据此规范,无穷大必须(显然)必须是浮点数。这也许可以解释为什么Python选择了这种笨拙的语法。
quickbug 2015年

3
如果x是内置的Ellipsis,则它也不是真的,它比所有东西(包括无穷大)进行比较。 float("inf") < Ellipsis返回True
单身

2
不确定最后一个,math.inf < ...或者至少对我来说float('inf') > Ellipsis抛出TypeError: unorderable types: float() < ellipsis()
彼得·戈德斯伯勒

2
我在3.5。大概是2.x / 3.x的东西。
彼得·戈德斯伯勒

80

从Python 3.5开始,您可以使用math.inf

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

47

似乎没有人明确提到负无穷大,因此我认为应该添加它。

对于正无穷大(仅出于完整性考虑):

math.inf

对于负无穷大:

-math.inf

30

我不知道您在做什么,但是float("inf")给您的是float Infinity,它比其他任何数字都大。



24

另一种较不方便的方法是使用Decimal类:

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

21
为什么不添加它,为什么它不那么方便,以及为什么任何人都应该使用它呢?
尼可罗马基

4
我们来看一下: Decimal('Infinity') == float('inf')return True,所以几乎一样。
丹尼斯·马利诺夫斯基

8
@afzal_SH float('inf') is float('inf')回报False
nemesisdesign

4
无限甚至与自身都不同,恕我直言,恕我直言
nemesisdesign 2015年

5
float('inf') is float('inf')- > False,只是认为他们是不同的情况不同的对象,而不是内部的内容是不同的-居然@nemesisdesign尖float('int') == float('int')持有至True。这是相同的问题,例如比较[1,2,3]为[1,2,3]和[1,2,3] == [1,2,3]之类的可变对象,这些对象依次为False和True ..更多信息见:stackoverflow.com/questions/2988017/...
曼努埃尔·维莱拉

13

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

None < any integer < any string

因此,检查i < ''适用True于任何整数i

在python3中已合理弃用了它。现在这样的比较最终

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

5
如果您确实使用过,请至少将其包装在一些易读的名称中,例如:MIN_INFINITY = None; INFINITY = "inf"; MIN_INFINITY < x < INFINITY
Ali Rasim Kocal,2015年

5
但是您不必使用它。
Joost

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.