In PICO-8, the % operator causes numbers to wrap like this:

print(-1 % 10) -- 9 print(0 % 10) -- 0 print(1 % 10) -- 1 |

As I understand it, to compute x % y, you take x and add/subtract y from it, making it bigger if it's negative and smaller if it's too big, until x >= 0 and x < y. **As long as y is not zero, the result should always be positive.**

Well, -32768 % y is negative for some values of y:

print(-32768 % 20000) -- negative result: -12768 |

After trying a bunch of values for y, the rules look... complicated:

- If -0x4000 <= y
**and**y <= 0x4000, then x % y is positive 32768**minus**abs(y) a bunch of times, until it's in the proper range. - If y < -0x4000
**or**0x4000 > y, then x % y is -32768**plus**abs(y) multiple times, but not enough times to make the number non-negative.

Is this a bug? This doesn't seem like intended (or useful) behavior to me.

P#67473 2019-09-10 05:38