Bagaimana cara mengekspresikan infinity di Ruby?

137

Apakah ada kata kunci untuk mengekspresikan Infinity di Ruby?

Amokrane Chentir
sumber

Jawaban:

188

Jika Anda menggunakan ruby ​​1.9.2, Anda dapat menggunakan :

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

Atau Anda dapat membuat konstanta Anda sendiri menggunakan *:
Saya telah memeriksanya di Ruby 1.8.6, 1.8.7, dan 1.9.2 Anda memiliki Float.infinite? .

PositiveInfinity = +1.0/0.0 
=> Infinity

NegativeInfinity = -1.0/0.0 
=> -Infinity

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

* Saya telah memverifikasi ini di Ruby 1.8.6 dan 1.9.2

Matt
sumber
2
Baik. Saya mencoba melakukan perbandingan antara bilangan bulat apa pun dan nilai itu dan tampaknya berfungsi dengan baik. Saya hanya ingin tahu sekarang apakah ini aman!
Amokrane Chentir
1
Ada artikel bagus di sini yang menjelaskan properti Infinity di Ruby (termasuk Infinity yang diturunkan melalui pembagian dengan 0): nithinbekal.com/posts/ruby-infinity - akan memberi Anda gambaran apakah itu aman atau tidak. (Untuk apa nilainya, IMHO mengotak-atik nilai Infinity numerik hampir tidak pernah aman atau benar-benar dibutuhkan terlepas dari bahasa pemrograman apa yang Anda gunakan, kecuali Anda melakukan pekerjaan yang berhubungan dengan matematika yang sebenarnya)
Andrew Faulkner
Ini bagus, terima kasih, saya yakin Anda juga bisa melakukannya -Float::INFINITYuntuk ketidakterbatasan negatif.
Saleh Rastani
98

Tidak ada kata kunci, tetapi 1.9.2 memiliki konstanta untuk ini:

>> Float::INFINITY #=> Infinity
>> 3 < Float::INFINITY #=> true
Michael Kohl
sumber
+1, saya tidak menyadari ini di 1.9.2. Saya telah memperbarui jawaban saya yang mengarahkan orang ke jawaban Anda jika itu adalah versi yang mereka targetkan.
Matt
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
sumber
Berfungsi juga dan, IMHO, terlihat lebih baik daripada Float :: INFINITY
Alexander Gorg