在下面的代码中,方法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));
最佳答案
请参阅评论以获取问题的答案。
如果您希望在某种情况下使用特定的舍入模式,而不更改 MXCSR,则可以使用 SSE4.1 ROUNDPD/ROUNDPS
。 (这不会进行整数转换,只是将 FP 值舍入为整数。)
__m128d _mm_round_pd (__m128d a, int rounding)
请参阅手册,了解哪些标志可以作为舍入
参数传递。
关于c - _mm_cvt_ss2si 给出的结果与简单舍入不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31094556/