JavaScript % (modulo) gives a negative result for negative numbers
Number.prototype.mod = function(n) { return ((this%n)+n)%n;};
Taken from this article: The JavaScript Modulo Bug
Using Number.prototype
is SLOW, because each time you use the prototype method your number is wrapped in an Object
. Instead of this:
Number.prototype.mod = function(n) { return ((this % n) + n) % n;}
Use:
function mod(n, m) { return ((n % m) + m) % m;}
See: http://jsperf.com/negative-modulo/2
~97% faster than using prototype. If performance is of importance to you of course..
The %
operator in JavaScript is the remainder operator, not the modulo operator (the main difference being in how negative numbers are treated):
-1 % 8 // -1, not 7