私はこの質問が非常に些細かもしれませんし、違いが小さいので質問する価値がないことは知っていますが、とにかく不思議です。数値がソートされていない2桁の間隔に含まれているかどうかを確認する最も効率的な方法は?
3つのfloat、 'a'、 'b'、 'number'を考えてみましょう。 'number'が境界 'a'と 'b'の間隔内に含まれているかどうかを知りたい。
'a'と 'b'は間隔の制限ですが、 'a'は 'b'より小さくてもよく、逆も同様です。
どの機能が最も速い結果をもたらすか?
1)
bool isNumberInInterval(float a, float b, float number)
{
if (a < b)
{
return ((a <= number) && (number <= b));
}
else
{
return ((b <= number) && (number <= a));
}
}
2)
bool isNumberInInterval(float a, float b, float number)
{
return (((b <= number) && (number <= a)) || ((a <= number) && (number <= b)));
}
_Which機能は、最速の結果を与えるだろう_あなたはそれぞれのケースをプロファイリングしてみてくださいましたか? –
このコードはブランチでいっぱいですので、あなたのコンパイラが本当にうまくいかない限り、おそらく吸うでしょう。良いパフォーマンスが必要な場合は、関数を呼び出すたびにすべての数値がランダムであるかどうかを知る必要があります(信頼できないのでブランチを完全に作成する)か、そうでない場合は分岐予測子を最適化しようとします。たとえば、 'a'と' b'がいくつかの呼び出しで同じままである場合、最初の方法はおそらく良いでしょう。 – meneldal
スマーフ速く。コンパイラが最適化を完了した後であれば、その差はごくわずかです。最初の方が読みやすくなります – user4581301