language: Ada (gnat-4.3.2)
date: 109 days 17 hours ago
link:
visibility: public
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
 
with Ada.Text_IO, Calendar;
use Ada.Text_IO, Calendar;
 
package body Random is
 
X_initial : FLOAT_ITEM := 0.0;
M         : FLOAT_ITEM := 1.0;
A         : FLOAT_ITEM := 7.0;
C         : FLOAT_ITEM := 13.0 / 31.0;
 
 
procedure Set_Seed is
   Time_And_Date    : TIME;
   All_Day          : DAY_DURATION;
   Minutes          : FLOAT_ITEM;
   Int_Minutes      : INTEGER;
   Part_Of_A_Minute : FLOAT_ITEM;
begin
   Time_And_Date := Clock;                -- Get the time and date
   All_Day := Seconds(Time_And_Date);     -- Seconds since midnight
   Minutes := FLOAT_ITEM(All_Day) / 60.0;   -- Floating type Minutes
   Int_Minutes := INTEGER(Minutes - 0.5); -- Integer type minutes
   Part_Of_A_Minute := FLOAT_ITEM(All_Day)
                               - 60.0 * FLOAT_ITEM(Int_Minutes);
   X_Initial := 0.1;
end Set_Seed;
 
 
procedure Force_Seed(Start_Seed : FLOAT_ITEM) is
Temp : FLOAT_ITEM;
Natural_Temp : NATURAL;
begin
   Natural_Temp := NATURAL(Start_Seed - 0.5);
   Temp := Start_Seed - FLOAT_ITEM(Natural_Temp);
   X_Initial := Start_Seed;
exception
   when Constraint_Error =>
      Put_Line("Seed out of range, ignored");
end Force_Seed;
 
 
function Get_Seed return FLOAT_ITEM is
begin
   return X_Initial;
end Get_Seed;
 
 
function Random_Number return FLOAT_ITEM is
   Temp         : FLOAT_ITEM;
   Natural_Temp : NATURAL;
begin
   Temp := A * X_Initial + C;
   Natural_Temp := NATURAL(Temp - 0.5);
   Temp := Temp - FLOAT_ITEM(Natural_Temp);
   X_Initial := Temp;
   return Temp;
end Random_Number;
 
end Random;
 
gnatgcc -c -pipe -O2 prog.adb
prog.adb:5:14: warning: file name does not match unit name, should be "random.adb"
prog.adb:5:14: file "random.ads" not found
gnatmake: "prog.adb" compilation error