考虑以下情况:
我有2个常数 MAX &的 MIN
我收到一个新号码 x
现在检查给定愤怒中的x是否会这样做:
if(x >= MIN && X <= MAX)
{
//Some logic
}
我想知道是否有更好的方式来谈论效率。我知道这是一项非常简单的任务,但我很想知道是否有更好的方法
答案 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,则可以跳过转换为无符号的转换。