cleaning up sfmt

db4
Doug Coleman 2009-10-02 00:21:48 -05:00
parent f3ef312e83
commit 926ed2d5e1
2 changed files with 9 additions and 5 deletions

View File

@ -1,6 +1,8 @@
! Copyright (C) 2009 Doug Coleman.
! See http://factorcode.org/license.txt for BSD license.
USING: tools.test random.sfmt ;
USING: accessors kernel random.sfmt sequences tools.test ;
IN: random.sfmt.tests
[ ] [ 100 <sfmt-19937> drop ] unit-test
[ 1096298955 ]
[ 100 <sfmt-19937> generate generate state>> first first ] unit-test

View File

@ -17,7 +17,7 @@ CONSTANT: state-multiplier 1812433253
TUPLE: sfmt
sl1 sl2 sr1 sr2 mask parity
{ seed integer } { n fixnum } { m fixnum }
{ ix fixnum } { state uint-4-array } ;
{ m-n fixnum } { ix fixnum } { state uint-4-array } ;
: init-state ( sfmt -- sfmt' )
dup [ n>> 4 * iota >uint-array ] [ seed>> ] bi
@ -55,8 +55,9 @@ M:: sfmt generate ( sfmt -- sfmt' )
sfmt n>> 1 - sfmt state>> nth :> r2!
0 :> r!
0 :> i!
sfmt n>> :> n
sfmt m>> :> m
sfmt n>> :> n
sfmt m-n>> :> m-n
sfmt mask>> :> mask
sfmt state>> :> state
@ -71,10 +72,10 @@ M:: sfmt generate ( sfmt -- sfmt' )
r r2!
] each
i 1 + n [a,b) [
n m - 1 + n [a,b) [
i!
i state nth
m n - i + state nth
m-n i + state nth
mask r1 r2 formula r!
r i state set-nth
@ -95,6 +96,7 @@ M:: sfmt generate ( sfmt -- sfmt' )
swap >>m
swap >>n
swap 32 bits >>seed
dup [ m>> ] [ n>> ] bi - >>m-n
0 >>ix
init-state
generate ;