|
|
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.