[Oberon] Modulus on negative number

Tomas Kral thomas.kral at email.cz
Mon May 15 11:28:17 CEST 2017


Hi,

At last I took some interest in this MOD'ulo discussion. I wonder how
it is (un)defined in Math / Oberon

x DIV 0
0 MOD x

Tomas

On Mon, 15 May 2017 09:57:08 +0200
Jörg <joerg.straube at iaeth.ch> wrote:

> It is. MOD is defined as C x C -> C
> Jörg
> 
> > Am 14.05.2017 um 20:17 schrieb Aubrey McIntosh
> > <aubrey.mcintosh at utexas.edu>:
> > 
> > I have not checked my number theory book lately, but I don't think
> > (i.e., don't remember) that it is defined mathematically for
> > negative divisors either.
> > 
> >> On Sat, May 13, 2017 at 3:12 AM, Peter Matthias
> >> <PeterMatthias at web.de> wrote: Agreed. However, -1 MOD -12 or 1 MOD
> >> -12 is not defined in Oberon.
> >> 
> >> 
> >>> Am 12.05.2017 um 22:43 schrieb Aubrey McIntosh:
> >>> for -1 MOD 12, the mathematically correct answers which are
> >>> consistent with the language report, are
> >>> q=-1, r=11.
> >>> 
> >>> This definition works very well, for example, to implement wrap
> >>> around strip chart displays.
> >>> 
> >>> 
> >>> On Fri, May 12, 2017 at 2:28 PM, Peter Matthias
> >>> <PeterMatthias at web.de <mailto:PeterMatthias at web.de>> wrote:
> >>> 
> >>>     Warming up the thread to give supposedly correct answer:
> >>> 
> >>>     Am 16.02.2017 um 00:00 schrieb Peter Matthias:
> >>> 
> >>> 
> >>> 
> >>>         Am 15.02.2017 um 04:21 schrieb Srinivas Nayak:
> >>> 
> >>>             Dear All,
> >>> 
> >>>             Recently I come across modulus on a negative number.
> >>>             Will it produce a negative number or positive?
> >>>             Someone says both are correct!
> >>>             http://stackoverflow.com/a/4403556
> >>>             <http://stackoverflow.com/a/4403556>
> >>>             Which one is mathematically correct?
> >>>             Surprisingly different languages calculate it
> >>> differently even! What is Oberon's way?
> >>> 
> >>> 
> >>>         The theory was already answered. In practice, all compiler
> >>>         implementations I used (native X86, Shark, MIPS), give
> >>> wrong result when
> >>>         both, divident and divisor are negative. I fixed it just
> >>>         yesterday for
> >>>         all non x86 versions.
> >>> 
> >>> 
> >>>     I should have read the language report before making such
> >>> claims.
> >>> 
> >>>     Oberon Report says:
> >>> 
> >>>     "The operators DIV and MOD apply to integer operands only.
> >>> They are related by the following formulas defined for any
> >>> dividend x and positive divisors y:
> >>>     x = (x DIV y) * y + (x MOD y)
> >>>     0 ≤ (x MOD y) < y"
> >>> 
> >>>     Oberon07-Report says:
> >>> 
> >>>     "The operators DIV and MOD apply to integer operands only.
> >>> Let q = x DIV y, and r = x MOD y.
> >>>     Then quotient q and remainder r are defined by the equation
> >>>     x = q*y + r              0 <= r < y"
> >>> 
> >>>     Last statement obviously cannot be met if y is negative.
> >>> 
> >>>     So in short: Don't use DIV/MOD for negative divisors as the
> >>> result is not defined.
> >>> 
> >>>     >From the implemtation point of view this perfectly makes
> >>>     >sense as
> >>>     negative divisors are seldom used and correction for DIV of
> >>> the usually stupid hardware implementation only takes 3 additional
> >>>     instructions compared to at least 6 for a complete definition.
> >>>     Simple SHIFT/AND instructions for power of 2 divisors easily
> >>>     outwight these 3 additional instructions.
> >>> 
> >>> 
> >>>     Peter
> >>> 
> >>>     --
> >>>     Oberon at lists.inf.ethz.ch <mailto:Oberon at lists.inf.ethz.ch>
> >>> mailing list for ETH Oberon and related systems
> >>>     https://lists.inf.ethz.ch/mailman/listinfo/oberon
> >>>     <https://lists.inf.ethz.ch/mailman/listinfo/oberon>
> >>> 
> >>> 
> >>> 
> >>> 
> >>> --
> >>> Aubrey McIntosh, Ph.D.
> >>> 1502 Devon Circle
> >>> Austin TX 78723
> >>> (512) 348-7401
> >>> 
> >>> 
> >>> 
> >>> --
> >>> Oberon at lists.inf.ethz.ch mailing list for ETH Oberon and related
> >>> systems https://lists.inf.ethz.ch/mailman/listinfo/oberon
> >>> 
> >> --
> >> Oberon at lists.inf.ethz.ch mailing list for ETH Oberon and related
> >> systems https://lists.inf.ethz.ch/mailman/listinfo/oberon
> > 
> > 
> > 
> > -- 
> > Aubrey McIntosh, Ph.D.
> > 1502 Devon Circle
> > Austin TX 78723
> > (512) 348-7401
> > 
> > --
> > Oberon at lists.inf.ethz.ch mailing list for ETH Oberon and related
> > systems https://lists.inf.ethz.ch/mailman/listinfo/oberon



-- 
Tomas Kral <thomas.kral at email.cz>


More information about the Oberon mailing list