21 lines
681 B
Ada
21 lines
681 B
Ada
procedure Div
|
|
( Dividend : in out Long_Number;
|
|
Last : in out Natural;
|
|
Remainder : out Unsigned_32;
|
|
Divisor : Unsigned_32
|
|
) is
|
|
Div : constant Unsigned_64 := Unsigned_64 (Divisor);
|
|
Accum : Unsigned_64 := 0;
|
|
Size : Natural := 0;
|
|
begin
|
|
for Index in reverse Dividend'First..Last loop
|
|
Accum := Accum * 2**32 + Unsigned_64 (Dividend (Index));
|
|
Dividend (Index) := Unsigned_32 (Accum / Div);
|
|
if Size = 0 and then Dividend (Index) /= 0 then
|
|
Size := Index;
|
|
end if;
|
|
Accum := Accum mod Div;
|
|
end loop;
|
|
Remainder := Unsigned_32 (Accum);
|
|
Last := Size;
|
|
end Div;
|