From fa534d25079f6ceedf63932361d6b1a154a7fe88 Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Tue, 26 Mar 2013 11:48:01 -0700 Subject: [PATCH] benchmark.fib8: adding super-fast fibonacci benchmark. --- extra/benchmark/fib8/fib8.factor | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 extra/benchmark/fib8/fib8.factor diff --git a/extra/benchmark/fib8/fib8.factor b/extra/benchmark/fib8/fib8.factor new file mode 100644 index 0000000000..c429b5afea --- /dev/null +++ b/extra/benchmark/fib8/fib8.factor @@ -0,0 +1,22 @@ +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