[Oberon] Modulus on negative number

Jörg joerg.straube at iaeth.ch
Sat May 13 18:37:01 CEST 2017


Chris

As all in this mail thread said, it is not defined in Oberon. and I fully I agree.
In this context I meant, if it was defined the result would be as I wrote.
Claudio explained the mathematical background of my statement.

br
Jörg

> Am 13.05.2017 um 14:26 schrieb Chris Burrows <chris at cfbsoftware.com>:
> 
> 'completeness'? 'should be'? That statement needs some sort of context to have any validity. 
> 
> It is not true in the context of Oberon-07. As Peter has already stated - results for negative divisors are not defined in the language. The Astrobe for Cortex-M and Project Oberon RISC5 compilers will give you 'bad modulus' compilation errors for both statements in the following example:
> 
> VAR 
>  i: INTEGER;
> ...  
> ... 
>  i := 1 MOD (-12);
>  i := -1 MOD (-12);
> 
> NOTE: If the parentheses are omitted they do not even parse as valid expressions.
> 
> Regards,
> Chris Burrows
> CFB Software
> http://www.astrobe.com/RISC5
> 
> 
>> -----Original Message-----
>> From: Oberon [mailto:oberon-bounces at lists.inf.ethz.ch] On Behalf Of
>> Jörg
>> Sent: Saturday, 13 May 2017 6:43 PM
>> To: ETH Oberon and related systems
>> Subject: Re: [Oberon] Modulus on negative number
>> 
>> Hi
>> 
>> Just for completeness, the result should be
>>   1 MOD -12 = -11
>>  -1 MOD -12 = -1
>> 
>> J rg
>> 
>>> Am 13.05.2017 um 10:12 schrieb Peter Matthias
>> <PeterMatthias at web.de>:
>>> 
>>> 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
>> 
>> --
>> 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



More information about the Oberon mailing list