В Delphi объявление функции DivMod выглядит так:
procedure DivMod(Dividend: Cardinal; Divisor: Word;
var Result, Remainder: Word);
Таким образом, делитель, результат и остаток не могут быть больше 65535, что является довольно жестким ограничением. Почему это? Почему не может быть делекарирование
procedure DivMod(Dividend: Cardinal; Divisor: Cardinal;
var Result, Remainder: Cardinal);
Процедура реализована на ассемблере и поэтому, вероятно, чрезвычайно быстра. Не было бы возможно для кода
PUSH EBX
MOV EBX,EDX
MOV EDX,EAX
SHR EDX,16
DIV BX
MOV EBX,Remainder
MOV [ECX],AX
MOV [EBX],DX
POP EBX
адаптироваться к кардиналам? Насколько медленнее наивная попытка
procedure DivModInt(const Dividend: integer; const Divisor: integer; out result: integer; out remainder: integer);
begin
result := Dividend div Divisor;
remainder := Dividend mod Divisor;
end;
который не (?) ограничен 16-битными целыми числами?