見出し画像

【シミュレーション】銀行家の丸め

五捨五入とも呼ばれる特殊な端数処理の方法「銀行家の丸め」について、説明・検証します。

「銀行家の丸め」とは

「銀行家の丸め」とは、端数が 0.5 より小さいなら切り捨て、0.5 より大きいなら切り上げ、0.5 ちょうどなら切り捨てと切り上げのうち偶数となる方に端数処理する方法です。
例を見てみましょう。

例:
 1.32 → 1(四捨五入と同様)
 1.52 → 2(四捨五入と同様)
 1.50 → 2(偶数に丸め)
 2.52 → 3(四捨五入と同様)
 2.50 → 2(偶数に丸め)

2.50 → 2 の部分が通常の四捨五入と異なります。このように端数が0.5ちょうどのとき、偶数に丸めることから、「銀行家の丸め」は「偶数丸め」と呼ばれることもあるようです。

シミュレーション

「銀行家の丸め」は四捨五入に比べ、端数処理による誤差の累積が抑制されると言います(ゆえに、銀行家が好んで用いたことからその名がついた)。
誤差の累積の程度を四捨五入と比べてみました。

シミュレーションの概要:
1以上10以下で○.○の形の数値を一定個数発生させ、
 ・通常の平均
 ・それぞれ四捨五入した後、平均
 ・それぞれ「銀行家の丸め」した後、平均
を比較する。

以下は、シュミレーションの結果を示した表とグラフです。

画像1

画像2

結論

グラフの回帰直線から見て取れるように、
四捨五入は数値の発生数に依存せず一定の有効桁数、
銀行家の丸めは数値の発生数が大きいほど大きな有効桁数
となることがわかりました。
やはり、「銀行家の丸めの方が誤差の累積が少ない」と言えそうです。

エクセルとVBA全文

今回のシミュレーションに使用したエクセルです。

以下はVBAの全文です。

Option Explicit

Sub main()
   Dim row As Long
   Dim i As Currency
   
   Dim numberRange As Range
   Dim trueValueRange As Range
   Dim sumRoundRange As Range
   Dim sumBankersRange As Range
   
   Set numberRange = Range("NUMBER")
   Set trueValueRange = Range("TRUE_VALUE")
   Set sumRoundRange = Range("SUM_ROUND")
   Set sumBankersRange = Range("SUM_BANKERS")
   
   Dim randomFigure As Double
   
   Dim sumTrueValue As Currency
   Dim sumRound As Currency
   Dim sumBankers As Currency
   
   row = 1
   Do While numberRange(row)
       sumTrueValue = 0
       sumRound = 0
       sumBankers = 0
   
       For i = 1 To numberRange(row)
           randomFigure = RndFigure
           
           sumTrueValue = sumTrueValue + randomFigure
           sumRound = sumRound + WorksheetFunction.Round(randomFigure, 0)
           sumBankers = sumBankers + Round(randomFigure, 0)
       Next i
       
       trueValueRange(row) = sumTrueValue / numberRange(row)
       sumRoundRange(row) = sumRound / numberRange(row)
       sumBankersRange(row) = sumBankers / numberRange(row)
       
       row = row + 1
   Loop
End Sub

Function RndFigure() As Double
   Randomize
   
   RndFigure = WorksheetFunction.Round(10 * Rnd, 1)
End Function

―――――記事はここまで―――――
読んで下さりありがとうございます!

この記事が気に入ったらサポートをしてみませんか?