投稿日 | : 2005/03/10(Thu) 11:35 |
投稿者 | : ダンボ |
URL | : |
タイトル | : 「銀行丸め」 |
Say さん、いつもお世話になっております。
> 四捨五入ではありません。銀行丸めです。
「銀行丸め」聞いたことはあるなあ、という程度なので、復習をしました。
(単なる憶測)/演算子が「銀行丸め」を採用した背景はファームウェアのアルゴリズムで一番速いのかな
hhttp://support.microsoft.com/default.aspx?scid=kb;ja;418216
Office 2000 より VBA には Round 関数が追加されました。VBA の Round 関数は、"算術型" の丸め処理では
なく "銀行型" の丸め処理を行います。
"算術型" の丸め処理では ".5" は常に切り上げられますが、"銀行型" の丸め処理の場合は ".5" は、結果が偶
数になるように丸め処理が行われ、切り上げられることも、切り捨てられることもあります。
"算術型" と "銀行型" の丸め処理の違いは、以下の表のようになります。
数値 算術型 銀行型 (VBA)
-----------------------------
1.5 2 2
2.5 3 2
3.5 4 4
4.5 5 4
5.5 6 6
6.5 7 6
hhttp://support.microsoft.com/default.aspx?scid=kb;ja;196652
丸めを行った値どうしを加えるとき、.5 を常に同じ方向に丸めると、加える値が多くなるにつれて値の偏りが大
きくなります。この誤差を最小限に抑えるための方法の 1 つが銀行型丸め (Banker's Rounding) です。
銀行型丸めの場合、.5 は切り上げられることもあれば、切り捨てられることもあります。慣例では、最も近い偶
数に丸められます。つまり 1.5 と 2.5 はどちらも 2 に丸められ、3.5 と 4.5 はどちらも 4 に丸められます
。銀行型丸めは対称的なアルゴリズムです。