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 の結果の順序を元に戻すにはどうすればよいですか? どうもありがとう、ダニエル