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