From 3a2b0cc1fbd342fc4682a2d231446403dd10d197 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Wed, 3 Dec 2008 18:15:14 -0600 Subject: [PATCH] rice mersenne-twister - replace mod with a subtraction --- basis/random/mersenne-twister/mersenne-twister.factor | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/basis/random/mersenne-twister/mersenne-twister.factor b/basis/random/mersenne-twister/mersenne-twister.factor index 3097eafd15..357ab87966 100644 --- a/basis/random/mersenne-twister/mersenne-twister.factor +++ b/basis/random/mersenne-twister/mersenne-twister.factor @@ -15,11 +15,14 @@ TUPLE: mersenne-twister { seq uint-array } { i fixnum } ; : mt-m 397 ; inline : mt-a HEX: 9908b0df ; inline +: mersenne-wrap ( n -- n' ) + dup mt-n > [ mt-n - ] when ; inline + : wrap-nth ( n seq -- obj ) - [ length mod ] keep nth-unsafe ; inline + [ mersenne-wrap ] dip nth-unsafe ; inline : set-wrap-nth ( obj n seq -- ) - [ length mod ] keep set-nth-unsafe ; inline + [ mersenne-wrap ] dip set-nth-unsafe ; inline : calculate-y ( n seq -- y ) [ wrap-nth 31 mask-bit ] @@ -50,7 +53,7 @@ TUPLE: mersenne-twister { seq uint-array } { i fixnum } ; : init-mt-seq ( seed -- seq ) 32 bits mt-n - [ set-first ] [ init-mt-rest ] [ ] tri ; + [ set-first ] [ init-mt-rest ] [ ] tri ; inline : mt-temper ( y -- yt ) dup -11 shift bitxor