Como expressar o infinito em Ruby?


Respostas:


187

Se você usa o ruby ​​1.9.2, pode usar :

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

Ou você pode criar sua própria constante usando o seguinte *:
Verifiquei que no Ruby 1.8.6, 1.8.7 e 1.9.2 você tem o Float.infinite? .

PositiveInfinity = +1.0/0.0 
=> Infinity

NegativeInfinity = -1.0/0.0 
=> -Infinity

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

* Verifiquei isso no Ruby 1.8.6 e 1.9.2


2
Certo. Tentei fazer comparações entre qualquer número inteiro e esse valor e parece estar funcionando bem. Só estou me perguntando agora se isso é seguro!
Amokrane Chentir

1
Há um bom artigo aqui descrevendo as propriedades do Infinity no Ruby (incluindo o Infinity derivado da divisão por 0): nithinbekal.com/posts/ruby-infinity - deve lhe dar uma idéia se é seguro ou não. (Por que vale a pena, IMHO brincando com valores numéricos Infinito é quase nunca seguro ou realmente necessário, independentemente do que a programação idioma que você está usando, a menos que você está fazendo o trabalho real de matemática relacionadas)
Andrew Faulkner

Isso é ótimo, obrigado, acredito que você também pode fazer -Float::INFINITYpelo infinito negativo.
Saleh Rastani

97

Nenhuma palavra-chave, mas 1.9.2 tem uma constante para isso:

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

+1, eu não sabia que isso era no 1.9.2. Atualizei minha resposta direcionando as pessoas para sua resposta, se essa é a versão que eles estão direcionando.
25411 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)>

Funciona tão bem e, IMHO, parece melhor, em seguida, Float :: INFINITY
Alexander Gorg
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.