2009-05-07 8 views
0

L'exécution de ce code:Comment résoudre l'avertissement "Bignum out of Float range"?

n = 4 * 1000 * 1000 
fn = (((1 + Math.sqrt(5)) ** n) - ((1 - Math.sqrt(5)) ** n))/((2 ** n) * Math.sqrt(5)) 
puts fn - 1 

Je reçois l'avertissement

Bignum hors de portée de flotteur

Comment puis-je fixe mon code pour résoudre cette erreur? Comme ruby ​​est typé dynamiquement, je ne sais pas comment. Merci beaucoup.

+2

Ruby a types. En fait, ruby ​​est un langage fortement typé (par opposition à faible), ce qui signifie que chaque objet a un type bien défini. C'est aussi un langage dynamiquement typé (par opposition à statiquement) qui, selon vous, est ce dont vous parlez. – sris

Répondre

3

Ce que vous cherchez est BigDecimal.


Quelque chose comme cela peut fonctionner (je laisse courir pendant une minute sur ma machine et il avait toujours pas trouver une réponse ... semble cher informatiquement):

require "bigdecimal" 

n  = (4 * 1000 * 1000) 
sqr_5 = BigDecimal("5.0").sqrt(5) 
sqr_5a1 = BigDecimal((1+sqr_5).to_s) 
sqr_5m1 = BigDecimal((sqr_5-1).to_s) 
fn  = (sqr_5a1.power(n) - (sqr_5m1.power(n)))/((2.power(n)) * sqr_5) 
puts fn - 1 
Questions connexes