[Oberon] Modulus on negative number

Jörg joerg.straube at iaeth.ch
Tue May 16 08:33:03 CEST 2017


0 MOD x is 0 for all x except 0. In Oberon only defined for positive x

x DIV 0 is undefined. If you read the hitchhiker's guide to the galaxy the answer is 42 :-)

br
Jörg

> Am 15.05.2017 um 20:45 schrieb Tomas Kral <thomas.kral at email.cz>:
> 
> Hi,
> 
> EDIT - the reason I ask, is that until now I thought that a remainder
> is a computing synonym for the modulus. 
> 
> Also, I remember that one of the early
> Intel processors had problems with zero division, but some
> maths people argued that it was alright as zero division depends on the
> rate of convergence.
> 
> But Maths was never my cup of tea.        
> 
> At last I took some interest in this MOD'ulus 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>
> --
> 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>
> --
> Oberon at lists.inf.ethz.ch mailing list for ETH Oberon and related systems
> https://lists.inf.ethz.ch/mailman/listinfo/oberon


More information about the Oberon mailing list