FPUなにそれおいしいの?

関数のオーバーロードと構造体によるラッピング組み合わせて固定小数点型を作ろうとかやってみた、以下DMD0.162

double's time : 1187
fixed's time : 2547
int-fixed's time : 813

上のが普通のdouble、真ん中が構造体でintをラッパした固定小数、下がプログラム中に生で固定小数の処理を書き込んだもの。関数がインライン展開されてなくね?なにこのDMD、 ってことで-releaseオプションつけてもう一度

double's time : 1172
fixed's time : 1234
int-fixed's time : 797

行ってる計算は、 d1 = (d1 + d2) * d2; を一億回ループ。何とかdoubleと同じ程度。とは言っても理論的には下の値まで、たかだか*2/3程度の時間にしかならない。浮動小数ってっとものっそ重いって印象があったけど大して差がないなと実感。相変わらず同値判定には気をつける必要があるけど。


余談メモ:floatの計算速度はdoubleと全く同じ。realはdoubleより1〜2割ほど時間がかかる。