钳制整数的最快方法

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)