D
dr.oktopus
Ok, today I seems to be a little dumb.
What I have to do is to make mod operator (m % n) work even
if m is a negative number.
This is what I mean:
given n = 5
7 became 2
6 .. 1
5 .. 0
4 .. 4
3 .. 3
2 .. 2
1 .. 1
0 .. 0
-1 .. 4
-2 .. 3
-3 .. 2
-4 .. 1
-5 .. 0
-6 .. 4
-7 .. 3
I think that, for a operation like m % n, it could be:
unsigned my_mod (int m, unsigned n)
{
unsigned um;
if (m < 0) {
um = -m;
return n - um % n;
}
return m % n;
}
but, if m is INT_MIN, for example, its two complement (um)
is 0, right? So, my_mod returns n (that is wrong).
What's the right (and smart) way?
What I have to do is to make mod operator (m % n) work even
if m is a negative number.
This is what I mean:
given n = 5
7 became 2
6 .. 1
5 .. 0
4 .. 4
3 .. 3
2 .. 2
1 .. 1
0 .. 0
-1 .. 4
-2 .. 3
-3 .. 2
-4 .. 1
-5 .. 0
-6 .. 4
-7 .. 3
I think that, for a operation like m % n, it could be:
unsigned my_mod (int m, unsigned n)
{
unsigned um;
if (m < 0) {
um = -m;
return n - um % n;
}
return m % n;
}
but, if m is INT_MIN, for example, its two complement (um)
is 0, right? So, my_mod returns n (that is wrong).
What's the right (and smart) way?