3.5.10 Operations of Fixed Point Types
Static Semantics
The following attributes 
are defined for every fixed point subtype S: 
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 and positive.
 
S'Delta
S'Delta denotes the 
delta 
of the fixed point subtype S. The value of this attribute is of the type 
universal_real. 
 
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.
 
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. 
 
The following additional 
attributes are defined for every decimal fixed point subtype S: 
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: 
 
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.
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. 
 
S'Round
S'Round denotes a function with 
the following specification: 
 
function S'Round(X : universal_real)
  return S'Base
The function returns the value obtained 
by rounding X (away from 0, if X is midway between two values of the 
type of S). 
NOTE 1   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).
 
NOTE 2   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.
NOTE 3   
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.
 
NOTE 4   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. 
 
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe