|
|
1.1 ! root 1: .TI F77/RANDOM "Sep. 4, 1985" ! 2: Random Number Generators ! 3: ! 4: You can generate sequences of random numbers using random() ! 5: from the f77 system library, or by using procedures in the IMSL or ! 6: NAG libraries. ! 7: This help file includes examples using random(), ! 8: ggubs() from the IMSL library and g05caf() from the NAG library. ! 9: ggubs() and g05caf() are recommended over random(). ! 10: See "help f77 nag" and "help f77 imsl" for information on whether IMSL ! 11: and NAG are available on this system. ! 12: ! 13: The functions random(), irandm(), and drandm() in the f77 library ! 14: provide sequence of real, integer and double precision random numbers. ! 15: To get a sequence of 100 pseudo-random numbers between 0 and 1.0: ! 16: ! 17: .nf ! 18: real x(100) ! 19: ... ! 20: x(1) = random(1) ! 21: do 10 i=2,100 ! 22: 10 x(i) = random(0) ! 23: .fi ! 24: ! 25: The first call with argument of 1 starts the sequence with the same ! 26: number each time the program is run. This is useful for debugging when ! 27: you need to compare two runs. The later calls with argument of 0 ! 28: cause the next random number in the sequence to be returned. If you ! 29: want to generate a different sequence each time the program is run, ! 30: use: ! 31: ! 32: .nf ! 33: integer time ! 34: real x(100) ! 35: ... ! 36: x(1) = random(time()) ! 37: do 10 i=2,100 ! 38: 10 x(i) = random(0) ! 39: .fi ! 40: ! 41: For details, see "man 3f random". ! 42: ! 43: NAG section G05 and IMSL chapter G contain over 80 subroutines dealing ! 44: with generating and testing pseudo-random numbers. To generate a ! 45: sequence of 100 single precision pseudo-random numbers in the interval (0.,1.) ! 46: using IMSL's ggubs: ! 47: ! 48: .nf ! 49: real randsp(100), ggubfs ! 50: double precision dseed ! 51: ! 52: dseed = 123457.d0 ! 53: do 20 i = 1, 100 ! 54: 20 randsp(i) = ggubfs( dseed ) ! 55: .fi ! 56: ! 57: \&'dseed' is changed by ggubfs(), so it must be a variable and your program ! 58: must not change it between calls to ggubfs(). The sequence generated depends ! 59: on the initial value of 'dseed'; it must be between 1.0d0 and 2147483647.0d0 . ! 60: To access the IMSL library, add '-limsld' at the end of your f77 command. ! 61: ! 62: To generate a sequence of 100 double pseudo-random precision numbers ! 63: in the interval (0.,1.) using NAG's g05caf(): ! 64: ! 65: .nf ! 66: double precision randdp(100), g05caf ! 67: ! 68: do 30 i = 1,100 ! 69: 30 randdp(i) = g05caf(dummy) ! 70: .fi ! 71: ! 72: g05caf() uses common blocks /ag05ca/ and /bg05ca/, so your program ! 73: should not changes values in these common blocks. This generates the ! 74: same sequence each time it is used; to generate a different sequence ! 75: each time your program is run, begin your program with: ! 76: ! 77: call g05ccf ! 78: ! 79: g05ccf should be called before the first call on g05caf() and should be ! 80: called only once. It will initialize the random sequence using the ! 81: current time to generate a seed. To access the NAG library, ! 82: add '-lnagd' at the end of your f77 command.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.