Annotation of OpenXM_contrib/PHC/Ada/Math_Lib/Numbers/multprec_floating_numbers.ads, Revision 1.1.1.1
1.1 maekawa 1: with Multprec_Natural_Numbers; use Multprec_Natural_Numbers;
2: with Multprec_Integer_Numbers; use Multprec_Integer_Numbers;
3: with Standard_Floating_Numbers; use Standard_Floating_Numbers;
4:
5: package Multprec_Floating_Numbers is
6:
7: -- DESCRIPTION :
8: -- This package provides operations to deal with floating-point numbers
9: -- of arbitrary length. The size of the fraction remains fixed during
10: -- computations, but can be adjusted. The exponent has no fixed size.
11: -- Mixed-precision arithmetic is fully supported: the size of the result
12: -- in any binary operation is the maximal size of the operands.
13:
14: type Floating_Number is private;
15:
16: -- CONSTRUCTORS :
17:
18: function Create ( i : integer ) return Floating_Number;
19: function Create ( i : Integer_Number ) return Floating_Number;
20: function Create ( f : double_float ) return Floating_Number;
21:
22: function Create ( fraction,exponent : integer ) return Floating_Number;
23: function Create ( fraction : Integer_Number;
24: exponent : integer ) return Floating_Number;
25: function Create ( fraction : integer;
26: exponent : Integer_Number ) return Floating_Number;
27: function Create ( fraction,exponent : Integer_Number ) return Floating_Number;
28:
29: -- DESCRIPTION :
30: -- A floating point number consists of a fraction and exponent.
31:
32: -- SELECTORS :
33:
34: function Fraction ( f : Floating_Number ) return Integer_Number;
35: function Exponent ( f : Floating_Number ) return Integer_Number;
36:
37: -- DESCRIPTION :
38: -- Returns the fraction and the exponent. Warning: sharing!
39: -- We have that f = Fraction(f)*10**Exponent(f).
40:
41: function Size_Fraction ( f : Floating_Number ) return natural;
42: function Size_Exponent ( f : Floating_Number ) return natural;
43:
44: -- DESCRIPTION :
45: -- Returns the length of the coefficient vector of the representations
46: -- of fraction and exponent as integer numbers.
47: -- Size_Fraction(f) = 1 corresponds to the precision of the standard
48: -- double floating-point numbers.
49:
50: function Decimal_Places_Fraction ( f : Floating_Number ) return natural;
51: function Decimal_Places_Exponent ( f : Floating_Number ) return natural;
52:
53: -- DESCRIPTION :
54: -- Returns the number of decimal places in fraction and exponent.
55:
56: function Decimal_to_Size ( deci : natural ) return natural;
57:
58: -- DESCRIPTION :
59: -- Returns the smallest size to obtain the given number of decimal places.
60: -- This is useful for the "Set_Size" operation.
61:
62: function AbsVal ( f : Floating_Number ) return Floating_Number;
63:
64: -- DESCRIPTION :
65: -- Returns the absolute value of f.
66:
67: -- COMPARISON AND COPYING :
68:
69: function Equal ( f1 : Floating_Number; f2 : double_float ) return boolean;
70: function Equal ( f1,f2 : Floating_Number ) return boolean;
71:
72: -- DESCRIPTION :
73: -- Returns true if f1 and f2 are equal, false otherwise.
74:
75: function "<" ( f1 : double_float; f2 : Floating_Number ) return boolean;
76: function "<" ( f1 : Floating_Number; f2 : double_float ) return boolean;
77: function "<" ( f1,f2 : Floating_Number ) return boolean;
78:
79: -- DESCRIPTION :
80: -- Returns true if f1 < f2, false otherwise.
81:
82: function ">" ( f1 : double_float; f2 : Floating_Number ) return boolean;
83: function ">" ( f1 : Floating_Number; f2 : double_float ) return boolean;
84: function ">" ( f1,f2 : Floating_Number ) return boolean;
85:
86: -- DESCRIPTION :
87: -- Returns true if f1 > f2, false otherwise;
88:
89: procedure Copy ( f1 : in Floating_Number; f2 : in out Floating_Number );
90:
91: -- DESCRIPTION :
92: -- Clears f2 and copies the content of f1 into f2.
93: -- Note that f2 := f1 leads to data sharing.
94:
95: -- EXPANDING and SHORTENING THE MANTISSA :
96:
97: function Expand ( f : Floating_Number; k : natural ) return Floating_Number;
98: procedure Expand ( f : in out Floating_Number; k : in natural );
99:
100: -- DESCRIPTION :
101: -- Expands the fraction by adding k coefficients.
102:
103: function Round ( f : Floating_Number ) return double_float;
104: function Round ( f : Floating_Number; k : natural ) return Floating_Number;
105: procedure Round ( f : in out Floating_Number; k : in natural );
106:
107: function Trunc ( f : Floating_Number ) return double_float;
108: function Trunc ( f : Floating_Number; k : natural ) return Floating_Number;
109: procedure Trunc ( f : in out Floating_Number; k : in natural );
110:
111: -- DESCIRPTION :
112: -- Shortens the fraction by removing k coefficients, either by rouding
113: -- or by truncation of the least significant coefficients.
114:
115: procedure Set_Size ( f : in out Floating_Number; k : in natural );
116:
117: -- DESCRIPTION :
118: -- Sets the size of the floating number f to k, either by rounding
119: -- or expanding its current size.
120:
121: -- ARITHMETIC OPERATIONS as functions (no data sharing) :
122: -- The size of the result is the maximal size of the operands.
123:
124: function "+" ( f1 : Floating_Number; f2 : double_float )
125: return Floating_Number;
126: function "+" ( f1 : double_float; f2 : Floating_Number )
127: return Floating_Number;
128: function "+" ( f1,f2 : Floating_Number ) return Floating_Number;
129:
130: function "+" ( f : Floating_Number ) return Floating_Number; -- copy of f
131: function "-" ( f : Floating_Number ) return Floating_Number;
132:
133: function "-" ( f1 : Floating_Number; f2 : double_float )
134: return Floating_Number;
135: function "-" ( f1 : double_float; f2 : Floating_Number )
136: return Floating_Number;
137: function "-" ( f1,f2 : Floating_Number ) return Floating_Number;
138:
139: function "*" ( f1 : Floating_Number; f2 : double_float )
140: return Floating_Number;
141: function "*" ( f1 : double_float; f2 : Floating_Number )
142: return Floating_Number;
143: function "*" ( f1,f2 : Floating_Number ) return Floating_Number;
144:
145: function "**" ( f : double_float; n : Natural_Number ) return Floating_Number;
146: function "**" ( f : Floating_Number; n : Natural_Number )
147: return Floating_Number;
148:
149: function "**" ( f : Floating_Number; i : integer ) return Floating_Number;
150: function "**" ( f : double_float; i : Integer_Number ) return Floating_Number;
151: function "**" ( f : Floating_Number; i : Integer_Number )
152: return Floating_Number;
153:
154: function "/" ( f1 : Floating_Number; f2 : double_float )
155: return Floating_Number;
156: function "/" ( f1 : double_float; f2 : Floating_Number )
157: return Floating_Number;
158: function "/" ( f1,f2 : Floating_Number ) return Floating_Number;
159:
160: -- ARITHMETIC OPERATIONS as procedures for memory management :
161:
162: procedure Add ( f1 : in out Floating_Number; f2 : in double_float ); -- "+"
163: procedure Add ( f1 : in out Floating_Number; f2 : in Floating_Number );
164:
165: procedure Sub ( f1 : in out Floating_Number; f2 : in double_float ); -- "-"
166: procedure Sub ( f1 : in out Floating_Number; f2 : in Floating_Number );
167: procedure Min ( f : in out Floating_Number );
168:
169: procedure Mul ( f1 : in out Floating_Number; f2 : in double_float ); -- "*"
170: procedure Mul ( f1 : in out Floating_Number; f2 : in Floating_Number );
171:
172: procedure Div ( f1 : in out Floating_Number; f2 : in double_float ); -- "/"
173: procedure Div ( f1 : in out Floating_Number; f2 : in Floating_Number );
174:
175: -- DESTRUCTOR :
176:
177: procedure Clear ( f : in out Floating_Number );
178:
179: -- DESCRIPTION :
180: -- Deallocations of the occupied memory for f.
181:
182: private
183:
184: type Floating_Number is record
185: fraction,exponent : Integer_Number;
186: end record;
187:
188: end Multprec_Floating_Numbers;
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>