Re.[Oberon] Native 24.08.2002: Compiler Bug
eas-lab at absamail.co.za
eas-lab at absamail.co.za
Tue Oct 1 17:55:12 CEST 2002
Stefan Salewski wrote:
> I think there is something wrong with the DIV statement.
Yes, it's the same with n-o alpha 2001. Also using constants:
10 DIV 3 = 3
- 10 DIV 3 = - 3 // DIV has precendence over "-"
-(-10 DIV 3) = 3
(-10) DIV 3 = - 4 // truncates toward minus-infinity ?!
-((-10) DIV 3) = 4
Besides this, looking into DIV raised other issues for me.
Desktops.OpenDoc Oberon.Report.Text ~ shows:
They are related by the following formulas defined for any x and
positive divisors y:
x = (x DIV y) * y + (x MOD y)
0 <= (x MOD y) < y
Examples:
x y x DIV y x MOD y
5 3 1 2
-5 3 -2 1
======
I would expect DIV to 'truncate towards zero'. Not towards minus infinity ?
And when I try to analyse the 'rules' further I'm confused:
* From Oberon.Report.Text
operator DIV: first operand = integer ; second operand = integer
result type = smallest integer type including both operands
So here Oberon.Report.Text DIV defines the 2 operands 'symetically',
but elsewhere "positive divisors y" (x may not be positive).
* Then let's see the definition/syntax of "integer":-
integer = digit {digit} | digit {hexDigit} "H".
real = digit {digit} "." {digit} [ScaleFactor].
ScaleFactor = ("E" | "D") ["+" | "-"] digit {digit}.
It seems to me, that from the above "-10" would fail the syntax of an
integer ? ! Where is my reasoning wrong ?
Apparently "integer" is not type INTEGER ?
So my queries are:
1. is -10 a n-o 'integer' ?
2. are the valid two operands of DIV of the same type ?
3. are these claims of mine of inconsistency in Oberon.Report.Text valid ?
-- Chris Glur.
More information about the Oberon
mailing list