У меня есть код, который вызывает много
int myNumber = (int)(floatNumber);
который занимает в общей сложности около 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
Связанные вопросы, которые я нашел:
Быстрое смещение к int преобразование и точность с плавающей запятой на ARM (iPhone 3GS / 4)
Какой самый быстрый способ конвертировать float в int на x86
Поскольку оба они старые или основаны на ARM, мне интересно, есть ли современные способы сделать это. Обратите внимание, что в нем говорится, что лучшее преобразование - это такое, которого не происходит, но оно мне нужно, поэтому это будет невозможно.