Fibonacci-Benchmark
Verfasst: Sa 28. Jan 2012, 16:01
Mal eine Frage: Muss der Fibonacci-Benchmark rekusiv sein? Iterativ ist es doch viel schneller. Irgendwo muss es doch aber vergleichbar bleiben!? Hab mal google befragt, aber oft werden beide Versionen angegeben.
In Forth sieht die iterative Version so aus:
Und das Ergebnis:
Ist da irgendwas falsch dran?
In Forth sieht die iterative Version so aus:
Code: Alles auswählen
\ ( n -- f ) berechnet die nte fibonacci-zahl
: fib
0 1 rot 0 do over + swap loop drop ;
\ benchmark über n fibonacci-zahlen
: fibo-bench
1+ 1 do
i ." fibo(" . ." ) = "
i cnt COG@ swap fib cnt COG@ swap .
swap - ." , ticks : " .
cr
loop ;
Und das Ergebnis:
Code: Alles auswählen
Prop0 Cog2 ok
decimal 40 fibo-bench hex
fibo(1 ) = 1 , ticks : 2416
fibo(2 ) = 1 , ticks : 3232
fibo(3 ) = 2 , ticks : 4048
fibo(4 ) = 3 , ticks : 4864
fibo(5 ) = 5 , ticks : 5680
fibo(6 ) = 8 , ticks : 6496
fibo(7 ) = 13 , ticks : 7312
fibo(8 ) = 21 , ticks : 8128
fibo(9 ) = 34 , ticks : 8944
fibo(10 ) = 55 , ticks : 9760
fibo(11 ) = 89 , ticks : 10576
fibo(12 ) = 144 , ticks : 11392
fibo(13 ) = 233 , ticks : 12208
fibo(14 ) = 377 , ticks : 13024
fibo(15 ) = 610 , ticks : 13840
fibo(16 ) = 987 , ticks : 14656
fibo(17 ) = 1597 , ticks : 15472
fibo(18 ) = 2584 , ticks : 16288
fibo(19 ) = 4181 , ticks : 17104
fibo(20 ) = 6765 , ticks : 17920
fibo(21 ) = 10946 , ticks : 18736
fibo(22 ) = 17711 , ticks : 19552
fibo(23 ) = 28657 , ticks : 20368
fibo(24 ) = 46368 , ticks : 21184
fibo(25 ) = 75025 , ticks : 22000
fibo(26 ) = 121393 , ticks : 22816
fibo(27 ) = 196418 , ticks : 23632
fibo(28 ) = 317811 , ticks : 24448
fibo(29 ) = 514229 , ticks : 25264
fibo(30 ) = 832040 , ticks : 26080
fibo(31 ) = 1346269 , ticks : 26896
fibo(32 ) = 2178309 , ticks : 27712
fibo(33 ) = 3524578 , ticks : 28528
fibo(34 ) = 5702887 , ticks : 29344
fibo(35 ) = 9227465 , ticks : 30160
fibo(36 ) = 14930352 , ticks : 30976
fibo(37 ) = 24157817 , ticks : 31792
fibo(38 ) = 39088169 , ticks : 32608
fibo(39 ) = 63245986 , ticks : 33424
fibo(40 ) = 102334155 , ticks : 34240
Prop0 Cog2 ok