Michiel Helvensteijn wrote:
Michiel Helvensteijn wrote:

Walter, surely this test shouldn't take more than a minute for you (or
anyone else with a D compiler installed).

Ok, ok. I'll do it. Here's the results:

----------------------------------
import std.stdio;

int main() {
        writefln(8/3);
        writefln(8/(-3));
        writefln((-8)/3);
        writefln((-8)/(-3));
        writefln(8%3);
        writefln(8%(-3));
        writefln((-8)%3);
        writefln((-8)%(-3));

        return 0;
}
----------------------------------

outputs the following

----------
2
-2
-2
2
2
2
-2
-2
----------

So DMD uses truncated division. The quotient rounds towards zero and the
remainder has the same sign as the dividend. I've updated issue 3165 with
this information.

Hope that helps.


Thanks, Michiel. Here's what I have in TDPL. Is it 100% in sync with you?

=======================================
The  multiplicative expressions  are multiplication  (\ccbox{a  * b}),
division  (\ccbox{a  / b}),  and  remainder  (\ccbox{a  \% b}).   They
operate on numeric types only. The  result type is same as the type of
\ccbox{true ? a : b}.

i...@b@  is  zero in  \ccbox{a  /  b} or  \ccbox{a  \%  b}, a  hardware
exception   is  thrown.    The  sign\footnote{Sign,   not  signedness,
   i.e.,~the sign of  the actual value.}  of \ccbox{a  \% b} is always
the same as  the sign o...@a@.  That is, \ccbox{a \%  b} is the closest
number to  zero of the same sign  o...@a@ that must be  added t...@a@ to
make it divisible b...@b@.  For  example, \ccbox{-5 \% 2} and \ccbox{-5
   \% -2} both yield~\cc{-1}.

\dee\ also defines modulus for  floating-point numbers in the same way
as the  IEEE~754  standard.  When  at least one  of @a@  and @b@  is a
floating-point value in \cc{a \%  b}, the result is the floating-point
number @r@ satisfying the relation \cc{a = b * n + r}, where @n@ is an
integer\footnote{``integer'' in  the mathematical sense  here} and @r@
is a positive number less than @b@'s absolute value.
=======================================


Thanks,

Andrei

Reply via email to