我对 SSE 舍入有一个小问题。该代码是不言自明的,我试图在 293.05694580 中获得 0.0001 的计数,包括一些舍入(例如,5.21 中有 52 个 0.1)...
#include <xmmintrin.h>
#include <emmintrin.h>
int main(void)
{
float val = (float) 293.05694580;
float tickSize = (float) 0.0001;
__m128 _val = _mm_set_ps1( val );
__m128 _shift = _mm_set_ps1( 1 / tickSize );
/* 293.0569480 * 10000 should be 2930569.480 */
__m128 _mul = _mm_mul_ps(_val, _shift);
/* Rounding 2930569.480 should get 2930569, but returns 2930570 instead. Why? */
__m128i _ticks = _mm_cvtps_epi32( _mul );
}
最后,如何恢复 _ticks 中结果的顺序?非常感谢,丹尼尔