既存システムのリプレイスをするにあたって、設計書に「偶数丸めをする」と記載がありました。
偶数丸めについて「端数が5の場合は偶数のほうに丸める」と説明されることが多いですが、
四捨五入と何が違うのでしょうか。
まず、四捨五入の場合、対象の桁が「4」であれば切り捨てて、「5」であれば切り上げます。
例えば小数第一位を四捨五入する場合、以下の様になります。
1.1→ 1
1.2→ 1
1.3→ 1
1.4→ 1
1.5→ 2
1.6→ 2
1.7→ 2
1.8→ 2
1.9→ 2
そして、四捨五入する前と後を計算すると、
四捨五入前:1.1+1.2+1.3+1.4+1.5+1.6+1.7+1.8+1.9=13.5
四捨五入後:1+1+1+1+2+2+2+2+2=14
となって、+0.5の差が生まれてしまいます。
これは、切り捨てるのは0.1~0.4までの4パターンで、切り上げるのは0.5~0.9までの5パターンのためです。
そこで、この誤差を無くそうと考えられたのが偶数丸めです。
偶数丸めは丸める一つ上の桁が奇数の場合は5を切り上げ、偶数の場合は5を切り捨てます。
先ほど小数第一位を丸める例で言うと
1.1→ 1
1.2→ 1
1.3→ 1
1.4→ 1
1.5→ 2
1.6→ 2
1.7→ 2
1.8→ 2
1.9→ 2
一緒じゃん!!!
とお思いでしょうがここからが違います。
一つ上の位が偶数の場合は以下のようになります。
四捨五入 偶数丸め
2.1→ 2 2.1→ 2
2.2→ 2 2.2→ 2
2.3→ 2 2.3→ 2
2.4→ 2 2.4→ 2
2.5→ 3 2.5→ 2
2.6→ 3 2.6→ 3
2.7→ 3 2.7→ 3
2.8→ 3 2.8→ 3
2.9→ 3 2.9→ 3
四捨五入の方は「5」を切り上げて、偶数丸めの方は偶数に寄せるので「5」を切り捨てます。
それらを同じように計算すると
四捨五入前:2.1+2.2+2.3+2.4+2.5+2.6+2.7+2.8+2.9=22.5
四捨五入後:2+2+2+2+3+3+3+3+3=23
偶数丸め :2+2+2+2+2+3+3+3+3=22
となり、四捨五入は相変わらず+0.5の差がありますが、偶数丸めの方は-0.5の誤差になっています。
そして1.1から2.9までを足すと(前段の計算省略)、
四捨五入前:13.5+22.5=36.0
四捨五入後:14.0+23.0=37.0
偶数丸め :14.0+22.0=36.0
となります。
このように偶数奇数で誤差を交互に相殺させることで、より近似値で丸めることが出来るのが偶数丸めです。