钳制整数的最快方法
Fastest Way To Clamp an Integer
我不确定 "clamping" 是否是正确的术语,但我真的不知道还能用什么称呼它。假设我们想将一个整数限制在某个任意范围内,比如 0-50。这可以通过使用 if 语句测试当前值并相应地分配最大值或最小值来轻松实现。但是,使 Integer 保持最大值或最小值的最快方法是什么?
就像
一样简单
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,所以您不太可能实施得更好。
如果你想要速度,你应该让 CPU 的分支预测器满意。因此,使“快乐路径”return'n'(调用'Clamp'的最可能结果):
public static int Clamp( int n, int min, int max ) {
if( value < min ) return min;
if( value > max ) return max;
return n;
}
Math.Clamp
自 .NET Core 2.0 以来引入,因此您可以直接使用它。应该是目前最快的方法
Math.Clamp(12, 0, 50)
我不确定 "clamping" 是否是正确的术语,但我真的不知道还能用什么称呼它。假设我们想将一个整数限制在某个任意范围内,比如 0-50。这可以通过使用 if 语句测试当前值并相应地分配最大值或最小值来轻松实现。但是,使 Integer 保持最大值或最小值的最快方法是什么?
就像
一样简单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,所以您不太可能实施得更好。
如果你想要速度,你应该让 CPU 的分支预测器满意。因此,使“快乐路径”return'n'(调用'Clamp'的最可能结果):
public static int Clamp( int n, int min, int max ) {
if( value < min ) return min;
if( value > max ) return max;
return n;
}
Math.Clamp
自 .NET Core 2.0 以来引入,因此您可以直接使用它。应该是目前最快的方法
Math.Clamp(12, 0, 50)