Annotation of OpenXM_contrib/PHC/Ada/Math_Lib/Numbers/standard_random_numbers.adb, Revision 1.1.1.1
1.1 maekawa 1: with Machines; use Machines;
2: with Standard_Mathematical_Functions; use Standard_Mathematical_Functions;
3:
4: package body Standard_Random_Numbers is
5:
6: a : constant integer := 13849;
7: m : constant integer := 65536;
8: c : constant integer := 56963;
9: seed : integer := Process_Id;
10:
11: function Random ( lower,upper : integer ) return integer is
12:
13: f : double_float;
14:
15: begin
16: f := Random; -- f in [-1,1]
17: f := 0.5*(double_float(upper-lower)*f + double_float(lower+upper));
18: -- f in [lower,upper]
19: return integer(f); -- rounding the result to integer number
20: end Random;
21:
22: function Random return double_float is
23:
24: x : double_float;
25:
26: begin
27: seed := (a*seed + c) mod m;
28: x := double_float(seed)/double_float(m);
29: x := 2.0 * x - 1.0;
30: return x;
31: end Random;
32:
33: function Random return Complex_Number is
34: begin
35: return Create(Random,Random);
36: end Random;
37:
38: function Random ( modulus : double_float ) return Complex_Number is
39:
40: arg : double_float;
41:
42: begin
43: arg := PI*Random; -- in [-pi,+pi]
44: return Create(modulus*COS(arg),modulus*SIN(arg));
45: end Random;
46:
47: function Random1 return Complex_Number is
48:
49: arg : double_float;
50:
51: begin
52: arg := PI*Random; -- in [-pi,+pi]
53: return Create(COS(arg),SIN(arg));
54: end Random1;
55:
56: end Standard_Random_Numbers;
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>