在下面的代码中,方法A与方法B不同。有人可以解释一下吗
为什么_mm_cvt_ss2si在小数部分正好为0.5时四舍五入为偶数?

float f;

// rounding method  A
_mm_cvt_ss2si(_mm_load_ss(&f));

// rounding method B
(long)((f>0.0f) ? (f + 0.5f):(f -0.5f));

最佳答案

请参阅评论以获取问题的答案。

如果在某种情况下需要特定的舍入模式,而无需更改MXCSR,则可以使用SSE4.1 ROUNDPD / ROUNDPS。 (这不进行整数转换,只是将FP值舍入为整数。)

__m128d _mm_round_pd (__m128d a, int rounding)


请参阅手册以获取可以作为rounding arg传递的标志。

关于c - _mm_cvt_ss2si提供的结果与简单的舍入不同,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31094556/

10-13 06:41