.MCALL .MODULE .MODULE RANDU,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: ; CALL RANDU(I1,I2,F) ; WHERE ; I1,I2 ARE INTEGER*2 VALUES FOR THE GENERATOR BASE ; F IS THE REAL*4 RESULT ; ; 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) ; ;- .PSECT SYS$I,I ;RH001 .GLOBL $SYSLB ; Include system library work area. .GLOBL RAN$ RANDU:: CMPB (R5),#3 ;SHOULD BE 3 ARGS BNE ERROR ; ADD #6,R5 ;POINT PAST ARGS MOV @-(R5),-(SP) ;PUSH HIGH ORDER SEED MOV @-(R5),-(SP) ;PUSH LOW ORDER SEED MOV SP,R0 ;MAKE PTR TO I*4 VALUE CALL RAN$ ;CALL THE RANDOM NUMBER GENERATOR MOV (SP)+,@(R5)+ ;STORE NEW LOW ORDER SEED MOV (SP)+,@(R5)+ ;STORE NEW HIGH ORDER SEED MOV (R5),R2 ;GET THE ARG3 ADDRESS MOV R0,(R2)+ ;MOVE THE RESULT TO IT MOV R1,@R2 ; ERROR: RETURN .END