浮動小数点演算に関しては、プロセッサのパフォーマンスは非対称です。多くの場合、乗算には数クロック サイクルしかかかりませんが、除算には大幅に時間がかかる場合があります。この不一致は、次の例で示されているように、コードの効率に影響を与える可能性があります。
float f1 = 200f / 2; float f2 = 200f * 0.5;
多くの場合、0.5 を掛ける方が 2 で割るよりもわずかに高速になります。この違いは、ハードウェアでの除算の複雑さによって発生します。 .
割り算には、long と同じように、減算の反復プロセスが必要です。小学校の部類。逆に、乗算は主に加算を同時に実行できるため、演算が高速になります。
除算によるパフォーマンスの低下を改善するために、一部の CPU は逆数近似を採用してプロセスを高速化します。この方法は実際の除算ほど正確ではありませんが、速度を大幅に向上させることができます。
パフォーマンスの違いは、次のループでより顕著になります:
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 }
ここで、ループ内の除算演算は大幅なオーバーヘッドの原因となるため、0.5 による乗算の使用が望ましいことになります。
浮動小数点除算のハードウェア制限を理解することは、プログラマーがコードのパフォーマンスを最適化するのに役立ちます。多くの場合、特にループでは、定数値による乗算を利用すると、直接除算よりも大幅に高速化できます。
以上が浮動小数点演算では乗算が除算よりも速いことが多いのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。