在下面的代码中,方法A与方法B不同。有人可以解释 当小数部分正好为0.5时,为什么_mm_cvt_ss2si会向偶数舍入?
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));
答案 0 :(得分:1)
请参阅有关问题答案的评论。
如果您想在一种情况下使用特定的舍入模式而不更改MXCSR,则可以使用SSE4.1 ROUNDPD / ROUNDPS
。 (这不进行整数转换,只是将FP值舍入为整数。)
__m128d _mm_round_pd (__m128d a, int rounding)
请参阅手册,了解可以作为rounding
arg。