2009-05-07 8 views
0

Ausführen dieses Code:Wie löst man die "Bignum out of Float Range" Warnung?

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

Ich erhalte die Warnung

Bignum aus Float Bereich

Wie kann ich meinen Code diesen Fehler zu lösen fixiert?

Da Ruby dynamisch typisiert ist, weiß ich nicht wie. Danke vielmals.

+2

Ruby hat Typen. Tatsächlich ist Ruby eine stark typisierte (im Gegensatz zu einer schwachen) Sprache, was bedeutet, dass jedes einzelne Objekt einen genau definierten Typ hat. Es ist auch eine dynamisch typisierte Sprache (im Gegensatz zu statisch), von der sie denken, dass sie sich auf sie bezieht. – sris

Antwort

3

Was Sie suchen, ist BigDecimal.


So etwas wie dies funktionieren kann (lasse ich es für eine Minute auf meinem Rechner läuft und es war immer noch nicht mit einer Antwort kommt ... scheint teuer zu rechen):

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 
Verwandte Themen