Как я могу представить бесконечное число в Python?
560
Как я могу представить бесконечное число в Python? Независимо от того, какое число вы вводите в программе, ни одно число не должно быть больше, чем это представление бесконечности.
math.infполезен в качестве начального значения в задачах оптимизации, потому что он работает правильно с min, например. min(5, math.inf) == 5, Например, в алгоритмах кратчайшего пути вы можете установить неизвестные расстояния, math.infне прибегая к специальному случаю, Noneили принять верхнюю границу 9999999. Точно так же вы можете использовать -math.infв качестве начального значения для задач максимизации.
полковник Паник
В большинстве случаев альтернативой использованию math.inf в задачах оптимизации является начало с первого значения.
Тобиас Бергквист
Ответы:
708
В 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)меньше, например:
Обратите внимание, что бесконечность определена в норме IEEE 754-1985 ( en.wikipedia.org/wiki/IEEE_754-1985 ), на которую будет опираться любой современный язык. Другое дело, что согласно этой норме бесконечность должна (очевидно) быть числом с плавающей запятой. Это может объяснить, почему Python выбрал этот неудобный синтаксис.
быстрый клоп
3
Это также не будет верно, если x является встроенным Ellipsis, который сравнивает больше, чем все, включая бесконечность. float("inf") < Ellipsisвозвращает True
Singletoned
2
Не уверен насчет последнего math.inf < ...или float('inf') > Ellipsisвыкидывает TypeError: unorderable types: float() < ellipsis(), по крайней мере, для меня.
Питер Голдсборо
2
Я на 3.5. Вероятно, вещь 2.x / 3.x.
Питер Голдсборо
80
Начиная с Python 3.5 вы можете использовать math.inf:
почему вы не добавляете, почему это менее удобно и почему кто-то должен его использовать ?
Никколо
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], которые по порядку ложные. и правда .. Больше информации смотрите: stackoverflow.com/questions/2988017/…
Маноэль Вилела
13
В python2.x был грязный хак, который служил этой цели (НИКОГДА не используйте его, если это абсолютно не нужно):
None< any integer < any string
Таким образом, проверка i < ''выполняется Trueдля любого целого числа i.
Это было разумно устарело в python3. Теперь такие сравнения заканчиваются
Если вы действительно хотите использовать это, по крайней мере оберните его в несколько читаемых имен, таких как:MIN_INFINITY = None; INFINITY = "inf"; MIN_INFINITY < x < INFINITY
Али Расим Кокал
5
Но вы не должны использовать это.
Joost
3
Также, если вы используете SymPy, вы можете использовать sympy.oo
math.inf
полезен в качестве начального значения в задачах оптимизации, потому что он работает правильно с min, например.min(5, math.inf) == 5
, Например, в алгоритмах кратчайшего пути вы можете установить неизвестные расстояния,math.inf
не прибегая к специальному случаю,None
или принять верхнюю границу9999999
. Точно так же вы можете использовать-math.inf
в качестве начального значения для задач максимизации.Ответы:
В Python вы можете сделать:
В Python 3.5 вы можете сделать:
А потом:
Всегда будет правдой Если, конечно, как указано, x также является бесконечностью или «nan» («не число»).
Кроме того (ТОЛЬКО для Python 2.x), по сравнению с
Ellipsis
,float(inf)
меньше, например:вернул бы истину.
источник
Ellipsis
, который сравнивает больше, чем все, включая бесконечность.float("inf") < Ellipsis
возвращает Truemath.inf < ...
илиfloat('inf') > Ellipsis
выкидываетTypeError: unorderable types: float() < ellipsis()
, по крайней мере, для меня.Начиная с Python 3.5 вы можете использовать
math.inf
:источник
Кажется, никто не упомянул об отрицательной бесконечности в явном виде, поэтому я думаю, что я должен добавить ее.
Для положительной бесконечности (просто ради полноты):
Для отрицательной бесконечности:
источник
Я не знаю точно, что вы делаете, но
float("inf")
дает вам бесконечность с плавающей точкой, которая больше, чем любое другое число.источник
Существует бесконечное в библиотеке NumPy:
from numpy import inf
. Чтобы получить отрицательную бесконечность, можно просто написать-inf
.источник
Другой, менее удобный способ сделать это - использовать
Decimal
класс:источник
Decimal('Infinity') == float('inf')
возвращаетсяTrue
, так что это почти то же самое.float('inf') is float('inf')
возвращаетсяFalse
float('inf') is float('inf')
->False
, просто считаю , что они являются различными объектами с различными экземплярами, но не о том , что внутреннее содержание различно - на самом деле , как @nemesisdesign заостреннойfloat('int') == float('int')
держитсяTrue
. Это та же проблема, что и сравнение изменяемых объектов, таких как [1,2,3], [1,2,3] и [1,2,3] == [1,2,3], которые по порядку ложные. и правда .. Больше информации смотрите: stackoverflow.com/questions/2988017/…В python2.x был грязный хак, который служил этой цели (НИКОГДА не используйте его, если это абсолютно не нужно):
Таким образом, проверка
i < ''
выполняетсяTrue
для любого целого числаi
.Это было разумно устарело в python3. Теперь такие сравнения заканчиваются
источник
MIN_INFINITY = None; INFINITY = "inf"; MIN_INFINITY < x < INFINITY
Также, если вы используете SymPy, вы можете использовать
sympy.oo
и т.п.
источник