G.2.2 Model-Oriented Attributes of Floating Point Types
1
In implementations that support the Numerics Annex,
the model-oriented attributes of floating point types shall yield the
values defined here, in both the strict and the relaxed modes. These
definitions add conditions to those in
A.5.3.
Static Semantics
2
For every subtype S
of a floating point type T:
3/2
Yields the number of digits in the mantissa of the canonical form of
the model numbers of
T (see
A.5.3).
The value of this attribute shall be greater than or equal to
3.1/2
Ceiling(d · log(10) / log(T'Machine_Radix)) + g
3.2/2
where d
is the requested decimal precision of T, and g
is 0 if T'Machine_Radix is a positive power of 10 and 1 otherwise.
In addition, T'Model_Mantissa shall be less than or equal to the
value of T'Machine_Mantissa. This attribute yields a value of
the type universal_integer.
4
Yields the minimum exponent of the canonical form of the model numbers
of
T (see
A.5.3). The value of this
attribute shall be greater than or equal to the value of
T'Machine_Emin.
This attribute yields a value of the type
universal_integer.
5
Yields the lower bound of the safe range of
T. The value of this
attribute shall be a model number of
T and greater than or equal
to the lower bound of the base range of
T. In addition, if
T
is declared by a
floating_point_definition
or is derived from such a type, and the
floating_point_definition
includes a
real_range_specification
specifying a lower bound of
lb, then
the value of this attribute shall be less than or equal to
lb;
otherwise, it shall be less than or equal to –10.0
4
· d,
where
d is the requested decimal precision
of
T. This attribute yields a value of the type
universal_real.
6
Yields the upper bound of the safe range of
T. The value of this
attribute shall be a model number of
T and less than or equal
to the upper bound of the base range of
T. In addition, if
T
is declared by a
floating_point_definition
or is derived from such a type, and the
floating_point_definition
includes a
real_range_specification
specifying an upper bound of
ub, then
the value of this attribute shall be greater than or equal to
ub;
otherwise, it shall be greater than or equal to 10.0
4
· d,
where d is the requested decimal precision of
T. This attribute
yields a value of the type
universal_real.
7
Denotes a function (of a parameter
X) whose specification is given
in
A.5.3. If
X is a model number of
T, the function yields
X; otherwise, it yields the value
obtained by rounding or truncating
X to either one of the adjacent
model numbers of
T.
Constraint_Error
is raised if the resulting model number is outside the safe range of
S. A zero result has the sign of
X when S'Signed_Zeros is True.
8
Subject to the constraints
given above, the values of S'Model_Mantissa and S'Safe_Last are to be
maximized, and the values of S'Model_Emin and S'Safe_First minimized,
by the implementation as follows:
9
First, S'Model_Mantissa is set to the largest value
for which values of S'Model_Emin, S'Safe_First, and S'Safe_Last can be
chosen so that the implementation satisfies the strict-mode requirements
of
G.2.1 in terms of the model numbers and
safe range induced by these attributes.
10
Next, S'Model_Emin is set to the smallest value
for which values of S'Safe_First and S'Safe_Last can be chosen so that
the implementation satisfies the strict-mode requirements of
G.2.1
in terms of the model numbers and safe range induced by these attributes
and the previously determined value of S'Model_Mantissa.
11/3
Finally, S'Safe_First and S'Safe_Last are set (in
either order) to the smallest and largest values, respectively, for which
the implementation satisfies the strict-mode requirements of
G.2.1
in terms of the model numbers and safe range induced by these attributes
and the previously determined values of S'Model_Mantissa and S'Model_Emin.
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe