加算演算は乗算演算よりも簡単です。しかし、との実行時間に違いは123456 * 3
あり123456 + 123456 + 123456
ますか?
掛け算はどのように正確に機能しますか?
乗算アルゴリズムはプログラミング言語によって異なりますか?
低レベル(つまり、アセンブラコード)での乗算はどのように見えますか?
加算演算は乗算演算よりも簡単です。しかし、との実行時間に違いは123456 * 3
あり123456 + 123456 + 123456
ますか?
掛け算はどのように正確に機能しますか?
乗算アルゴリズムはプログラミング言語によって異なりますか?
低レベル(つまり、アセンブラコード)での乗算はどのように見えますか?
x86アセンブリ言語では、加算および乗算演算は次のようになります。
ADD [operand1]、[operand2]ここで、operand1はレジスタ、operand 2はレジスタ、定数、またはメモリアドレスです。プロセッサモデルとoperand2タイプに応じて、1〜7クロックかかります。
MUL [オペランド];符号なし乗算の場合、アキュムレータレジスタ(AL、AX、EAX)の内容に、レジスタまたはメモリアドレスのオペランドを乗算します。また、オペランドとプロセッサモデルのタイプによっては、12〜38クロックかかります。符号付き乗算を実行するバージョンのMULもあります。
これはコアアセンブリ言語であり、SSEなどの最新のSIMD拡張機能はありません。前述のように、実際の速度はコンパイラの最適化に依存します。
スマートコンパイラは、123456 + 123456+123456を3*123456に置き換える可能性があります
時期尚早の最適化はすべての悪の根源です:)
コンパイラに与えるものは、最適化ステップの後に返されるものではないため、理論的には加算は高速ですが、実際の状況では、結果がどうなるかを確信することはできません(SSEまたはコンパイラが使用する可能性のある他のプロセッサ命令)。