F.2 The Package Decimal
Static Semantics
The library package
Decimal has the following declaration:
package Ada.Decimal
is
pragma Pure(Decimal);
Max_Scale :
constant :=
implementation-defined;
Min_Scale :
constant :=
implementation-defined;
Min_Delta :
constant := 10.0**(-Max_Scale);
Max_Delta :
constant := 10.0**(-Min_Scale);
Max_Decimal_Digits :
constant :=
implementation-defined;
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);
end Ada.Decimal;
Implementation defined: The values of
named numbers in the package Decimal.
Max_Scale is the largest N such that 10.0**(–N)
is allowed as a decimal type's delta. Its type is universal_integer.
Min_Scale is the smallest N such that 10.0**(–N)
is allowed as a decimal type's delta. Its type is universal_integer.
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
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
Decimal.Max_Decimal_Digits shall be at least 18.
Decimal.Max_Scale shall be at least 18.
Decimal.Min_Scale shall be at most 0.
1 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.