Annotation of researchv10dc/cmd/matlab/src/urand.f, revision 1.1

1.1     ! root        1:       DOUBLE PRECISION FUNCTION URAND(IY)
        !             2:       INTEGER IY
        !             3: C
        !             4: C      URAND IS A UNIFORM RANDOM NUMBER GENERATOR BASED  ON  THEORY  AND
        !             5: C  SUGGESTIONS  GIVEN  IN  D.E. KNUTH (1969),  VOL  2.   THE INTEGER  IY
        !             6: C  SHOULD BE INITIALIZED TO AN ARBITRARY INTEGER PRIOR TO THE FIRST CALL
        !             7: C  TO URAND.  THE CALLING PROGRAM SHOULD  NOT  ALTER  THE  VALUE  OF  IY
        !             8: C  BETWEEN  SUBSEQUENT CALLS TO URAND.  VALUES OF URAND WILL BE RETURNED
        !             9: C  IN THE INTERVAL (0,1).
        !            10: C      SEE FORSYTHE, MALCOLM AND MOLER (1977).
        !            11: C
        !            12:       INTEGER IA,IC,ITWO,M2,M,MIC
        !            13:       DOUBLE PRECISION HALFM,S
        !            14:       DOUBLE PRECISION DATAN,DSQRT
        !            15:       DATA M2/0/,ITWO/2/
        !            16:       IF (M2 .NE. 0) GO TO 20
        !            17: C
        !            18: C  IF FIRST ENTRY, COMPUTE MACHINE INTEGER WORD LENGTH
        !            19: C
        !            20:       M = 1
        !            21:    10 M2 = M
        !            22:       M = ITWO*M2
        !            23:       IF (M .GT. M2) GO TO 10
        !            24:       HALFM = M2
        !            25: C
        !            26: C  COMPUTE MULTIPLIER AND INCREMENT FOR LINEAR CONGRUENTIAL METHOD
        !            27: C
        !            28:       IA = 8*IDINT(HALFM*DATAN(1.D0)/8.D0) + 5
        !            29:       IC = 2*IDINT(HALFM*(0.5D0-DSQRT(3.D0)/6.D0)) + 1
        !            30:       MIC = (M2 - IC) + M2
        !            31: C
        !            32: C  S IS THE SCALE FACTOR FOR CONVERTING TO FLOATING POINT
        !            33: C
        !            34:       S = 0.5D0/HALFM
        !            35: C
        !            36: C  COMPUTE NEXT RANDOM NUMBER
        !            37: C
        !            38:    20 IY = IY*IA
        !            39: C
        !            40: C  THE FOLLOWING STATEMENT IS FOR COMPUTERS WHICH DO NOT ALLOW
        !            41: C  INTEGER OVERFLOW ON ADDITION
        !            42: C
        !            43:       IF (IY .GT. MIC) IY = (IY - M2) - M2
        !            44: C
        !            45:       IY = IY + IC
        !            46: C
        !            47: C  THE FOLLOWING STATEMENT IS FOR COMPUTERS WHERE THE
        !            48: C  WORD LENGTH FOR ADDITION IS GREATER THAN FOR MULTIPLICATION
        !            49: C
        !            50:       IF (IY/2 .GT. M2) IY = (IY - M2) - M2
        !            51: C
        !            52: C  THE FOLLOWING STATEMENT IS FOR COMPUTERS WHERE INTEGER
        !            53: C  OVERFLOW AFFECTS THE SIGN BIT
        !            54: C
        !            55:       IF (IY .LT. 0) IY = (IY + M2) + M2
        !            56:       URAND = DBLE(IY)*S
        !            57:       RETURN
        !            58:       END

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.