2016-06-14 33 views
0

給定一個值n,將其置於[min, max]範圍內的最有效方法是什麼?如果它超出範圍,它將在整個範圍內重複?最有效的方法來「剪輯」一個值來重複一個範圍?

我不知道這個術語,所以很難短語的問題,但也許事實表可能有所幫助:

min = -2max = 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; 

其中一期工程,但我擔心的是模運算符%是不可靠的負輸入,從ω帽子我讀過(輸出成爲實現定義,使之無用,或至少不可移植)

+1

爲什麼不取絕對值的模​​數? –

+0

顯示你的嘗試。 –

+0

這是你正在尋找的方程嗎? 'X%(最大值 - 最小值)+ min' – Zohar81

回答

1

它是這樣的:

min = VALUE; 
max = VALUE; 
x = (((x - min) + 1) % (max - min)) + min 

這裏x是裏面最小和最大 - 1,當你重複代碼最後一行

編輯:

,並滿足您的具體表:

output = (input - min) % (max - min) + min; 

編輯2:

如果模數不爲負數定義:

if (input >= min) 
    output = (input - min) % (max - min) + min; 
else 
    output = max - ((max - input) % (max - min)); 
+0

如果'(input - min)'產生負數,這個工作是否會奏效?我讀過C/C++,負數的模數不是由語言定義的(結果的符號可能是負數) –

+0

我已更新答案以匹配此案例 – ammcom

0

如果我理解正確的話你的要求,這裏是最簡單的公式我能想到的:x % (max - min) + min

而且here你可以找到一些優化模運算符的方法。

相關問題