Next: , Previous: F.1, Up: Annex F


F.2 The Package Decimal

Static Semantics

1
The library package Decimal has the following declaration:

2

     package Ada.Decimal is   pragma Pure(Decimal);

3

        Max_Scale constant := implementation−defined;
        Min_Scale constant := implementation−defined;

4

        Min_Delta constant := 10.0**(−Max_Scale);
        Max_Delta constant := 10.0**(−Min_Scale);

5

        Max_Decimal_Digits constant := implementation−defined;

6

        generic
           type Dividend_Type  is delta <> digits <>;
           type Divisor_Type   is delta <> digits <>;
           type Quotient_Type  is delta <> digits <>;
           type Remainder_Type is delta <> digits <>;
        procedure Divide (Dividend  in Dividend_Type;
                          Divisor   in Divisor_Type;
                          Quotient  out Quotient_Type;
                          Remainder out Remainder_Type);
        pragma Convention(Intrinsic, Divide);

7

     end Ada.Decimal;

7.a

Implementation defined: The values of named numbers in the package Decimal.

8
Max_Scale is the largest N such that 10.0**(−−N) is allowed as a decimal type's delta. Its type is universal_integer.

9
Min_Scale is the smallest N such that 10.0**(−−N) is allowed as a decimal type's delta. Its type is universal_integer.

10
Min_Delta is the smallest value allowed for delta in a decimal_fixed_point_definition. Its type is universal_real.

11
Max_Delta is the largest value allowed for delta in a decimal_fixed_point_definition. Its type is universal_real.

12
Max_Decimal_Digits is the largest value allowed for digits in a decimal_fixed_point_definition. Its type is universal_integer.

12.a

Reason: The name is Max_Decimal_Digits versus Max_Digits, in order to avoid confusion with the named number System.Max_Digits relevant to floating point.
Static Semantics

13
The effect of Divide is as follows. The value of Quotient is Quotient_Type(Dividend/Divisor). The value of Remainder is Remainder_Type(Intermediate), where Intermediate is the difference between Dividend and the product of Divisor and Quotient; this result is computed exactly.

Implementation Requirements

14
Decimal.Max_Decimal_Digits shall be at least 18.

15
Decimal.Max_Scale shall be at least 18.

16
Decimal.Min_Scale shall be at most 0.

     NOTES

17

 The effect of division yielding a quotient with control over rounding versus truncation is obtained by applying either the function attribute Quotient_Type'Round or the conversion Quotient_Type to the expression Dividend/Divisor.