四種舍入方向:
向最接近的可表示的值;當有兩個最接近的可表示的值時首選“偶數”值;向負無窮大(向下);向正無窮大(向上)以及向0(截斷)。
說明:默認模式是最近舍入(Round to Nearest),它與四舍五入只有一點不同,對.5的舍入上,采用取偶數的方式。舉例比較如下: 例2:
最近舍入模式:Round(0.5) = 0; Round(1.5) = 2; Round(2.5) = 2; 四舍五入模式:Round(0.5) = 1; Round(1.5) = 2; Round(2.5) = 3;
主要理由:由於字長有限,浮點數能夠精確表示的數是有限的,因而也是離散的。在兩個可以精確表示的相鄰浮點數之間,必定存在無窮多實數是IEEE浮點數所無法精確表示的。如何用浮點數表示這些數,IEEE 754的方法是用距離該實數最近的浮點數來近似表示。至於中間值為什么取偶數而不是奇數,大師Knuth有一個例子說明偶數更好,於是一錘定音。
最近舍入模式在C/C++中沒有相應的函數,當然,IEEE754以及x86 FPU的默認舍入模式是最近舍入,也就是每次浮點計算結果都采用最近舍入模式,除非用程序顯式設置為其它三種舍入模式。 另外三種舍入模式,簡要說明。
向0(截斷)舍入:C/C++的類型轉換。(int) 1.324 = 1,(int) -1.324 = -1;
向負無窮大(向下)舍入:C/C++函數floor()。例如:floor(1.324) = 1,floor(-1.324) = -2。
向正無窮大(向上)舍入:C/C++函數ceil()。ceil(1.324) = 2。Ceil(-1.324) = -1;后兩種舍入方法據說是為了數值計算中的區間算法,但很少聽說哪個商業軟件使用區間算法。