_mm_cvt_ss2si给出的结果与简单舍入不同

时间:2015-06-27 23:23:48

标签: c sse rounding

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

1 个答案:

答案 0 :(得分:1)

请参阅有关问题答案的评论。

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

__m128d _mm_round_pd (__m128d a, int rounding)

请参阅手册,了解可以作为rounding arg。

传递的标志