向偶數捨入

2021-10-02 05:28:07 字數 1217 閱讀 2482

我說的可能比較囉嗦,但看完相信都能理解了

現在計算機中的浮點表示及運算普遍採用ieee 754標準,該標準預設的捨入方式是向偶數捨入(round-to-even),也稱為向最接近的值捨入(round-to-nearest)。

向偶數捨入有兩個原則,一是向最接近的值捨入,再乙個是當處在"中間值"時看有效數值是否是偶數,如果是偶數則直接捨去不進製,如果是奇數則進製。

先拿幾個十進位制的舉例,再看二進位制的。比如以下幾個十進位制都要求捨入到個位:1.4和1.6,所謂的"中間值"就是,比如1.4,因為是捨入到個位,所以它處在1和2之間,那中間值就是(1+2)/2=1.5。那麼1.4就不是中間值,根據向最接近的值捨入的原則1.4跟1更近,所以捨入得到1。同理,1.6捨入得到2。再看1.5和2.5:根據上述可知,1.5和2.5都是中間值,那麼就要看有效數字是否是偶數,1.5的有效數字是1,是奇數,所以要進製得到2;而2.5的有效數字是2,所以直接捨去不進製得到2。

上面說的方法根據"中間值"來進行捨入是從概念中抽取的方法,還有個方法我覺得更簡便。為了說明這個方法,以及不混淆概念,我引入乙個"半值"叫法(我自己心裡這麼叫而已,業界應該沒有這說法,大家根據自己情況覺得怎麼好記就怎麼叫吧)。"半值"是這麼算的:看有效數字後面的數值有多少位,假設有n位,則半值為"(基數^n)/2"。比如1.4,有效數字後面是4,1位數字,十進位制的基數是10,那麼半值為(10^1)/2=5。拿有效數字後面的數值跟半值比較,大則進,小則舍,半值就看有效數字奇偶,奇則進,偶則舍。比如,1.4的4比半值5小,所以直接捨去得1,而若是1.6的6比半值5大則要進1得2。1.5的5是半值,看有效數字1是奇數,則進製得2;2.5的5是半值,看有效數字2是偶數,則直接捨去得2。再比如,如果是1.48,同樣捨入到個位,48是2位數字,那麼半值為(10^2)/2=50,48比50小,直接捨去得1。或者還可以更簡單的,比如1.48,先只看有效數字的後一位4,乙個十進位制位權值是10,10/2=5,然後1.48的48有兩位,拿「5」也補足兩位得「50」,所以半值就是50。

二進位制也是同樣的道理,二進位制的基數是2,半值就這麼算(2^n)/2,然後二進位制的奇偶判斷看最有效位,0則偶,1則奇。

​二進位制10.010,捨入到小數點下一位,那麼看有效數字後面的數字是10,半值(2^2)/2=2=二進位制的10,正好是半值,那麼看有效數字是10.0,是偶數,所以直接捨去得10.0。再看10.011,半值同樣是10,而有效數字後面的11比10大則直接進製得10.1。再看10.110,半值同樣是10,有效數字後面的10正好是半值,看有效數字10.1是奇數,那麼要進1位,得11.0。

IEEE754浮點數 向偶數捨入

我們大家都知道,浮點數的標準是ieee754。關於ieee754格式這裡不講了,主要是要講一下它的預設捨入方式。因為表示方法限制了浮點數的範圍和精度,所以使用浮點數只能近似地表示實數運算。而此時就不得不考慮捨入的問題了。捨入的原則是找到最接近的匹配值。為此,ieee754定義了四種不同的捨入方式 下...

IEEE浮點數尾數向偶捨入

轉 抱歉忘了從 copy的了 例如有效數字超出規定數字的多餘數字是1001,它大於超出規定最低位的一半 即0.5 故最低位進1。如果多餘數字是0111,它小於最低位的一半,則捨掉多餘數字 截斷尾數 截尾 即可。對於多餘數字是1000 正好是最低位一半的特殊情況,最低位為0則捨掉多餘位,最低位為1則進...

BigDecimal捨入規則

1 round up 捨入遠離零的捨入模式。在丟棄非零部分之前始終增加數字 始終對非零捨棄部分前面的數字加1 注意,此捨入模式始終不會減少計算值的大小。2 round down 接近零的捨入模式。在丟棄某部分之前始終不增加數字 從不對捨棄部分前面的數字加1,即截短 注意,此捨入模式始終不會增加計算值...