我有很多调用的代码
int myNumber = (int)(floatNumber);
这总共占用了我大约 10% 的 CPU 时间(根据分析器)。虽然我可以把它留在那里,但我想知道是否有更快的选择,所以我试着四处寻找,偶然发现
http://devmaster.net/forums/topic/7804-fast-int-float-conversion-routines/ http://stereopsis.com/FPU.html
我尝试实现那里给出的 Real2Int() 函数,但它给了我错误的结果,并且运行速度较慢。现在我想知道,是否有更快的实现将双精度/浮点值设置为整数,或者 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 的,我想知道是否有当前的方法来做到这一点。请注意,它说最好的转换是不会发生的,但我需要它,所以这是不可能的。