.TITLE RAND ;RANDOM NUMBERS. JUDY WEISS & RON REMMEL ; .MACRO .RAND X ;REAL NUMBER, FLAT DISTRIBUTION; 0 < X < 1 ;.IRN & .JRN ARE SEEDS, WHICH ARE REAL NUMBERS BETWEEN 0 & 10**7. ;DEFAULT VALUES OF .IRN & .JRN ARE 0. .IRN & .JRN MAY BE CHANGED, OR ;THEY MAY BE SAVED SO THAT THE PROGRAM CAN BE CONTINUED LATER. ; .MACRO .RANDS X ;SHUFFLES RANDOM NUMBERS, TO ELIMINATE ;CORRELATIONS BETWEEN SUCCESSIVE NUMBERS. .RANDS CALLS .RAND & TAKES LONGER A0=R0 A1=R1 .GLOBL .IRN,.JRN,.RAND,RAND,.RANDS,RANDS .MCALL .MOVF,.RAND,.RANDS RAND: .RAND -(SP) ;X=RAND(0) X:=RAND; MOV (SP)+,R0 ;RETURN ANSWER IN R0 & R1 MOV (SP)+,R1 RETURN RANDS: .RANDS -(SP) ;X=RANDS(0) X:=RANDS; MOV (SP)+,R0 MOV (SP)+,R1 RETURN RANDX: .BLKW 2 .RANDS: MOV R0,-(SP) MOV R1,-(SP) STF A0,-(SP) TST FLAG ;IF FLAG>0, SKIP INITIALIZATION BGT SKIPIN MOV #TABLE,R1 ;R1 = BEGINNING OF TABLE MOV #64.,R0 ;R0 = COUNTER INIT: .RAND (R1)+ ;STORE IN TABLE SOB R0,INIT ;UNTIL TABLE FILLED INC FLAG ;INDICATES TABLE DONE SKIPIN: .RAND A0 ;DO RANDOM TABLE LOOKUP TO SHUFFLE MULF SIX4,A0 ;0=1E7 THEN SUBF TEN7,A1 ;A1=A1-1E7 SKIP2: STF A1,.JRN ;SAVE NEW .JRN MULF .IRN,A1 ;A1=.IRN*.JRN--SCRAMBLE BITS WITH MULF MODF TENM10,A1 ;MULF BY 1E-10,INTEGER-->A1 & FRACTION-->A1 STF A1,R LDF (SP)+,A1 LDF (SP)+,A0 RETURN .IRN: .FLT2 0 ;DEFAULT VALUES OF SEEDS .IRN,.JRN .JRN: .FLT2 0 TEN7: .FLT2 1E7 TENM10: .FLT2 1E-10 N23TO5: .FLT2 6436343 ;23**5 N29TO4: .FLT2 707281 ;29**4 FLAG: .WORD 0 TABLE: .BLKW 64.*2 ;TABLE OF RANDOM NOS. SIX4: .FLT2 64. .END