ゆとりーなの日記

日記的な事を書いて行くと思はれる

ゲームに使う浮動小数

所謂floatとdoubleどっちが速いか論争です。大分前に書こうと思って放置してたネタです。私の記憶が正しければ放置したまままだ書いてなかったはずです。
よく言われるのが、最近はfloatよりdoubleの方が速いし精度も良いからdouble一択という話です。これは普通にアプリケーション組む分には正しそうです。実際VC++でデフォルトの設定でコンパイルすると、浮動小数はdouble演算の方に最適化されるので、floatは全てdoubleにキャストしてから演算するという何とも残念なことになります。大きいものにキャストするだけならいいと思うかもしれませんが、実はこのキャストのコストは結構大きいらしく、メモリ節約とかいってfloatを使いたくなるレベルにはありません。
ということはゲームでもdoubleを使った方がいいのかというと、実はそうでもありません。DirectXを使うと、演算速度を上げるためにで浮動小数の演算がfloatの方に最適化されるようになるからです。ハードには詳しくないのでよくは分からないのですが、やはりその気になれば精度が悪い方が良いのよりは速く計算出来るということなのでしょう。今度はdoubleが全てfloatにキャストされるようになります。精度も落ちるし全く意味がなくなります。というわけで実際DirectXがらみのメソッドは浮動小数をfloatの形で取ります。こうなるとこちらもfloatを使うようにした方がいいと思います。