Martyn,

Integer division for negative numbers is not very well defined. Language 
designers get to choose if their language will round towards zero, negative 
infinity, or positive infinity when doing integer division. Different languages 
have made different choices. S*Basic designers have chosen to use the 
"flooring" approach (round the floating point result to the next smaller 
number).

Some other reasoning: -1 / 2 should be? 
(1) -1/2 = 0 remainder -1
(2)$FFFF ASR 1 = $FFFF = -1 

Another note: The original QL allowed word-size divisors and dividends. while 
SMSQ/E extended this to long integers. And the original QL manual even had an 
example illustrating what you see here:

-5 DIV 2 { will output -3}

Tobias


> Am 05.01.2017 um 16:27 schrieb Martyn Hill <martyn.joseph.h...@gmail.com>:
> 
> Hi everyone
> 
> Can anyone tell me the expected behaviour for the integer-divide operator 
> 'DIV' in SBASIC, when provided with a negative dividend/numerator?
> 
> My number-theory is a bit rusty, but I would have thought that, say, -1 DIV 
> 10 should result in 0 (with remainder/MOD of -1).
> 
> Instead, on QPC2/SBASIC, I get the result -1 for that example - and (almost) 
> always 1 less than expected for negative dividends, thus:
> 
> 12 DIV 10 = 1
> 11 DIV 10 = 1
> 10 DIV 10 = 1
>   9 DIV 10 = 0
> ...
>   2 DIV 10 = 0
>   1 DIV 10 = 0
>   0 DIV 10 = 0
> * -1 DIV 10 = -1 - expected '0'**
> ** -2 DIV 10 = -1**
> **...**
> **  -9 DIV 10 = -1*
> *-10 DIV 10 = -1 - as expected*
> *-11 DIV 10 = -2 - expected '-1'
> -12 DIV 10 = -2
> 
> *etc...
> 
> Thanks in advance!
> 
> Martyn.
> _______________________________________________
> QL-Users Mailing List

_______________________________________________
QL-Users Mailing List

Reply via email to