检查数字是否在给定范围内的有效方法

时间:2016-11-14 11:25:35

标签: c# algorithm

考虑以下情况:

  • 我有2个常数 MAX &的 MIN

  • 我收到一个新号码 x

现在检查给定愤怒中的x是否会这样做:

if(x >= MIN && X <= MAX)
{
   //Some logic
}

我想知道是否有更好的方式来谈论效率。我知道这是一项非常简单的任务,但我很想知道是否有更好的方法

3 个答案:

答案 0 :(得分:4)

首先,这是微观优化的一个典型案例,几乎从未得到回报。

话虽如此,唯一能够优化&#39;如果你事先知道其中一个比较极有可能产生false。如果有,那么首先进行比较,以利用 boolean short-circuit evaluation

if (x >= MIN && x <= MAX) { ... } // most efficient if x >= MIN is hardly ever true

if (x <= MAX && x >= MIN) { ... } // most efficient if x <= MAX is hardly ever true

如果两种比较都不可预测,那么我们都浪费了时间......

答案 1 :(得分:1)

如果您知道您的最小值将为0(您想要排除所有负数),则可以将if语句减少为

if (max <= (uint)x)

答案 2 :(得分:-1)

另一种解决方案:

int bound(int a, int x, int b)
{

    return (unsigned) (x - a) <= b - a;     

}

我已经在一个循环(900000000次迭代)中对它进行了测试,如果x在界限范围内,它比天真地快一点,当x超出范围时,它会快20%左右。
如果您将它用作数组索引检查并且可以假设,索引总是大于0,则可以跳过转换为无符号的转换。