48

私は実際に何かを最適化しようとしているわけではありませんが、プログラマーから常にこれを聞いていたのを覚えています。結局のところ、彼らはこのことを知っているはずです。

しかし、なぜ除算は実際には乗算よりも遅いのでしょうか? 割り算は単なる美化された引き算であり、掛け算は美化された足し算ではありませんか? したがって、数学的には、どちらの方法でも計算コストが非常に異なる理由がわかりません。

以前に尋ねた他のプログラマーから聞いた「理由」ではなく、この理由/原因を明確にしてください。

4

2 に答える 2

59

CPU のALU (Arithmetic-Logic Unit) は、ハードウェアで実装されていますが、アルゴリズムを実行します。古典的な乗算アルゴリズムには、ウォレス ツリーダダ ツリーが含まれます。詳細については、こちらをご覧ください。新しいプロセッサでは、より高度な技術を利用できます。一般に、プロセッサは、必要なクロック サイクルを最小限に抑えるために、ビット ペア操作を並列化しようとします。乗算アルゴリズムは非常に効果的に並列化できます (ただし、より多くのトランジスタが必要です)。

除算アルゴリズムは効率的に並列化できません。最も効率的な除算アルゴリズムは非常に複雑です ( Pentium FDIV バグは複雑さのレベルを示しています)。一般に、ビットごとにより多くのクロック サイクルが必要です。より技術的な詳細を知りたい場合は、Intel からのすばらしい説明がありますIntel は実際に除算アルゴリズムの特許を取得しています。

于 2013-06-28T18:26:59.600 に答える