gforth
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [gforth] Marcel's Random-Function


From: James Gere
Subject: Re: [gforth] Marcel's Random-Function
Date: Sun, 13 Aug 2017 19:33:23 -0400

  Hi, Marcel,
                      as a first installment on earlier promises, here are the inverse functions as GForth code:


include random.fs \ need 'rnd' for test 

variable (rnd)    \ for marcel's rnd

\ note:  for "dup shift xor," all the inverse functions
\ start with  the original functions

:  turn-around ( n -- n' )   dup 5 lshift xor ;
: -turn-around ( n -- n' )   turn-around       
    dup 10 lshift xor  dup 20 lshift xor ;

:  take-off2nd ( n -- n' )   dup 17 rshift xor ;
: -take-off2nd ( n -- n' )   take-off2nd ;

:  take-off1st ( n -- n' )   dup 13 lshift xor ; 
: -take-off1st ( n -- n' )   take-off1st       dup 26 lshift xor ;

\ note: here we reverse order for inverses because 
\ the lshifts and rshift don't commute 
:  take-off    ( n -- n' )    take-off1st  take-off2nd ;
: -take-off    ( n -- n' )   -take-off2nd -take-off1st ;

:  marcel ( -- n )   (rnd) @  take-off    dup  turn-around  (rnd) ! ;
: -marcel ( -- n )   (rnd) @ -turn-around dup -take-off     (rnd) ! ;

: tst   begin  cr rnd ( <-<< time based random number ) dup . 
         (rnd) !  marcel dup .  -take-off . -marcel . 
\ the check is 1st# = 3rd#  and  2nd# = 4th#          
          key 10 = until ;  
   

reply via email to

[Prev in Thread] Current Thread [Next in Thread]