Basically, I need (-3) % 5
to be \"2\" instead of \"-3\". Python produces \"2\", but C++ produces \"-3\". Not sure how to produce \"2\" in C++. Thanks!
The quick & dirty way is to write
((x % divisor) + divisor) % divisor
For example, ((-3 % 5) + 5) % 5 == 2
. However this performs two separate divisions, and since divisions are one of the slowest arithmetic operations you might like one of these alternatives:
(1) General mod
for integer or floating point
int mod(int x, int divisor)
{
int m = x % divisor;
return m + (m < 0 ? divisor : 0);
}
template Num mod(Num x, Num divisor)
{
Num m = x % divisor;
return m + (m < 0 ? divisor : 0);
}
(2) Non-branching mod
for 32-bit integers
int mod(int x, int divisor)
{
int m = x % divisor;
return m + ((m >> 31) & divisor);
}
All this assumes that the divisor
is always positive.