[M3devel] integer division/mod questions?
Jay K
jay.krell at cornell.edu
Sun Jan 17 11:50:18 CET 2010
I think I missed a sign.
-2147483648 - 2147483647 * -2
actually -2147483648 + 2 * 2147483647
actually 2147483646
which agrees.
so
-2147483648 div 2147483647 = -2
-2147483648 mod 2147483647 = 2147483646
-2 * 2147483647 + 2147483646 = -2147483648
I'll make sure m3_mod works this way if it doesn't already.
Presumably we are stuck with these rules.
- Jay
From: jay.krell at cornell.edu
To: m3devel at elegosoft.com
Subject: integer division/mod questions?
Date: Sun, 17 Jan 2010 10:44:53 +0000
-2147483648 div 2147483647 ?
-2147483648 mod 2147483647 ?
quotient = -1, remainer = -1 seems reasonable.
2147483647 * -1 + -1 == -2147483648
However, Modula-3 specifies div as rounding down, so
-2147483648 div 2147483647 == -2
and then
http://www.modula3.com/cm3/doc/reference/arithmetic.html
The value x DIV y is the floor of
the quotient of x and y; that is, the maximum integer
not exceeding the real number z such that z * y = x.
For integers x and y, the value of x MOD y is
defined to be x - y * (x DIV y).
This means that for positive y, the value of x MOD y
lies in the interval [0 .. y-1], regardless of
the sign of x. For negative y, the value of
x MOD y lies in the interval [y+1 .. 0], regardless
of the sign of x.
-2147483648 - 2147483647 * -2
-2147483648 +2 (due to overflow)
-2147483646
which contradicts the second part.
Maybe I'm confused? I should work this all through again?
- Jay
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://m3lists.elegosoft.com/pipermail/m3devel/attachments/20100117/7702d6cc/attachment-0002.html>
More information about the M3devel
mailing list