Як виразити нескінченність у Рубі?


Відповіді:


187

Якщо ви використовуєте рубін 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
Правильно. Я спробував порівняти будь-яке ціле число і це значення, і, здається, це працює нормально. Мені просто цікаво, чи це безпечно!
Amokrane Chentir

1
Тут є приємна стаття, що описує властивості нескінченності в Ruby (включаючи нескінченність, отриману шляхом ділення на 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)>

Працює також і, IMHO, виглядає краще, ніж Float :: INFINITY
Alexander Gorg
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.