_ftol()との死闘
この前の続き。
結論から言うと、かなり速くなります。
_ftol()の代わりに何をするかと思ったら、
単純に「fistp」を単品で使うようです。*1
これで万事解決…かと思いきや、
そうは行かない…(汗)
どうもfistp単体だと精度が(結構)甘いようで、
値のブレ具合がヒドイです。
(「3.3505...」になるはずが「3.3563...」とか)
…んー、1/1000の位あたりから怪しくなってきて、
1/10000あたりからは基本的に当てにならない…かもしれない(汗)
なので、
精度が欲しい場面では絶対に使ってはいけない。
ただ、本当にかなり速くなるので、
明らかに「小数->整数キャスト」が枷になっている場合は
考慮する価値は十分にあると思う。
…で、さらに調べてみると、
こんなことが書いてあった。
試しに
こんな感じの使い方を試してみたら、
int _fastcall ftol_quick( double d )
{
int i;
__asm
{
fld d
fistp i;
}
return i;
}
double d = 1.25;
// int i = (int)d;
int i = ftol_quick( d );
…本当に早くなった。
……ほんの少しだけど(苦笑)
(1.1倍くらい?…どう甘く見ても1.5倍はない)
…どれだけ、お節介なんだ…ftol()…。