我对SSE舍入有一个小问题。该代码是不言自明的,我试图在293.05694580中获得0.0001的计数,包括四舍五入(例如在5.21中有52个0.1s)...

#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中结果的顺序?
非常感谢,
丹尼尔

最佳答案

检查中间结果,不要假设

检查/设置sse舍入模式

用于计数的东西使用整数

关于c++ - SSE舍入精度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12880660/

10-09 13:09