Як я можу представити нескінченне число в Python?


558

Як я можу представити нескінченне число в пітоні? Незалежно від того, яке число ви введете в програму, жодне число не повинно бути більшим, ніж це представлення нескінченності.


29
math.infє корисним як початкове значення при проблемах з оптимізацією, оскільки воно працює правильно з min, наприклад. min(5, math.inf) == 5. Наприклад, в алгоритмах найкоротшого шляху ви можете встановлювати невідомі відстані, math.infне потребуючи спеціального випадку Noneабо припускати верхню межу 9999999. Аналогічно, ви можете використовувати -math.infяк вихідне значення для максимізації проблем.
Полковник Паніка

У більшості випадків альтернатива використанню math.inf в проблемах оптимізації - починати з першого значення.
Тобіас Бергквіст

Відповіді:


706

У Python ви можете:

test = float("inf")

У Python 3.5 ви можете:

import math
test = math.inf

І потім:

test > 1
test > 10000
test > x

Завжди буде правдою. Якщо звичайно, як зазначалося, x також є нескінченністю або "nan" ("не число").

Додатково (Python 2.x ONLY), в порівнянні з Ellipsis, float(inf)є меншою, наприклад:

float('inf') < Ellipsis

повернеться правдою.


15
І якщо x також є inf, це не буде правдою.
Максим Єгорушкін

5
Зауважимо, що нескінченність визначена в нормі IEEE 754-1985 ( en.wikipedia.org/wiki/IEEE_754-1985 ), на яку покладається будь-яка сучасна мова. Ще один момент полягає в тому, що згідно з цією нормою нескінченність повинна (очевидно) бути числом з плаваючою комою. Це може пояснити, чому Python обрав цей синтаксис akward.
швидка помилка

3
Це також не буде правдою, якщо вбудований х Ellipsis, який порівнює більше за все, включаючи нескінченність. float("inf") < Ellipsisповертається True
Singletoned

2
Не впевнений у останньому math.inf < ...чи float('inf') > Ellipsisкидає а TypeError: unorderable types: float() < ellipsis(), принаймні для мене.
Пітер Голдсборо

2
Я на 3,5. Можливо, річ 2.x / 3.x.
Пітер Голдсборо


47

Здається, ніхто не згадував про негативну нескінченність прямо, тому, я думаю, я повинен її додати.

Для позитивної нескінченності (лише заради повноти):

math.inf

Для негативної нескінченності:

-math.inf

30

Я точно не знаю, що ви робите, але float("inf")дає вам плаваючу Нескінченність, яка більша за будь-яке інше число.


27

Існує нескінченна в бібліотеці NumPy: from numpy import inf. Щоб отримати негативну нескінченність, можна просто написати -inf.


24

Ще один, менш зручний спосіб - це використовувати Decimalклас:

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

21
чому ви не додасте, чому це менш зручно і чому хтось повинен ним користуватися ?
Niccolò

4
Подивимось: Decimal('Infinity') == float('inf')повертається True, значить, це майже те саме.
Денис Малиновський

8
@afzal_SH float('inf') is float('inf')повертається Falseтеж
nemesisdesign

4
нескінченність відрізняється навіть від самої себе, тому ваш коментар не мав особливого сенсу для мене, ІМХО
nemesisdesign

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], які, по порядку, є помилковими та True .. Детальніше дивіться: stackoverflow.com/questions/2988017/…
Manoel Vilela

13

У python2.x був брудний злом, який слугував цій цілі (НІКОЛИ не використовуйте його, якщо це абсолютно не потрібно):

None < any integer < any string

Таким чином, чек i < ''має місце Trueдля будь-якого цілого числа i.

У python3 вона була досить застарілою. Зараз такі порівняння закінчуються

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

5
Якщо ви справді користуєтесь цим, використовуйте його, принаймні, зафіксуйте його в деяких читаних іменах, таких як:MIN_INFINITY = None; INFINITY = "inf"; MIN_INFINITY < x < INFINITY
Алі Расим Кокал

5
Але вам не потрібно цим користуватися.
Joost

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.