如何在Python中表示无限数?

ssi*_*ral 511 python infinite infinity

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

Wil*_*all 633

在Python中,您可以:

test = float("inf")
Run Code Online (Sandbox Code Playgroud)

在Python 3.5中,您可以:

import math
test = math.inf
Run Code Online (Sandbox Code Playgroud)

然后:

test > 1
test > 10000
test > x
Run Code Online (Sandbox Code Playgroud)

永远都是真的.当然,除非指出,x也是无穷大或"nan"("不是数字").

另外(Python 2.x ONLY),与之比较Ellipsis,float(inf)较小,例如:

float('inf') < Ellipsis
Run Code Online (Sandbox Code Playgroud)

会回归真实.

  • 如果x也是inf,那将是不正确的. (11认同)
  • 请注意,无穷大在标准IEEE 754-1985(http://en.wikipedia.org/wiki/IEEE_754-1985)中定义,任何现代语言都依赖于此.另一点是,根据这个规范,无穷大必然(显然)是一个浮点数.这可能解释了为什么Python选择了这种难以理解的语法. (4认同)
  • 您可以执行 `-float("inf")` 来获得小于任何其他数字的负无穷大。 (4认同)
  • 如果x是内置的"省略号",它也不是真的,它比一切都要好,包括无穷大.`float("inf")<Ellipsis`返回True (3认同)
  • 不确定最后一个,`math.inf &lt; ...` 或 `float('inf') &gt; Ellipsis` 会抛出一个 `TypeError: unorderable types: float() &lt; ellipsis()`,至少对我来说是这样。 (3认同)
  • 我在3.5.可能是一个2.x/3.x的东西. (2认同)

rig*_*old 66

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

>>> import math
>>> math.inf
inf
Run Code Online (Sandbox Code Playgroud)


Sна*_*ƒаӽ 31

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

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

math.inf
Run Code Online (Sandbox Code Playgroud)

对于负无穷大:

-math.inf
Run Code Online (Sandbox Code Playgroud)

  • `float("inf")`、`math.inf` 和 `np.inf` 如何比较?什么时候使用哪一个? (7认同)
  • @CGFoX 如果您不想加载包,请使用第一个,这大约是它的高度。 (4认同)

Ned*_*der 30

我不确切地知道你在做什么,但是float("inf")给你一个浮动无限,它比任何其他数字都大.


Den*_*sky 24

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

from decimal import Decimal
pos_inf = Decimal('Infinity')
neg_inf = Decimal('-Infinity')
Run Code Online (Sandbox Code Playgroud)

  • 为什么不添加_为什么它不太方便,为什么有人应该使用它? (20认同)
  • @afzal_SH`float('inf')是float('inf')`也返回`False` (8认同)
  • 让我们看看:`Decimal('Infinity')== float('inf')`返回'True`,所以它几乎是一样的. (4认同)
  • `float('inf')是float('inf')` - >`False`,只是认为它们是不同实例的不同对象,但不是内部内容不同 - 实际上是@nemesisdesign指向`float( 'int')== float('int')`保持为'True`.这是同样的问题,如比较可变对象,如[1,2,3]是[1,2,3]和[1,2,3] == [1,2,3],它们按顺序是假的和真..更多信息请参阅:/sf/ask/209161221/ (4认同)
  • 无限甚至与自身不同,所以你的评论对我来说没有多大意义,恕我直言 (3认同)
  • @nemesisdesign 不正确。标准浮点算术中的“Inf == Inf”。也许您正在考虑“NaN != NaN”? (2认同)
  • @becko,在Python中,“==”运算符和“is”运算符意味着两个不同的东西。尝试在 python REPL 中运行以下代码: `float('inf') is float('inf')` 和 `float('inf') == float('inf')` (2认同)

Len*_*oyt 22

NumPy库中有一个无穷大:from numpy import inf.为了获得负无穷大,可以简单地写-inf.

  • `float("inf")`、`math.inf` 和 `np.inf` 如何比较?什么时候使用哪一个? (3认同)
  • 前两个是本机的,即不需要依赖。`np.inf` 需要 Numpy 包。`float('inf')` 有点 hacky,因为它涉及解析字符串,但从好的方面来说,它甚至不需要导入,而且解析在计算上通常可以忽略不计。不过,如果您无论如何都使用其中一个数学包,那么就使用它们吧。如果您碰巧同时使用 `math` 和 `np`,那么 `np.inf` 是最短的。 (2认同)

Eri*_*nga 15

无穷

\n

1. 使用float(\'inf\')float(\'-inf)

\n
positive_infinity = float(\'inf\') \nnegative_infinity = float(\'-inf\')\n
Run Code Online (Sandbox Code Playgroud)\n

2.使用Python\xe2\x80\x99s数学模块

\n
import math\n \npositive_infinity = math.inf \nnegative_infinity = -math.inf \n
Run Code Online (Sandbox Code Playgroud)\n

3. 整数maxsize

\n
import sys\n\nmaxSize = sys.maxsize \nminSize = -sys.maxsize \n
Run Code Online (Sandbox Code Playgroud)\n

4.使用Python\xe2\x80\x99s十进制模块

\n
from decimal import Decimal\n \npositive_infinity = Decimal(\'Infinity\') \nnegative_infinity = Decimal(\'-Infinity\') \n
Run Code Online (Sandbox Code Playgroud)\n

5.使用Numpy库

\n
from numpy import inf\n\npositive_infinity = inf \nnegative_infinity = -inf \n
Run Code Online (Sandbox Code Playgroud)\n


Ant*_*ins 12

在python2.x中有一个脏的hack用于此目的(除非绝对必要,否则不要使用它):

None < any integer < any string
Run Code Online (Sandbox Code Playgroud)

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

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

TypeError: unorderable types: str() < int()
Run Code Online (Sandbox Code Playgroud)

  • 如果你真的有你使用它,至少用一些可读的名字包装它:`MIN_INFINITY = None; INFINITY ="inf"; MIN_INFINITY <x <INFINITY` (5认同)
  • 但你不必使用它. (5认同)

Vic*_*tor 9

此外,如果您使用 SymPy,则可以使用 sympy.oo

>>> from sympy import oo
>>> oo + 1
oo
>>> oo - oo
nan
Run Code Online (Sandbox Code Playgroud)

等等。