3.5.10 Operations of Fixed Point Types
Static Semantics
The following attributes
are defined for every fixed point subtype S:
S'Small
{
8652/0005}
{
AI95-00054-01}
{
AI12-0367-1}
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.
Aspect Description for Small: Scale
factor for a fixed point type.
S'Delta
S'Delta denotes the
delta
of the fixed point subtype S. The value of this attribute is of the type
universal_real.
Reason: The
delta is associated
with the
subtype as opposed to the type, because of the possibility
of an (obsolescent)
delta_constraint.
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:
Implementation Note: Although a decimal
subtype can be both range-constrained and digits-constrained, the digits
constraint is intended to control the Size attribute of the subtype.
For decimal types, Size can be important because input/output of decimal
types is so common.
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.
Ramification: S'Scale is negative if
S'Delta is greater than one. By contrast, S'Aft is always positive.
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.
Wording Changes from Ada 95
{
8652/0005}
{
AI95-00054-01}
Corrigendum: Clarified that
small may be specified only
for ordinary fixed point types.
Wording Changes from Ada 2012
{
AI12-0367-1}
Correction: Clarified that
small may be specified only
with positive values.
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe