Руководство по Ada (Ada 2022)
F.2 Пакет Decimal
Статическая семантика
В библиотечном пакете Decimal есть следующее объявление:
package Ada.Decimal
with Pure is
with Pure is
Max_Scale : constant := определяемое реализацией;
Min_Scale : constant := определяемое реализацией;
Min_Scale : constant := определяемое реализацией;
Min_Delta : constant := 10.0**(-Max_Scale);
Max_Delta : constant := 10.0**(-Min_Scale);
Max_Delta : constant := 10.0**(-Min_Scale);
Max_Decimal_Digits : constant := определяемое реализацией;
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)
with Convention => Intrinsic;
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)
with Convention => Intrinsic;
end Ada.Decimal;
Max_Scale — это наибольшее N, такое что 10.0**(–N) допускается в качестве дельта типа десятичного числа. Его тип — universal_integer.
Min_Scale — это наименьшее N, такое что 10.0**(–N) допускается в качестве дельта типа десятичного числа. Его тип — universal_integer.
Min_Delta — это наименьшее значение, разрешённое для delta в decimal_fixed_point_definition. Его тип — universal_real.
Max_Delta — это наибольшее значение, разрешённое для delta в decimal_fixed_point_definition. Его тип — universal_real.
Max_Decimal_Digits — это наибольшее значение, разрешённое для digits в decimal_fixed_point_definition. Его тип — universal_integer.
Статическая семантика
Эффект Divide следующий. Значение Quotient равно Quotient_Type(Dividend/Divisor). Значение Remainder равно Remainder_Type(Intermediate), где Intermediate — это разность между Dividend и произведением Divisor и Quotient; этот результат вычисляется точно.
Требования к реализации
Decimal.Max_Decimal_Digits должен быть не меньше 18.
Decimal.Max_Scale должен быть не меньше 18.
Decimal.Min_Scale должен быть не больше 0.
ПРИМЕЧАНИЕ Эффект деления, дающего частное с управлением округлением вместо усечения, достигается путём применения атрибута функции Quotient_Type'Round или преобразования Quotient_Type к выражению Dividend/Divisor.