Come esprimere l'infinito in Ruby?


Risposte:


187

Se usi ruby ​​1.9.2, puoi usare :

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

Oppure puoi creare la tua costante usando il seguente *:
Ho verificato che in Ruby 1.8.6, 1.8.7 e 1.9.2 hai Float.infinite? .

PositiveInfinity = +1.0/0.0 
=> Infinity

NegativeInfinity = -1.0/0.0 
=> -Infinity

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

* Ho verificato questo in Ruby 1.8.6 e 1.9.2


2
Destra. Ho provato a fare confronti tra qualsiasi numero intero e quel valore e sembra funzionare bene. Mi sto solo chiedendo ora se questo è sicuro!
Amokrane Chentir,

1
C'è un bell'articolo che descrive le proprietà di Infinity in Ruby (incluso Infinity derivato dalla divisione per 0): nithinbekal.com/posts/ruby-infinity - dovrebbe darti un'idea se è sicuro o no. (Per quello che vale, IMHO scherzare con i valori numerici di Infinity non è praticamente mai sicuro o veramente necessario indipendentemente dal linguaggio di programmazione che stai usando, a meno che tu non stia facendo un vero lavoro di matematica)
Andrew Faulkner

Questo è fantastico, grazie, credo che tu possa fare anche -Float::INFINITYper l'infinito negativo.
Saleh Rastani,

97

Nessuna parola chiave, ma 1.9.2 ha una costante per questo:

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

+1, non mi rendevo conto che questo era in 1.9.2. Ho aggiornato la mia risposta indirizzando le persone alla tua risposta se questa è la versione a cui si rivolgono.
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)>

Funziona anche e, IMHO, ha un aspetto migliore di Float :: INFINITY
Alexander Gorg
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.