Как выразить бесконечность в Ruby?


Ответы:


187

Если вы используете ruby ​​1.9.2, вы можете использовать :

>> Float::INFINITY #=> Infinity
>> 3 < Float::INFINITY #=> true

Или вы можете создать свою собственную константу, используя следующее *:
Я проверял, что в Ruby 1.8.6, 1.8.7 и 1.9.2 у вас есть Float.infinite? ,

PositiveInfinity = +1.0/0.0 
=> Infinity

NegativeInfinity = -1.0/0.0 
=> -Infinity

CompleteInfinity = NegativeInfinity..PositiveInfinity
=> -Infinity..Infinity

* Я подтвердил это в Ruby 1.8.6 и 1.9.2


2
Правильно. Я попытался сделать сравнение между любым целым числом и этим значением, и, похоже, оно работает нормально. Мне просто интересно, если это безопасно!
Амокране Чентир

1
Здесь есть хорошая статья, описывающая свойства Infinity в Ruby (включая Infinity, полученную делением на 0): nithinbekal.com/posts/ruby-infinity - должна дать вам представление о том, безопасно ли это. (Для чего бы это ни стоило, IMHO возиться с числовыми значениями Infinity практически никогда не бывает безопасным или действительно необходимым, независимо от того, какой язык программирования вы используете, если вы не выполняете реальную математическую работу)
Эндрю Фолкнер,

Это здорово, спасибо, я считаю, что вы также можете сделать -Float::INFINITYдля отрицательной бесконечности.
Салех Растани

97

Нет ключевого слова, но 1.9.2 имеет константу для этого:

>> Float::INFINITY #=> Infinity
>> 3 < Float::INFINITY #=> true

+1, я не понял, что это было в 1.9.2. Я обновил свой ответ, направив людей на ваш ответ, если это та версия, на которую они нацелены.
Мэтт

6

http://www.ruby-doc.org/stdlib-1.9.3/libdoc/bigdecimal/rdoc/BigDecimal.html#label-Infinity

1.9.3p429 :025 > BigDecimal('Infinity')
 => #<BigDecimal:7f8a6c548140,'Infinity',9(9)>
1.9.3p429 :026 > BigDecimal('-Infinity')
 => #<BigDecimal:7f8a6a0e3728,'-Infinity',9(9)>
1.9.3p429 :027 > 3 < BigDecimal('Infinity')
 => true

1.9.3p429 :028 > BigDecimal::INFINITY
 => #<BigDecimal:7f8a6ad046d8,'Infinity',9(9)>

Работает так же и, ИМХО, выглядит лучше, чем Float :: INFINITY
Александр Горг
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.