in reply to RE: Fibonnaci
in thread Reaped: Fibonnaci
Unfortunatly, Computers have a hard time with irrational numbers (like sqrt of 5) so this results in things like 75025.0000000001 which is ok for our purposes... but if you ever use this you might want to pass it through int.$a=sqrt 5;print+(((1+$a)/2)**$_-((1-$a)/2)**$_)/$a,$/for 0..73 # For comparison, here is the result of the golfing # that Tilly and I participated in earlier: $a=1;print$a-=$b+=$a*=-1,$/for 0..73
In case you were wondering, 73 is an arbitrary stopping place. I picked it because Fib(74) is too big a number for Perl, and results in the scientific notation: 1.30496954492866e+015 which just isn't as much fun.
Update: Of course, what we really need is a benchmark! So here is the output:
And that's just for Fib(30)! I also tried benchmarking the recursive version... hahahaha. So that it wouldn't take all day I dropped the count down to 10 iterations... still Fib(30) though.Benchmark: timing 100000 iterations of Binet, Golf... Binet: 1 wallclock secs ( 0.70 usr + 0.00 sys = 0.70 CPU) @ 142653. +35/s (n=100000) Golf: 5 wallclock secs ( 4.75 usr + 0.00 sys = 4.75 CPU) @ 21065.9 +4/s (n=100000)
No Benchmark post is truly complete with out the code used:Recursive: 118 wallclock secs (116.37 usr + 0.00 sys = 116.37 CPU) @ + 0.09/s (n=10)
#!perl -w use strict; use Benchmark; # Fibonnaci Number to calculate. use vars ('$n'); # Make it global, but appease strict. $n = 30; my $iter = 100_000; timethese( $iter, { Binet => '&FibBinet($n)', Golf => '&FibGolf($n)', # Recursive => '&FibRecursive($n)', }); sub FibRecursive { my $index = shift; return 0 if 0 == $index; return 1 if 1 == $index; return FibRecursive( $index - 1 ) + FibRecursive( $index - 2 ); } sub FibGolf { my $index = shift; my $acc = 1; my $tmp; while( $index-- ) { $acc-=$tmp+=$acc*=-1; } return $acc; } sub FibBinet { my $index = shift; my $root5 = sqrt 5; return ( ( ( 1 + $root5 ) / 2 ) ** $index - ( ( 1 - $root5 ) / 2 ) ** $index ) / $root5; }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
RE (tilly) 3: Fibonnaci
by tilly (Archbishop) on Oct 06, 2000 at 01:29 UTC |