.MCALL .MODULE .MODULE RAN,VERSION=01,COMMENT=,LIB=YES,IDENT=NO ; Copyright (c) 1998 by Mentec, Inc., Nashua, NH. ; All rights reserved ; ; This software is furnished under a license for use only on a ; single computer system and may be copied only with the ; inclusion of the above copyright notice. This software, or ; any other copies thereof, may not be provided or otherwise ; made available to any other person except for use on such ; system and to one who agrees to these license terms. Title ; to and ownership of the software shall at all times remain ; in Mentec, Inc. ; ; The information in this document is subject to change without ; notice and should not be construed as a commitment by Digital ; Equipment Corporation, or Mentec, Inc. ; ; Digital and Mentec assume no responsibility for the use or ; reliability of its software on equipment which is not supplied ; by Digital or Mentec, and listed in the Software Product ; Description. ; ; AUTHOR: ; R. SCHAEFER 24-OCT-78 ; DEVELOPED FROM THE VAX-RTL VERSION DUE TO: ; P.F. CONKLIN, T.HASTINGS, D. MACLAREN ; ;+ ; FUNCTION: ; RANDOM NUMBER GENERATOR ; CALLING SEQUENCE: ; RAN(I1,I2) ; OR ; RAN(J) ; WHERE ; I1,I2 ARE INTEGER*2 VALUES FOR THE GENERATOR BASE ; J IS AN INTEGER*4 VALUE FOR THE GENERATOR BASE ; ; RETURNS A PSEUDO-RANDOM NUMBER IN THE RANGE [0.0,1.0) ; ; ALGORITHM: ; THIS IS A GENERAL RANDOM NUMBER GENERATOR. IT IS ; OF THE MULTIPLICATIVE CONGRUENTIAL TYPE, AND HENCE ; IS FAST, ALTHOUGH PRONE TO CERTAIN CLASSES OF ; NON-RANDOM SEQUENCES. THIS NON-RANDOM BEHAVIOR ; TYPICALLY ARISES WHEN CONSIDERING TRIPLES OF NUMBERS ; GENERATED BY THIS METHOD. ; ; FOR MORE INFORMATION, CONSULT: ; RANDOM NUMBER GENERATION (PP. 1192-1197) ; BY G. MARSAGLIA IN ; ENCYCLOPEDIA OF COMPUTER SCIENCE ; EDITED BY ANTHONY RALSTON ; PETROCELLI (NEW YORK 1976) ; ;- ;;; ERRDEF ;;; OTS$I .PSECT SYS$I,I ;RH001 .GLOBL $SYSLB ; Include system library work area. .GLOBL RAN$ RAN:: MOV (R5)+,R0 ;GET ARG COUNT DECB R0 ;ONE I*4 ARG? BNE 10$ ;TRY FOR 2 ARGS MOV (R5),R0 ;GET ARG ADDRESS CALLR RAN$ ;AND COMPUTE THE RANDOM NUMBER 10$: DECB R0 ;2 I*2 ARGS? BNE 20$ ;ERROR IF NOT 2 CMP (R5)+,(R5)+ ;POINT PAST BOTH ARGS MOV @-(R5),-(SP) ;PUSH HIGH ORDER SEED MOV @-(R5),-(SP) ;PUSH LOW ORDER SEED MOV SP,R0 ;MAKE PTR TO THE I*4 VALUE CALL RAN$ ;COMPUTE THE FUNCTION MOV (SP)+,@(R5)+ ;RESTORE THE LOW ORDER NEW SEED MOV (SP)+,@(R5)+ ;RESTORE THE HIGH ORDER NEW SEED 20$: RETURN .END