给定一个值n
,将它放在[min, max]
范围内的最有效方法是什么,如果它超出范围,它会重复超出范围?
我不知道这个术语,所以很难说出这个问题,但也许真相表可能有所帮助:
min = -2
和max = 3
input --> output
-6 0
-5 1
-4 2
-3 3
-2 -2
-1 -1
0 0
1 1
2 2
3 -2
4 -1
5 0
6 1
到目前为止我所拥有的是:
(value - min) % (max - min) + min;
哪个有效,但我担心模数运算符%
对于负输入是不可靠的,从我读过的内容(输出变为实现定义,使其无用,或者至少是不可移植的)
答案 0 :(得分:1)
就像这样:
min = VALUE;
max = VALUE;
x = (((x - min) + 1) % (max - min)) + min
当你重复最后一行代码
时,x将在min和max - 1之内编辑:
并匹配您的确切表:
output = (input - min) % (max - min) + min;
编辑2:
如果没有为负数定义模数:
if (input >= min)
output = (input - min) % (max - min) + min;
else
output = max - ((max - input) % (max - min));
答案 1 :(得分:0)
如果我理解你的要求,这是我能想到的最简单的等式:x % (max - min) + min
here你可以找到一些优化模运算符的方法。