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

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

- For a first subtype or a subtype defined by a subtype_indication with a digits_constraint, the digits is the value of the expression given after the reserved word
**digits**;

- For a first subtype or a subtype defined by a subtype_indication with a digits_constraint, the digits is the value of the expression given after the reserved word

- For a subtype defined by a subtype_indication without a digits_constraint, the digits of the subtype is the same as that of the subtype denoted by the subtype_mark in the subtype_indication.

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

- The digits of a base subtype is the largest integer

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

## Notes

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

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

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

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

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

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