# G.2.2 Model-Oriented Attributes of Floating Point Types

From OC Systems Wiki!

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

For every subtype S of a floating point type *T*:

- 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**Machine_Mantissa. This attribute yields a value of the type*is the requested decimal precision of*T*. In addition, it shall be less than or equal to the value of*T*universal_integer*.

- 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*.

- 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*.

- 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*.

- 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.

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:

- 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.
- 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.
- 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.

Copyright © 1992,1993,1994,1995 Intermetrics, Inc.

Copyright © 2000 The MITRE Corporation, Inc.
Ada Reference Manual