[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Modulo operator produces incorrect results with negative operand(s).
- From: "Soni L." <fakedme@...>
- Date: Tue, 24 Jan 2017 21:40:52 -0200
On 24/01/17 09:21 PM, Milo Christiansen wrote:
In Lua 5.3 "-3%5 == 2", according to my programmers calculator and
several other programing languages I tried this expression in, the
real result is -3.
On the other hand "5%-3 == 2", so maybe the result is correct, and the
bug is simply reversed operands if one is negative?
I discovered this because I am adding tests (based on the official Lua
tests) to my Go Lua VM, and one of the tests failed because the
incorrect result is coded into the test.
First of all your modulo is not my modulo (or at least this was a thing
back in C89... looks like it isn't in C99+).
Secondly, -3%5 == 2 because floor(-3/5) = -1, and (-1)*5+2 = -5+2 = -3.
See also:
https://www.microsoft.com/en-us/research/publication/division-and-modulus-for-computer-scientists/
http://hisham.hm/2015/04/18/a-small-practical-example-where-luas-behavior-is-better-than-cs/
https://github.com/sp614x/optifine/issues/288
etc. This is an endless argument.
Thirdly, in case you're still reading this for some unknown reason, RTFM
always applies:
http://www.lua.org/manual/5.3/manual.html#3.4.1
"Modulo is defined as the remainder of a division that rounds the
quotient towards minus infinity (floor division)."
--
Disclaimer: these emails may be made public at any given time, with or without reason. If you don't agree with this, DO NOT REPLY.