2011-09-18 7 views
5

これは奇妙な質問のように聞こえるかもしれませんが、興味深いものです。私はiOSをコーディングしており、速くなるにつれて値を分割するのではなく、常に乗算することが最善であると言われています。分割は乗算よりも遅いですか?

私が知っているプロセッサーはおそらくこれを非問題にしていますが、私の好奇心が私のほうを良くしてくれています。誰かが私にとってこれについていくつかの光を当てることができるのだろうかと思います。

SO .....私の質問はこれです -
は次のとおりです。より

player.position = ccp(player.contentSize.width/2, winSize.height/2); 

遅く:

player.position = ccp(player.contentSize.width * 0.5, winSize.height * 0.5); 
+1

'player.contentSize.width'と' winSize.height'が浮動小数点数でない限り、それらは同じではありません。 – icktoofay

+1

'player.contentSize.width'と' winSize.height'が整数の場合、速度のビットシフトはどうですか? –

+2

このコードは、パフォーマンスクリティカルなループにはほとんどないと思いますので、分けても乗算しても関係ありません。明確で簡潔で堅牢なコードを書くことに集中し、本当に必要なときだけパフォーマンスについて心配してください。 –

答えて

4

ほとんどのプロセッサ部門では、同じデータタイプの場合、乗算よりも遅いです。あなたの例では、乗算は浮動小数点演算です。widthheightが整数型の場合、結果は非常に異なる可能性があり、プロセッサとコンパイラの両方に依存する可能性があります。

しかし、ほとんどのコンパイラ(確かにGCC)は、あなたの例のように2のべき乗の定数を、より効率的な右シフトに変換します。それは一般に乗算または除算よりも速いでしょう。

7

はい、割り算は掛け算より通常ずっと遅いです。

ただし、リテラル(またはコンパイル時に定数と判断できるもの)で除算する場合、コンパイラは通常、除算を最適化します。

+1

"リテラルのような"とは、2のべき乗を意味します。 – UncleO

+1

コンパイラは、3,5、およびその他の小さな数値で除算を最適化することもできます。浮動小数点モードが緩和されると、FP除算は逆数の乗算に置き換えられます。 – Mysticial

0

いずれかの乗算を使用することができれば、ある程度まで乗算を並列で行うことができます。

関連する問題