Как выразить бесконечность в 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.