浮動小数点除算と乗算のパフォーマンスへの影響
浮動小数点除算は乗算よりも計算が遅いと述べられています。この記事では、この主張を詳しく掘り下げ、現代の PC アーキテクチャにおけるその妥当性を検証します。
浮動小数点演算における除算は、時間計算量の点で乗算を上回ることがよくあります。通常、CPU は乗算を 1 ~ 2 クロック サイクル以内に実行しますが、除算にはより長時間のプロセスが必要です。
パフォーマンスのギャップを説明するには、次のコード スニペットを考慮してください。
float f1 = 200f / 2; // vs. float f2 = 200f * 0.5;
多くの場合、 f2 は、除算よりも乗算の固有の効率により、より速く計算されます。
このパフォーマンスの違いは、より複雑な演算にも現れます。たとえば、次のループ:
float f1; float f2 = 2; float f3 = 3; for(i = 0; i < 1e8; i++) { f1 = (i * f2 + i / f3) * 0.5; //or divide by 2.0f, respectively }
は、除算には反復ステップが必要になるため、2.0f で除算する代わりに 0.5 で乗算を使用すると、より効率的に実行されます。
パフォーマンスの大きな違いは、分割の構造上の複雑さ。複数の加算に変換することで並列化できる乗算とは異なり、除算には反復的な減算が含まれるため、並列化が容易ではありません。それを補うために、一部の浮動小数点ユニットは逆数近似と乗算を採用し、効率性のために精度をある程度犠牲にしています。
以上が最新の CPU では、浮動小数点除算は本当に乗算より遅いのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。