前にやったfloatとdoubleの演算速度比較エントリの訂正エントリになります。
たまたま見つけたC++プログラミング日記様のこのエントリ
「double型はfloat型より高速」といった説をたま見かけますが実際のところは同じ命令で処理されているため計算速度に違いはありません。ただし浮動小数点モデル/fp:preciseを使用した場合は単精度を精密に再現するため著しくパフォーマンスが低下します。
この/fp:preciseがVSではデフォルトで選択されるので、floatが遅くなっている、ということだそうです。
早速私も試してみた。
環境:
Core2Duo E6600(2.2GHz) / WinXP Home / VC++2010EE
単純ループ(10,000 * 10,000)で測定
前回との違いはVC++2008EE→VC++2010EEになっただけ。
浮動小数点モデル/fp:precise
対象 | 加算 | 減算 | 乗算 | 除算 |
---|---|---|---|---|
float | 382 | 378 | 463 | 1,597 |
double | 126 | 125 | 211 | 1,347 |
浮動小数点モデル/fp:fast
対象 | 加算 | 減算 | 乗算 | 除算 |
---|---|---|---|---|
float | 126 | 130 | 212 | 210 |
double | 126 | 126 | 210 | 212 |
すげぇ!なんだこれ。
floatとdoubleの差が無いっていうか、除算と乗算が同じな事に驚いた。
さっきの記事にあるように、メモリアクセスの点でfloatのほうが有利であるらしいし、DirectXでゲーム作る際はよほど精度が必要でないかぎりdoubleの出番は無いってことですね。
前回のエントリとは逆の結末です。
でも悩む必要がなくなってよかった。
C++プログラミング日記様の記事は色々勉強になるので今後も参考にさせてもらおう。