0
をチャイルズ:効率が選んだ、私は次のコードを持っている
NodePtr bestChild = (diff < 0) ? node->child1 : node->child2;
NodePtr otherChild = (diff < 0) ? node->child2 : node->child1;
をbestChildとotherChild変数を設定するための任意のより効率的な方法はありますか?
注:diff
はfloat
であり、比較はかなり長いです。私は1つの比較をしないが、私はそれが最良の方法であることはよく分からない
NodePtr bestChild = (diff < 0) ? node->child1 : node->child2;
NodePtr otherChild = (bestChild == node->child2) ? node->child1 : node->child2;
この場合:
はまた、私は次の解決方法を試してみました。
比較フロートが0になっていることがボトルネックですか?私はブランチングそのものが[分岐予測ミス](http://en.wikipedia.org/wiki/Branch_misprediction)のためにはるかに大きな影響を及ぼすことを期待していますが、私は実際にこの問題について専門家ではありません。 – amit
はい、私は比較が高価な操作であると確信していますが、分岐を避けることが可能であれば、それは素晴らしいでしょう。 – Alex
この操作を高速化できますか?私は、[IEEE754-2008](http://en.wikipedia.org/wiki/Floating_point#Internal_representation)のために、私が正しく覚えていれば(もう一度専門家ではない)、記号は単なるMSBであるので、実際にボトルネックになっている場合はハッキングするか、それが不可能な特殊な表現ですか? – amit