factor/extra/benchmark/fib8/fib8.factor

23 lines
563 B
Factor

USING: combinators kernel math memoize ;
IN: benchmark.fib8
MEMO: (faster-fib) ( m -- n )
dup 1 > [
[ 2/ dup 1 - [ (faster-fib) ] bi@ ] [ 4 mod ] bi {
{ 1 [ [ 2 * ] dip [ + ] [ - ] 2bi * 2 + ] }
{ 3 [ [ 2 * ] dip [ + ] [ - ] 2bi * 2 - ] }
[ drop dupd 2 * + * ]
} case
] when ;
: faster-fib ( m -- n )
dup 0 >= [ throw ] unless (faster-fib) ;
: fib8-benchmark ( -- )
100 [
\ (faster-fib) reset-memoized
100,000 faster-fib log2 69423 assert=
] times ;
MAIN: fib8-benchmark