1 -- Copyright 2004-2025 Free Software Foundation, Inc.
3 -- This program is free software; you can redistribute it and/or modify
4 -- it under the terms of the GNU General Public License as published by
5 -- the Free Software Foundation; either version 3 of the License, or
6 -- (at your option) any later version.
8 -- This program is distributed in the hope that it will be useful,
9 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
10 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 -- GNU General Public License for more details.
13 -- You should have received a copy of the GNU General Public License
14 -- along with this program. If not, see <http://www.gnu.org/licenses/>.
19 procedure Fixed_Points is
25 -- Fixed point subtypes
27 type Base_Fixed_Point_Type is
29 range -2147483648 * 1.0 / 16.0 .. 2147483647 * 1.0 / 16.0;
31 subtype Fixed_Point_Subtype is
32 Base_Fixed_Point_Type range -50.0 .. 50.0;
34 type New_Fixed_Point_Type is
35 new Base_Fixed_Point_Type range -50.0 .. 50.0;
37 Base_Object : Base_Fixed_Point_Type := -50.0;
38 Subtype_Object : Fixed_Point_Subtype := -50.0;
39 New_Type_Object : New_Fixed_Point_Type := -50.0;
48 Overprecise_Delta : constant := 0.135791357913579;
49 -- delta whose significant figures cannot be stored into a long.
51 type Overprecise_Fixed_Point is
52 delta Overprecise_Delta range 0.0 .. 200.0;
53 for Overprecise_Fixed_Point'Small use Overprecise_Delta;
55 Overprecise_Object : Overprecise_Fixed_Point :=
56 Overprecise_Fixed_Point'Small;
58 FP5_Var : FP5_Type := 3 * Delta5;
61 Another_Delta : constant := 1.0/(2**63);
62 type Another_Type is delta Another_Delta range -1.0 .. (1.0 - Another_Delta);
63 for Another_Type'small use Another_Delta;
64 for Another_Type'size use 64;
65 Another_Fixed : Another_Type := Another_Delta * 5;
67 Semicircle_Delta : constant := 1.0/(2**31);
68 type Semicircle_Type is delta Semicircle_Delta range -1.0 .. (1.0 - Semicircle_Delta);
69 for Semicircle_Type'small use Semicircle_Delta;
70 for Semicircle_Type'size use 32;
71 Object_Fixed : Semicircle_Type := Semicircle_Delta * 5;
74 Base_Object := 1.0/16.0; -- Set breakpoint here
75 Subtype_Object := 1.0/16.0;
76 New_Type_Object := 1.0/16.0;
77 Overprecise_Object := Overprecise_Fixed_Point'Small * 2;
78 Do_Nothing (FP1_Var'Address);
79 Do_Nothing (FP2_Var'Address);
80 Do_Nothing (FP3_Var'Address);
81 Do_Nothing (FP4_Var'Address);
82 Do_Nothing (FP5_Var'Address);
83 Do_Nothing (Another_Fixed'Address);
84 Do_Nothing (Object_Fixed'Address);