Paste: fib
Author: | mnestic |
Mode: | factor |
Date: | Sat, 29 Aug 2009 01:36:19 |
Plain Text |
:: fib-c-32-bit ( n -- m ) 0 :> x! 1 :> y! n [ x y w+ y x! y! ] times x ;
:: fib-c-big ( n -- m ) 0 :> x! 1 :> y! n [ x y + y x! y! ] times x ;
: fib-recursive ( n -- m ) dup 1 <= [ [ 1 - fib-recursive ] [ 2 - fib-recursive ] bi + ] unless ;
MEMO: fib-memo ( n -- m ) dup 1 <= [ [ 1 - fib-memo ] [ 2 - fib-memo ] bi + ] unless ;
: fib-times ( m -- n ) [ 0 1 ] dip [ tuck + ] times drop ;
: (fib-tc) ( x y n -- m )
dup 0 = [ 2drop ] [ [ tuck + ] [ 1 - ] bi* (fib-tc) ] if ;
: fib-tc ( n -- m ) [ 0 1 ] dip (fib-tc) ;
: fib-mn ( n -- n' ) { { 1 1 } { 1 0 } } swap m^n first second ;
42 [ "fib-recursive 42" print [ fib-recursive drop ] benchmark time. ]
[ "fib-memo 42" print [ fib-memo drop ] benchmark time. ] bi
"fib-memo 10000" print [ 10000 fib-memo drop ] benchmark time.
"fib-c-32-bit 44" print [ 44 fib-c-32-bit drop ] benchmark time.
1000000 {
[ "fib-mn 1000000" print [ fib-mn drop ] benchmark time. ]
[ "fib-tc 1000000" print [ fib-tc drop ] benchmark time. ]
[ "fib-times 1000000" print [ fib-times drop ] benchmark time. ]
[ "fib-c-big 1000000" print [ fib-c-big drop ] benchmark time. ]
[ "fib-c-32-bit 1000000" print [ fib-c-32-bit drop ] benchmark time. ]
} cleave
fib-recursive 42
== Running time ==
16.437921 seconds
fib-memo 42
== Running time ==
0.0 seconds
fib-memo 10000
== Running time ==
0.031251 seconds
fib-c-32-bit 44
== Running time ==
0.0 seconds
fib-mn 1000000
== Running time ==
25.219396 seconds
fib-tc 1000000
== Running time ==
90.28319999999999 seconds
fib-times 1000000
== Running time ==
89.345465 seconds
fib-c-big 1000000
== Running time ==
88.861081 seconds
fib-c-32-bit 1000000
== Running time ==
0.250006 seconds
Author: | luis |
Mode: | factor |
Date: | Sat, 29 Aug 2009 01:40:55 |
Plain Text |
:: (fib) ( n p1 p2 -- f )
n zero? [ p2 ] [ n 1 - p2 p1 p2 + (fib) ] if ;
: fib ( nth -- n )
0 1 (fib) ;
New Annotation