2015-06-27 16 views
0

在下面的代碼,方法A從方法B.不同不同的結果有人可以解釋爲什麼 輪_mm_cvt_ss2si到偶數時小數部分恰好爲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

Round-to-even是IEEE的默認值。 – Mysticial

+1

當要舍入的數字恰好爲中途時,MXCSR寄存器中的舍入模式開始起作用。這適用於普通的FP操作(添加,乘法,..),我認爲它也適用於這個操作。默認模式是將'中途'數字四捨五入到最接近的偶數結果。我無法找到有關它的實際工作情況的好信息,但是您可以嘗試更改這些位。 – greggo

回答

1

請參閱評論的問題的答案。

如果您希望在一種情況下使用特定舍入模式,而無需更改MXCSR,則可以使用SSE4.1 ROUNDPD/ROUNDPS。 (這不會做的整數轉換,只是舍入FP值的整數。)

__m128d _mm_round_pd (__m128d a, int rounding) 

見你可以通過一個 ARG什麼標誌的手冊。