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

134

Есть ли ключевое слово для выражения Infinity в 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

Matt
источник
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)>
davidtingsu
источник
Работает так же и, ИМХО, выглядит лучше, чем Float :: INFINITY
Александр Горг