我对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/