- (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
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)
- 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
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)
- 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
-- M.Kempe@ieee.org
Copyright statement
Page last generated: 96-03-09