[解決済み] 浮動小数点数除算と浮動小数点数乗算の比較
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の中には、逆数近似を行い、それを掛けることで除算を高速化するものがあります。これはそれほど正確ではありませんが、いくらか速くなります。
関連
-
[解決済み] 非常に基本的なC++プログラムの問題 - バイナリ式への無効なオペランド
-
[解決済み】指定範囲内の乱数で配列を埋める(C++)
-
[解決済み】C++ - 適切なデフォルトコンストラクタがない [重複]。
-
[解決済み] 変数サイズのオブジェクトが初期化されないことがある c++
-
[解決済み】'std::cout'への未定義の参照
-
[解決済み] 除算を強制的に浮動小数点にするにはどうしたらいいですか?除算は0に切り捨てられ続けますか?
-
[解決済み] JavaScriptで浮動小数点数の精度を扱うには?
-
[解決済み】浮動小数点値の比較はどのくらい危険か?
-
[解決済み】bashで浮動小数点演算を使用するには?
-
[解決済み】androidのリソース/値に浮動小数点値を追加する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】関数名の前に期待されるイニシャライザー
-
[解決済み】デバッグアサーションに失敗しました。C++のベクトル添え字が範囲外
-
[解決済み] 既に.objで定義されている-二重包含はない
-
[解決済み】cc1plus:エラー:g++で認識されないコマンドラインオプション"-std=c++11"
-
[解決済み】リンカーエラーです。"リンカ入力ファイルはリンクが行われていないため未使用"、そのファイル内の関数への未定義参照
-
[解決済み】エラー:free(): 次のサイズが無効です(fast)。
-
[解決済み】演算子のオーバーロード C++; <<操作のパラメータが多すぎる
-
[解決済み] 警告:暗黙の定数変換でのオーバーフロー
-
[解決済み】c++で.txtファイルから2次元の配列に読み込む
-
[解決済み] なぜGCCはa*a*a*a*aを(a*a*a)*(a*a*a)に最適化しないのでしょうか?