2

我几乎不好意思问这个问题,因为它可能非常明显——但我看不出有一条出路,我怀疑有一条。

我有一个变量,我需要从中添加/减去值 - 但我想将它保持在一个值范围内,在任一端循环 - 例如

范围是 0-3,所以值是 0,1,2,3,0,1,2,3 - 这就是

x = (x + val) MOD 4

然而,当 val 为负时,我们应该看到 0,3,2,1,0,3,2,1 并且解决方案远没有那么优雅

x = (x + val) MOD 4
if (x < 0) x = 4 + x;

这行得通,但它很笨重,我不禁想到可能有一个“单线”解决方案 - 但如果我能想到它,我该死的?:)

准备尴尬

4

1 回答 1

2

正如 TaZ 所指出的,大多数“模”运算符实际上是余数运算符,它们只能像x+val >= 0.

在 c++ 中,如在此处找到(进行了一些修改),您可以像这样定义一个更“数学正确”的模数

double mod(double x, double y) { return y!=0 ? x-floor(x/y)*y : x; }   

(也许也制作一个整数版本),这样

x = mod(x+val,4); 

适用于正面和负面x+val

于 2012-10-17T13:14:34.017 回答