多くを呼び出すコードがあります
int myNumber = (int)(floatNumber);
これは合計で、CPU 時間の約 10% を占めます (プロファイラーによると)。そのままでもいいのですが、もっと早い方法はないかと思い、いろいろ探してみたらたまたま出てきました
http://devmaster.net/forums/topic/7804-fast-int-float-conversion-routines/ http://stereopsis.com/FPU.html
そこで指定された Real2Int() 関数を実装しようとしましたが、間違った結果が得られ、実行が遅くなります。double/float 値を整数に変換するためのより高速な実装があるのでしょうか、それとも SSE2 バージョンはこれほど高速でしょうか? 私が見つけたページは少し古いので、時代遅れになっている可能性があり、新しい STL の方が高速です。
現在の実装は次のことを行います。
013B1030 call _ftol2_sse (13B19A0h)
013B19A0 cmp dword ptr [___sse2_available (13B3378h)],0
013B19A7 je _ftol2 (13B19D6h)
013B19A9 push ebp
013B19AA mov ebp,esp
013B19AC sub esp,8
013B19AF and esp,0FFFFFFF8h
013B19B2 fstp qword ptr [esp]
013B19B5 cvttsd2si eax,mmword ptr [esp]
013B19BA leave
013B19BB ret
私が見つけた関連する質問:
どちらも古いか ARM ベースなので、これを行う現在の方法があるのだろうかと思います。最良の変換は起こらないものであると言われていますが、私はそれを持っている必要があるので、それは不可能です.