Asp Forum
Home
|
Login
|
Register
|
Search
Forums
>
comp.lang.ruby
Re: Work around for "Bignum out of Float range"?
Nuralanur
2/2/2006 7:35:00 PM
Dear Sam,
your problem is somewhat insolvable, since the square root of 5 has
an infinite number of digits, so it cannot be represented correctly
on any computer (in decimal or binary notation).
For arbitrary precision calculations with Fixnum exponents, there's
bigdecimal.
require "bigdecimal"
def calc(n,prec)
# prec is the precision of the sqrt calculations
res=(BigDecimal.new("2") ** n)*BigDecimal("5").sqrt(prec)
end
puts calc(10000) => 0.44610[several lines of digits]*10^3011 (for prec=10)
However, don't believe in too many of these digits...
If you still want to multiply by square roots accurately, it might be a good
idea to look at continued fractions - every square root has a continued
fraction representation that eventually ends in a periodic pattern.
There is an introduction to arithmetic with them at
_
http://www.mcs.surrey.ac.uk/Personal/R.Knott/Fibonacci/cfI...
(
http://www.mcs.surrey.ac.uk/Personal/R.Knott/Fibonacci/cf...
)
Hope that helps,
Axel
1 Answer
Sam Kong
2/2/2006 11:20:00 PM
0
Nuralanur@aol.com wrote:
> Dear Sam,
>
> your problem is somewhat insolvable, since the square root of 5 has
> an infinite number of digits, so it cannot be represented correctly
> on any computer (in decimal or binary notation).
> For arbitrary precision calculations with Fixnum exponents, there's
> bigdecimal.
>
> require "bigdecimal"
>
> def calc(n,prec)
> # prec is the precision of the sqrt calculations
> res=(BigDecimal.new("2") ** n)*BigDecimal("5").sqrt(prec)
> end
>
>
>
>
> puts calc(10000) => 0.44610[several lines of digits]*10^3011 (for prec=10)
>
>
> However, don't believe in too many of these digits...
> If you still want to multiply by square roots accurately, it might be a good
> idea to look at continued fractions - every square root has a continued
> fraction representation that eventually ends in a periodic pattern.
> There is an introduction to arithmetic with them at
> _
http://www.mcs.surrey.ac.uk/Personal/R.Knott/Fibonacci/cfI...
> (
http://www.mcs.surrey.ac.uk/Personal/R.Knott/Fibonacci/cf...
)
>
> Hope that helps,
>
> Axel
Thank you, Axel.
Actually I came across this problem while reading an article about
fibonacci.
See
http://epsilondelta.wordpress.com/2006/01/29/programming-like-a-mathematician-i...
.
There's a formula for fibonacci and the writer showed 1000000th
fibonacci.
I wanted to calculate it using the formula in Ruby.
I'll read the docs you mentioned.
Thanks.
Sam
Servizio di avviso nuovi messaggi
Ricevi direttamente nella tua mail i nuovi messaggi per
Re: Work around for "Bignum out of Float range"?
Inserendo la tua e-mail nella casella sotto, riceverai un avviso tramite posta elettronica ogni volta che il motore di ricerca troverà un nuovo messaggio per te
Il servizio è completamente GRATUITO!
x
Login to ForumsZone
Login with Google
Login with E-Mail & Password