random: simplify using bitwise operations.
parent
a05c735731
commit
0fb0eaa1cf
|
@ -36,7 +36,7 @@ CONSTANT: a uint-array{ 0 0x9908b0df }
|
||||||
] [ 0 >>i drop ] bi ; inline
|
] [ 0 >>i drop ] bi ; inline
|
||||||
|
|
||||||
: init-mt-formula ( i seq -- f(seq[i]) )
|
: init-mt-formula ( i seq -- f(seq[i]) )
|
||||||
dupd nth dup -30 shift bitxor 1812433253 * + 1 + 32 bits ; inline
|
dupd nth dup -30 shift bitxor 1812433253 * + 1 w+ ; inline
|
||||||
|
|
||||||
: init-mt-rest ( seq -- )
|
: init-mt-rest ( seq -- )
|
||||||
n 1 - swap '[
|
n 1 - swap '[
|
||||||
|
|
|
@ -116,8 +116,8 @@ M:: sfmt generate ( sfmt -- )
|
||||||
[
|
[
|
||||||
[
|
[
|
||||||
[ -30 shift ] [ ] bi bitxor
|
[ -30 shift ] [ ] bi bitxor
|
||||||
state-multiplier * 32 bits
|
state-multiplier w*
|
||||||
] dip + 32 bits
|
] dip w+
|
||||||
] uint-array{ } accumulate-as nip
|
] uint-array{ } accumulate-as nip
|
||||||
dup uint-4 cast-array ;
|
dup uint-4 cast-array ;
|
||||||
|
|
||||||
|
|
|
@ -43,14 +43,14 @@ M:: cmwc random-32* ( cmwc -- n )
|
||||||
[ c>> + ] tri
|
[ c>> + ] tri
|
||||||
|
|
||||||
[ >fixnum -32 shift cmwc c<< ]
|
[ >fixnum -32 shift cmwc c<< ]
|
||||||
[ cmwc [ b>> bitand ] [ c>> + ] bi 32 bits ] bi
|
[ cmwc [ b>> bitand ] [ c>> w+ ] bi ] bi
|
||||||
|
|
||||||
dup cmwc r>> > [
|
dup cmwc r>> > [
|
||||||
cmwc [ 1 + ] change-c drop
|
cmwc [ 1 + ] change-c drop
|
||||||
cmwc b>> - 32 bits
|
cmwc b>> w-
|
||||||
] when
|
] when
|
||||||
|
|
||||||
cmwc swap '[ r>> _ - 32 bits dup ] [ i>> ] [ Q>> ] tri set-nth-unsafe ;
|
cmwc swap '[ r>> _ w- dup ] [ i>> ] [ Q>> ] tri set-nth-unsafe ;
|
||||||
|
|
||||||
: cmwc-4096 ( -- cmwc )
|
: cmwc-4096 ( -- cmwc )
|
||||||
4096
|
4096
|
||||||
|
|
Loading…
Reference in New Issue