# Euclidean (floored) modulo (mod, %) operator for C, C++

## Alec Jacobson

## June 24, 2010

Once again, I was gotcha-ed by the sign of the mod operator in C++. I did `-1%n`

, hoping to get `n-1`

but instead got `-1`

.
Here's a little C/C++ function (you could even macro/inline it) to give the "true" (Euclidean) modulo:
```
static int mod(int a, int base){
return ((a % base) + base) % base;
}
```

**Update:** So the above runs about twice as slow as just issuing `%`

once, which is to be expected since `%`

is called twice (guess `+`

is pretty cheap in comparison). If half the time `a`

will be positive and half the time negative then a average speed up of 1.5x over the above code can be achieved with the following:
```
static int mod(int a, int base){
return (a < 0 ? ((a % base) + base) % base : a % base);
}
```

But it is still slower if you already know for sure that `a`

is not negative.
**Update:** It's worth noting, as it was noted in the comments, that what I describe above is only correct if the base is positive. If the base is negative than euclidean modulo allows a negative result and must be defined accordingly.