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