在下面的代码中,方法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/