35 lines
805 B
Plaintext
35 lines
805 B
Plaintext
@% = &D0D
|
|
PRINT "MS generator:"
|
|
dummy% = FNrandMS(0)
|
|
FOR i% = 1 TO 10
|
|
PRINT FNrandMS(-1)
|
|
NEXT
|
|
PRINT '"BSD generator:"
|
|
dummy% = FNrandBSD(0)
|
|
FOR i% = 1 TO 10
|
|
PRINT FNrandBSD(-1)
|
|
NEXT
|
|
END
|
|
|
|
DEF FNrandMS(seed%)
|
|
PRIVATE state%
|
|
IF seed% >= 0 THEN
|
|
state% = seed%
|
|
ELSE
|
|
state% = FNmuladd(state%, 214013, 2531011)
|
|
ENDIF
|
|
= state% >> 16
|
|
|
|
DEF FNrandBSD(seed%)
|
|
PRIVATE state%
|
|
IF seed% >= 0 THEN
|
|
state% = seed%
|
|
ELSE
|
|
state% = FNmuladd(state%, 1103515245, 12345)
|
|
ENDIF
|
|
= state%
|
|
|
|
DEF FNmuladd(A%,B%,C%) : PRIVATE M% : LOCAL P% : IF M% = 0 DIM P% 8
|
|
IF P% THEN [OPT 0 : .M% mul ebx : add eax,ecx : btr eax,31 : ret :]
|
|
= USR M%
|