\ George Marsaglia KISS random number generator
\ Copyright 2005, Bill Cook
Variable x
Variable y
Variable z
Variable w
: setx x ! ;
: sety y ! ;
: setz z ! ;
: setw w ! ;
: seed setw setz sety setx ;
: seex x @ . ;
: seey y @ . ;
: seez z @ . ;
: seew w @ . ;
: view seex seey seez seew ;
: ishft ( k,n ** ishft )
dup 0<> if dup 0> if lshift else negate rshift then then ;
: m ( k n ** m )
over swap ishft xor ;
: rx x @ 69069 * 1327217885 + dup x ! ;
: ry y @ 13 m -17 m 5 m dup y ! ;
: rz z @ dup 65535 and 18000 * swap -16 ishft + dup z ! ;
: rw w @ dup 65535 and 30903 * swap -16 ishft + dup w ! ;
: kiss rz 16 ishft rw + rx + ry + ;
: preset 123456789 362436069 521288629 916191069 seed ;
: kisses 0 ?do kiss + loop ;
: test kiss 8 kisses . ;
: .x1 dup 255 24 lshift and 24 rshift hex . decimal ;
: .x2 dup 255 16 lshift and 16 rshift hex . decimal ;
: .x3 dup 255 08 lshift and 08 rshift hex . decimal ;
: .x4 dup 255 and hex . decimal ;
: .xs .x1 .x2 .x3 .x4 ;
preset view kiss . view
|