lo puedes simplificar un poco, ya que realmente lo que hace esa "función" es calcular la función módulo N positivo de un número x, que devuelve un entero entre 0 y N-1 (no entre 0 y N como dice)
/*limitar rango ( limita los valores de x al rango [0, N] )*/
#define lr( x, N )( (x)<0 ? N+(x)%N : [B]( (x)>=N ? (x)%N : (x) )[/B] )
la parte en negrita se puede sustituir perfectamente por [B](x)%N[/B] ya que cuando x<N=>x%N=x, por lo que puedes quitar todos los if que hay después de los else
|