Google
 

Trailing-Edge - PDP-10 Archives - decuslib10-01 - 43,50053/drand.mac
There are 2 other files named drand.mac in the archive. Click here to see a list.
	TITLE	DRAND DOUBLE PRECISON RANDOM NUMBER
	SUBTTL	V.001  R.S.TOMLINSON.  19 AUG 68
	ENTRY	DRAND
	INTERN	DRAND
	EXTERN	RAND,DFA.2,DFM.0,DFA.0

; CALL:	JSA 16,DRAND
;	ARG 06,<LOWER LIMIT>
;	ARG 06,<UPPER LIMIT>
;	RESULT RETURNED IN AC 0,1
;	USES PUSH DOWN POINTER IN AC 17

DRAND:	0
	JSA 16,RAND	; GET 36 RANDOM BITS
	PUSH 17,0	; SAVE THEM
	JSA 16,RAND	; GET 36 MORE RANDOM BITS
	JFFO 0,DRAND1	; COUNT LEADING ZEROES AND JUMP IF NOT ALL ZERO
	POP 17,1	; CHECK LOW ORDER WORD
	JFFO 1,DRAND4	; COUNT LEADING ZEROES AND JUMP IF NON-ZERO
DRAND3:	PUSH 17,16	; SAVE AC 16
	MOVEI 3,@0(16)	; LOAD AC 3 WITH ADR OF LOWER LIMIT
	MOVE 2,0(3)	; PUT LOWER LIMIT INTO AC 2,3
	MOVE 3,1(3)
	DFN 2,3		; COMPLEMENT LOWER LIMIT
	MOVEI 16,@1(16)	; LOAD AC 16 WITH ADR OF UPPER LIMIT
	PUSHJ 17,DFA.2	; FORM <UPPER LIMIT> - <LOWER LIMIT>
	MOVEI 16,2
	PUSHJ 17,DFM.0	; TIMES RANDOM NUMBER FROM 0.0 TO 1.0
	MOVE 16,(17)	; RESTORE AC 16
	HRRZ 16,0(16)	; LOAD AC 16 WITH ADR OF LOWER LIMIT
	PUSHJ 17,DFA.0
	POP 17,16	; RESTORE AC 16
	JRA 16,2(16)	; RETURN

DRAND1:	MOVE 2,1	; SAVE LEADING ZERO COUNT IN AC 2
	POP 17,1	; GET LOW ORDER WORD
	JRST DRAND2

DRAND4:	ADDI 2,^D36
DRAND2:	LSHC 0,-9(2)	; PUT HIGH ORDER ONE IN BIT 9
	LSH 1,-9	; CLEAR SIGN AND EXPONENT BITS
	MOVN 2,2
	FSC 0,200(2)
	FSC 1,200-^D27(2)
	JRST DRAND3

	END