!!! Sieve of Eratosthenes Benchmark ---------------------------------------- from Sieve of Eratosthenes Benchmark Page http://www.bagley.org/~doug/shootout/bench/sieve/sieve.gforth With many annotations http://www.bagley.org/~doug/shootout/bench/sieve/alt/ann.sieve.forth gives wrong result in XFORTH, have to investigate --------------------------------------- {{{ DECIMAL 8192 CONSTANT SIZE 1 VARIABLE FLAGS SIZE 2 - ALLOT FLAGS SIZE + CONSTANT ENDFLAGS : FLAGMULTS ( n toaddr fromaddr -- ) DO 0 I C! DUP +LOOP ; : PRIMES ( -- n ) FLAGS SIZE -1 FILL 0 2 ENDFLAGS FLAGS DO I C@ IF DUP I + DUP ENDFLAGS < IF ENDFLAGS SWAP FLAGMULTS ELSE DROP THEN SWAP 1+ SWAP THEN 1+ LOOP DROP ; }}} --------------------------------------------------- Original BYTE FORTH Benchmark http://www-personal.umich.edu/~williams/archive/forth/utilities/byteprimes.fs.html {{{ ( Eratosthenes sieve benchmark ) ( original BYTE benchmark ) 8190 CONSTANT SIZE -1 VARIABLE FLAGS SIZE ALLOT : PRIMES FLAGS SIZE -1 FILL 0 SIZE 0 DO I FLAGS + C@ IF I 2 * 3 + DUP I + BEGIN DUP SIZE < WHILE DUP FLAGS + 0 SWAP C! OVER + REPEAT DROP DROP 1+ THEN LOOP ; }}} --------------------------------------------------- from GNU Forth distribution (Bernd Paysan) http://www.jwdt.com/~paysan/gforth.html {{{ ( Sieve by bernd paysan ) DECIMAL -1 VARIABLE FLAGS 8190 ALLOT FLAGS 8190 + CONSTANT EFLAG : PRIMES ( -- n ) FLAGS 8190 -1 FILL 0 3 EFLAG FLAGS DO I C@ IF DUP I + DUP EFLAG < IF EFLAG SWAP DO 0 I C! DUP +LOOP ELSE DROP THEN SWAP 1+ SWAP THEN 2 + LOOP DROP ; }}}