我不确定是否"夹紧"这是正确的术语,但我真的不知道还有什么可以称之为。假设我们想要将整数限制在某个任意范围内,如0-50。这可以通过使用if语句测试当前值并相应地分配最大值或最小值来轻松实现。但是,将整数保持在最大值或最小值的最快方法是什么?
答案 0 :(得分:4)
一样简单
var normalized = Math.Min(50, Math.Max(0, value));
截至表现:
public static int Max(int val1, int val2) {
return (val1>=val2)?val1:val2;
}
这就是它的implemented in .NET,所以你不太可能更好地实现它。
答案 1 :(得分:0)
如果要提高速度,则应保持CPU的分支预测器满意。因此,使“幸福之路”返回“ n”(调用“钳位”的最可能结果):
public static int Clamp( this int n, int min, int max ) => (n >= min) ? (n <= max) ? n : max : min;
如果编译器是愚蠢的,并且决定为三元数发出次优的IL(我没有检查过),那么您可能必须使用一对if语句重写它,再次保留“ happy path”以返回'n':
public static int Clamp( this int n, int min, int max ) {
if( value < min ) return min;
if( value > max ) return max;
return value;
}