[Oberon] Modulus on negative number

Jörg joerg.straube at iaeth.ch
Mon May 15 09:57:08 CEST 2017


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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.inf.ethz.ch/pipermail/oberon/attachments/20170515/4c872f79/attachment.html>


More information about the Oberon mailing list