.TITLE RANOR ;.MACRO .RANOR X ;GENERATES GAUSSIAN-DISTRIBUTED RANDOM NUMBER X ;WITH MEAN=0 & SD=1 ;THETA = 2*PI*RANDOM ;THE TWO RANDOMs ARE DIFFERENT ;R = SQRT( -2.0*LN(RANDOM) ) ;RANORM = R*COS(THETA) ;FIRST CALL TO RANOR GENERATES THIS NUMBER ;RANORM = R*SIN(THETA) ;SECOND CALL A0=R0 .GLOBL .RANOR,RANOR .MCALL .RAND,.LN,.SQRT,.SIN,.COS,.RANOR RANOR: .RANOR -(SP) MOV (SP)+,R0 MOV (SP)+,R1 RETURN RANORX: .BLKW 2 .RANOR: STF A0,-(SP) COM WHICH BNE FIRST SECOND: .SIN THETA,A0 JMP S FIRST: .RAND A0 .LN A0,A0 MULF #2,A0 NEGF A0 .SQRT A0,R .RAND A0 ;DIFFERENT RANDOM NUMBER MULF PI2,A0 STF A0,THETA .COS A0,A0 S: MULF R,A0 STF A0,RANORX LDF (SP)+,A0 RETURN R: .BLKW 2 THETA: .BLKW 2 PI2: .FLT2 6.2831853 WHICH: .WORD 0 .END