1. ホーム
  2. c++

[解決済み] 浮動小数点数除算と浮動小数点数乗算の比較

2023-01-23 08:34:11

質問

をコーディングすることで、(マイクロ最適化以外の)性能向上はあるのでしょうか?

float f1 = 200f / 2

と比較して

float f2 = 200f * 0.5

私の教授は数年前、浮動小数点数の除算は浮動小数点数の乗算よりも遅いと言いましたが、その理由を詳しく説明することはありませんでした。

この発言は、現代の PC アーキテクチャでも通用するのでしょうか?

更新1

コメントについてですが、この件についてもご検討ください。

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 コメントから引用しています。

[除算が乗算よりもハードウェア的に非常に複雑である原因となるアルゴリズム/アーキテクチャの要件は何なのか、知りたいです。

どのように解決するのですか?

はい、多くのCPUは乗算を1~2クロックで実行できますが、除算は常に時間がかかります(ただし、FP除算は整数除算より高速な場合があります)。

を見ると この答え を見ると、除算が24サイクルを超えることがあることがわかります。

なぜ除算は乗算より時間がかかるのでしょうか。小学校の頃を思い出すと、掛け算は基本的に多くの足し算を同時に行うことができることを思い出すかもしれません。除算は、同時に実行できない引き算の繰り返しが必要なため、時間がかかるのです。実は、FPの中には、逆数近似を行い、それを掛けることで除算を高速化するものがあります。これはそれほど正確ではありませんが、いくらか速くなります。