Long time ago, I wrote this procedure on the algorithm by Park&Mille
Ingo
;
;ENTRY GP_RANDOM
;
; Zufallszahlen von 0 bis unterhalb v_MAX erzeuzgen
;
params
numeric v_MAX :IN
numeric v_VALUE :OUT ; erzeugte Zufallszahl
endparams
variables
numeric v_VALUE2
endvariables
call LP_RANDOM(v_VALUE2)
v_VALUE=v_MAX*v_VALUE2
v_VALUE=v_VALUE[trunc]
IF (v_VALUE=v_MAX) v_VALUE=0; Falls $RANDOM$ genau auf 1 stehen sollte
;putmess "Zufall[%%v_MAX] = %%v_VALUE"
RETURN(0)
ENTRY LP_RANDOM
; Nach Park and Miller in ACM June 1988 v32 #6
; http://www.unix-ag.uni-kl.de/~conrad/krypto/misc/prng.html
params
numeric v_VALUE:OUT
endparams
IF($$X_RAND_SEED=""|$$X_RAND_SEED<1)
call LP_RANDOM_INIT
ENDIF
call LP_RANDOM2(v_VALUE)
RETURN(0)