四種捨入方向:
向最接近的可表示的值;當有兩個最接近的可表示的值時首選「偶數」值;向負無窮大(向下);向正無窮大(向上)以及向0(截斷)。
說明:捨入模式也是比較容易引起誤解的地方之一。我們最熟悉的是四捨五入模式,但是,ieee 754標準根本不支援,它的預設模式是最近捨入(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的方法是用距離該實數最近的浮點數來近似表示。但是,對於.5,它到0和1的距離是一樣近,偏向誰都不合適,四捨五入模式取1,雖然銀行在計算利息時,願意多給0.5分錢,但是,它並不合理。例如:如果在求和計算中使用四捨五入,一直算下去,誤差有可能越來越大。機會均等才公平,也就是向上和向下各佔一半才合理,在大量計算中,從統計角度來看,高一位分別是偶數和奇數的概率正好是50% : 50%。至於為什麼取偶數而不是奇數,大師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;
後兩種捨入方法據說是為了數值計算中的區間演算法,但很少聽說哪個商業軟體使用區間演算法。
IEEE 754四種捨入方向
四種捨入方向 當有兩個最接近的可表示的值時首選 偶數 值,這與我們常見的 四捨五入 只有一點不同,對.5的捨入上,採用取偶數的方式。如 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 754 浮點數的四種捨入方式
四種捨入方向 向最接近的可表示的值 當有兩個最接近的可表示的值時首選 偶數 值 向負無窮大 向下 向正無窮大 向上 以及向0 截斷 說明 預設模式是最近捨入 round to nearest 它與四捨五入只有一點不同,對.5的捨入上,採用取偶數的方式。舉例比較如下 例2 最近捨入模式 round 0...
IEEE754浮點數 向偶數捨入
我們大家都知道,浮點數的標準是ieee754。關於ieee754格式這裡不講了,主要是要講一下它的預設捨入方式。因為表示方法限制了浮點數的範圍和精度,所以使用浮點數只能近似地表示實數運算。而此時就不得不考慮捨入的問題了。捨入的原則是找到最接近的匹配值。為此,ieee754定義了四種不同的捨入方式 下...