有人提出修正,應當是“四捨六入,奇進偶舍”。他們主要在考慮一個例子某實數r=0.4445。也就是說,比九分之四稍微大一點點。(構造其他小數也可以,有限小數還是無限小數、純小數還是帶小數都沒關係)好了,根據四捨五入演算法f,直接把這個r保留到整數。那麼,明顯,結果是0,小數點後第一位是4麼。這時,請開放一下腦洞。有一群科學家拿到了這個數字。然後……科學家s3把r保留到小數點後第3位,得r3=0.445。第4位是5麼,按四捨五入的精神,把這個1進到第3位,使之變成5。科學家s2把r保留到小數點後第2位,得r3=0.45。第3位是5麼,按四捨五入的精神,把這個1進到第2位,使之變成5。科學家s1把r保留到小數點後第1位,得r1=0.5。第2位是5麼,按四捨五入的精神,把這個1進到第1位,使之變成5。科學家s0把r保留到小數點後第0位,得r0=1。第1位是5麼,按四捨五入的精神,把這個1進到第0位,使之變成1。哈哈,想各位讀者已經猜到劇情會這樣發展了。可是,這第0位就是個位。這已然與把r直接舍入到個位產生天壤之別。數學家發現這個四捨五入的bug後就瘋了,啊不對,陷入思考了。然後有個天才就提出了靈感,四捨六入都沒錯,這個反例主要體現的是“五入”的錯。都是“五入”的錯。都是無條件地“五入”的錯。於是他在提出修正的時候,把“五入”的判定加強、變得更平均了。畢竟作為一個偶數進位制的十進位制中,5就應當是絕對中立的存在。他修正為:奇進偶舍。5前面要保留的有效數字應當湊成偶數,如果這有效數字本來是奇數,那把它加一個1,而如果它就是偶數(尤其是4),那就別動別惹麻煩了。這也是對十進位制的妥協。事實上,C++語言裡強制將實數轉換為整數的演算法就是“四捨六入,奇進偶舍”。
有人提出修正,應當是“四捨六入,奇進偶舍”。他們主要在考慮一個例子某實數r=0.4445。也就是說,比九分之四稍微大一點點。(構造其他小數也可以,有限小數還是無限小數、純小數還是帶小數都沒關係)好了,根據四捨五入演算法f,直接把這個r保留到整數。那麼,明顯,結果是0,小數點後第一位是4麼。這時,請開放一下腦洞。有一群科學家拿到了這個數字。然後……科學家s3把r保留到小數點後第3位,得r3=0.445。第4位是5麼,按四捨五入的精神,把這個1進到第3位,使之變成5。科學家s2把r保留到小數點後第2位,得r3=0.45。第3位是5麼,按四捨五入的精神,把這個1進到第2位,使之變成5。科學家s1把r保留到小數點後第1位,得r1=0.5。第2位是5麼,按四捨五入的精神,把這個1進到第1位,使之變成5。科學家s0把r保留到小數點後第0位,得r0=1。第1位是5麼,按四捨五入的精神,把這個1進到第0位,使之變成1。哈哈,想各位讀者已經猜到劇情會這樣發展了。可是,這第0位就是個位。這已然與把r直接舍入到個位產生天壤之別。數學家發現這個四捨五入的bug後就瘋了,啊不對,陷入思考了。然後有個天才就提出了靈感,四捨六入都沒錯,這個反例主要體現的是“五入”的錯。都是“五入”的錯。都是無條件地“五入”的錯。於是他在提出修正的時候,把“五入”的判定加強、變得更平均了。畢竟作為一個偶數進位制的十進位制中,5就應當是絕對中立的存在。他修正為:奇進偶舍。5前面要保留的有效數字應當湊成偶數,如果這有效數字本來是奇數,那把它加一個1,而如果它就是偶數(尤其是4),那就別動別惹麻煩了。這也是對十進位制的妥協。事實上,C++語言裡強制將實數轉換為整數的演算法就是“四捨六入,奇進偶舍”。