Removing rot/-rot in nsieve and nsieve-bits

release
Daniel Ehrenberg 2010-01-26 15:11:12 -06:00
parent 19d551a544
commit 93282bcc94
2 changed files with 14 additions and 12 deletions

View File

@ -1,5 +1,5 @@
USING: math math.parser sequences sequences.private kernel USING: math math.parser sequences sequences.private kernel
bit-arrays make io ; bit-arrays make io math.ranges multiline fry locals ;
IN: benchmark.nsieve-bits IN: benchmark.nsieve-bits
: clear-flags ( step i seq -- ) : clear-flags ( step i seq -- )
@ -13,23 +13,24 @@ IN: benchmark.nsieve-bits
2dup length < [ 2dup length < [
2dup nth-unsafe [ 2dup nth-unsafe [
over dup 2 * pick clear-flags over dup 2 * pick clear-flags
rot 1 + -rot ! increment count [ 1 + ] 2dip ! increment count
] when [ 1 + ] dip (nsieve-bits) ] when [ 1 + ] dip (nsieve-bits)
] [ ] [
2drop 2drop
] if ; inline recursive ] if ; inline recursive
: nsieve-bits ( m -- count ) : nsieve-bits ( m -- count )
0 2 rot 1 + <bit-array> dup set-bits (nsieve-bits) ; [ 0 2 ] dip 1 + <bit-array> dup set-bits (nsieve-bits) ;
: nsieve-bits. ( m -- ) : nsieve-bits. ( m -- )
[ "Primes up to " % dup # " " % nsieve-bits # ] "" make [ "Primes up to " % dup # " " % nsieve-bits # ] "" make
print ; print ; inline
: nsieve-bits-main ( n -- ) : nsieve-bits-main ( n -- )
dup 2^ 10000 * nsieve-bits. [ 2^ 10000 * nsieve-bits. ]
dup 1 - 2^ 10000 * nsieve-bits. [ 1 - 2^ 10000 * nsieve-bits. ]
2 - 2^ 10000 * nsieve-bits. ; [ 2 - 2^ 10000 * nsieve-bits. ]
tri ;
: nsieve-bits-main* ( -- ) 11 nsieve-bits-main ; : nsieve-bits-main* ( -- ) 11 nsieve-bits-main ;

View File

@ -13,22 +13,23 @@ IN: benchmark.nsieve
2dup length < [ 2dup length < [
2dup nth-unsafe [ 2dup nth-unsafe [
over dup 2 * pick clear-flags over dup 2 * pick clear-flags
rot 1 + -rot ! increment count [ 1 + ] 2dip ! increment count
] when [ 1 + ] dip (nsieve) ] when [ 1 + ] dip (nsieve)
] [ ] [
2drop 2drop
] if ; inline recursive ] if ; inline recursive
: nsieve ( m -- count ) : nsieve ( m -- count )
0 2 rot 1 + t <array> (nsieve) ; [ 0 2 ] dip 1 + t <array> (nsieve) ;
: nsieve. ( m -- ) : nsieve. ( m -- )
[ "Primes up to " % dup # " " % nsieve # ] "" make print ; [ "Primes up to " % dup # " " % nsieve # ] "" make print ;
: nsieve-main ( n -- ) : nsieve-main ( n -- )
dup 2^ 10000 * nsieve. [ 2^ 10000 * nsieve. ]
dup 1 - 2^ 10000 * nsieve. [ 1 - 2^ 10000 * nsieve. ]
2 - 2^ 10000 * nsieve. ; [ 2 - 2^ 10000 * nsieve. ]
tri ;
: nsieve-main* ( -- ) 9 nsieve-main ; : nsieve-main* ( -- ) 9 nsieve-main ;