- (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)
- S'Model_Mantissa
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 Ceiling(d*log (10)/log (T'Machine_Radix))+1,
where d is the requested decimal precision of T. In addition, it shall be
less than or equal to the value of T'Machine_Mantissa. This attribute yields
a value of the type universal_integer.
- (4)
- S'Model_Emin
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)
- S'Safe_First
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
4*d
equal to -10.0 , where d is the requested decimal precision
of T. This attribute yields a value of the type universal_real.
- (6)
- S'Safe_Last
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
4*d
than or equal to 10.0 , where d is the requested decimal
precision of T. This attribute yields a value of the type
universal_real.
- (7)
- S'Model
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)
- 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.
-- Email comments, additions, corrections, gripes, kudos, etc. to:
Magnus Kempe -- Magnus.Kempe@di.epfl.ch
Copyright statement
Page last generated: 95-03-12