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

Есть ли ключевое слово для выражения бесконечности в Ruby?


person Amokrane Chentir    schedule 25.04.2011    source источник


Ответы (3)


Если вы используете 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

person Matt    schedule 25.04.2011
comment
Верно. Я пробовал сравнивать любое целое число и это значение, и, похоже, он работает нормально. Мне просто интересно, безопасно ли это! - person Amokrane Chentir; 25.04.2011
comment
Здесь есть хорошая статья, описывающая свойства Infinity в Ruby (включая Infinity, полученную путем деления на 0): nithinbekal .com / posts / ruby-infinity - должен дать вам представление о том, безопасно это или нет. (Как бы то ни было, IMHO возиться с числовыми значениями Infinity практически никогда не бывает безопасным или действительно необходимым, независимо от того, какой язык программирования вы используете, если только вы не выполняете фактическую работу, связанную с математикой) - person Andrew Faulkner; 02.01.2016
comment
Это здорово, спасибо, я считаю, что вы также можете сделать -Float::INFINITY для отрицательной бесконечности. - person Saleh Rastani; 12.02.2019

Ключевого слова нет, но в 1.9.2 для этого есть константа:

>> Float::INFINITY #=> Infinity
>> 3 < Float::INFINITY #=> true
person Michael Kohl    schedule 25.04.2011
comment
+1, я не знал, что это было в 1.9.2. Я обновил свой ответ, направляя людей на ваш ответ, если это версия, на которую они нацелены. - person Matt; 25.04.2011

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)>
person davidtingsu    schedule 25.07.2013
comment
Также работает и, имхо, выглядит лучше, чем Float :: INFINITY. - person Alexander Gorg; 29.03.2018