News and resources for the Ada programming language

# 3.5.10 Operations of Fixed Point Types

#### Static Semantics

1
The following attributes are defined for every fixed point subtype S:
2/1
S'Small
S'Small denotes the small of the type of S. The value of this attribute is of the type universal_real. Small may be specified for nonderived ordinary fixed point types via an attribute_definition_clause (see 13.3); the expression of such a clause shall be static.
3
S'Delta
S'Delta denotes the delta of the fixed point subtype S. The value of this attribute is of the type universal_real
4
S'Fore
S'Fore yields the minimum number of characters needed before the decimal point for the decimal representation of any value of the subtype S, assuming that the representation does not include an exponent, but includes a one-character prefix that is either a minus sign or a space. (This minimum number does not include superfluous zeros or underlines, and is at least 2.) The value of this attribute is of the type universal_integer.
5
S'Aft
S'Aft yields the number of decimal digits needed after the decimal point to accommodate the delta of the subtype S, unless the delta of the subtype S is greater than 0.1, in which case the attribute yields the value one. (S'Aft is the smallest positive integer N for which (10**N)*S'Delta is greater than or equal to one.) The value of this attribute is of the type universal_integer.
6
The following additional attributes are defined for every decimal fixed point subtype S:
7
S'Digits
S'Digits denotes the digits of the decimal fixed point subtype S, which corresponds to the number of decimal digits that are representable in objects of the subtype. The value of this attribute is of the type universal_integer. Its value is determined as follows:
8
9
10
• The digits of a base subtype is the largest integer D such that the range –(10**D–1)*delta .. +(10**D–1)*delta is included in the base range of the type.
11
S'Scale
S'Scale denotes the scale of the subtype S, defined as the value N such that S'Delta = 10.0**(–N). The scale indicates the position of the point relative to the rightmost significant digits of values of subtype S. The value of this attribute is of the type universal_integer
12
S'Round
S'Round denotes a function with the following specification:
13
function S'Round(X : universal_real)
return S'Base
14
The function returns the value obtained by rounding X (away from 0, if X is midway between two values of the type of S).
NOTES
15
39  All subtypes of a fixed point type will have the same value for the Delta attribute, in the absence of delta_constraints (see J.3).
16
40  S'Scale is not always the same as S'Aft for a decimal subtype; for example, if S'Delta = 1.0 then S'Aft is 1 while S'Scale is 0.
17
41  The predefined operations of a fixed point type include the assignment operation, qualification, the membership tests, and explicit conversion to and from other numeric types. They also include the relational operators and the following predefined arithmetic operators: the binary and unary adding operators – and +, multiplying operators, and the unary operator abs.
18
42  As for all types, objects of a fixed point type have Size and Address attributes (see 13.3). Other attributes of fixed point types are defined in A.5.4.