[fpc-devel] Optimization for 'mod'

Anton Shepelev anton.txt at gmail.com
Fri Jan 5 13:57:10 CET 2018


J. Gareth Moreton:

> For example, code such as this:
>
>    Minutes := t div 60;
>    Seconds := t mod 60;
>
> ...is badly optimised,

Or not at all.

> because  the division is calculated twice (without
> the patch, 't div 60' uses a reciprocal  constant,
> while 't mod 60' just uses 'DIV'), whereas, ideal-
> ly, it should only be calculated  once  since  the
> numerator and denominator are the same...

How  about  a  compound DivMod() procedure that will
return both quotient and remainder:

procedure DivMod (* or QuotRem ? *)
(  const dividend, divisor:   integer;
   var   quotient, remainder: integer
);
begin
   quotient  := dividend div divisor;
   remainder := dividend - quotient*divisor;
end;

Similar  optimisation  is   already   available   in
Math.SinCos().

-- 
Please, do not forward replies to my e-mail.




More information about the fpc-devel mailing list