• 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.

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.

```