我几乎很尴尬地问这个问题,因为它可能非常明显 - 但是我看不出这种方法,并且怀疑有一条方法。
我有一个我需要添加/减去值的变量 - 但是我希望将它保持在一个值范围内,在两端循环 - 例如。
范围是0-3,因此值为0,1,2,3,0,1,2,3 - 这就是
x = (x + val) MOD 4
当val为负时,我们应该看到0,3,2,1,0,3,2,1并且解决方案是FAR不那么优雅
x = (x + val) MOD 4
if (x < 0) x = 4 + x;
这很有效,但它很笨重,我不禁想到可能有一个“一线”的解决方案 - 但如果我能想到它,我该死的? :)
准备尴尬
答案 0 :(得分:2)
如TaZ所示,大多数“模数”运算符实际上是余数运算符,它只对x+val >= 0
的“数学模数”起作用。
在c ++中,如找到here(经过一些修改),你可以定义一个更“数学上正确”的模数,如此
double mod(double x, double y) { return y!=0 ? x-floor(x/y)*y : x; }
(也许也是一个整数版本),这样
x = mod(x+val,4);
适用于正面和负面x+val
。