四捨五入の真実
「四捨五入」は、ある数のおおよその大きさを把握するときに使う方法である。
ある数のおおよその大きさを把握するときに使う方法としては、他に、「切り捨て」や「切り
上げ」がある。
例 1.01を小数第2位で切り捨てると、1.0で合点がいくが、1.01を小数第2位で切り
上げると、1.1となり、何となく違和感を感じる。
例 1.09を小数第2位で切り上げると、1.1で合点がいくが、1.09を小数第2位で切り
捨てると、1.0となり、何となくもったいなさを感じる。
以上の違和感を解消する方法として、基準となる位で、丁度中間にある数字を境に、
0、1、2、3、4 → 切り捨て
5、6、7、8、9 → 切り上げ
と、一番近いキリのよい数を表す方法が「四捨五入」である。
「四捨五入」は合理的であるが、大雑把すぎるという見方もある。その大雑把さを多少緩
和する方法として、「二捨三入」という方法が知られている。
1、2 → 切り捨て
3、4、5、6、7 → 5
8、9 → 切り上げ
例 1.07を小数第2位で「四捨五入」すると、1.1で、小数第2位で「二捨三入」すると、
1.05。これは何となく、その数のおおよその大きさに近いので、違和感はないだろうと
思う。
小数第2位で四捨五入するということは、ガウスの記号[x]を用いて、
[x+0.05]
と表される。
例 1.4を小数第1位で「四捨五入」すると、1
これは、 [1.4+0.5]=[1.9]=1 とも求められる。
負の数の「四捨五入」は、あまり考えないが、あえて計算すれば次のような計算となるのだ
ろう。
例 −1.4を小数第1位で「四捨五入」すると、[−1.4+0.5]=[−0.9]=−1
Dengan kesaktian Indukmu さんからのコメントです。(令和4年3月20日付け)
上記で紹介されていた二捨三入について質問があります。「1.075」を小数第2位で「二
捨三入」すると、どうなるのでしょうか。
私の感覚では、「1.1」に丸まるのですけれども(注1)、世間様での「二捨三入」の概念は
どのようになっているのでしょうか。ひょっとして世間様では「1.05」なのでしょうか。
■注1 ・・・ 中学生のころに、数学の先生から、《丸めたい数を2倍してから四捨五入して、
その後に2で割るとよい、これが二捨三入だ》と教わった記憶があります。
同級生が、《それでは二捨二点五入ではないのか》とツッコミを入れていて、個人的には
ツボにはまり笑いをこらえきれなかった思い出があるのでした。
(コメント) 「1.075」の小数第2位での二捨三入は、「1.05」になると思います。
中学の数学の先生が仰っていた《丸めたい数を2倍してから四捨五入して、その後に2で
割るとよい》を実際に実践すると、
1 2 3 4 5 6 7 8 9
を2倍して、一の位を四捨五入すると、
2 4 6 8 10 12 14 16 18
↓
0 0 10 10 10 10 10 20 20
2で割って、
0 0 5 5 5 5 5 10 10
となるので、中学の先生の説明は正しく二捨三入になっている。
「1.075」の「丸めたい数」は、小数第3位の「5」を無視した「1.07」なので、2倍した
「2.14」の小数第2位を四捨五入して、「2.10」。これを2で割れば、「1.05」となる。
DD++ さんからのコメントです。(令和4年3月21日付け)
私も 1.075 を 0.05 刻みで丸めるなら 1.1 派です。1.025 なら 1.0 で。
上記(コメント)の主張だと、1.079 の場合はどうなるんですかね?
一応少し調べてみたのですが、二捨三入は、貨幣の最小単位が 5 に変更された場合に
本来の額から実際に支払う額を決めるための方法として考えられたようです。
最初はスウェーデン、その後いくつかの国でも用いられたようです。
例えば、日本で一円玉が廃止されて五円玉が最小硬貨になったと仮定して、金額が
123456 円になった場合は一円玉が存在していないので 123455 円と見做して支払う、みた
いなことですね。
つまり、本来の二捨三入は整数を 5 の倍数にまとめる方法であって、任意の桁で近似す
る方法ではないようです。
また、5 刻みである理由も、別に 10 刻みだと粗いからということでもなく、単純に 5 刻み
の貨幣は廃止されなかったからという非常に実際的な理由みたいです。
Dengan kesaktian Indukmu さんからのコメントです。(令和4年3月20日付け)
JIS Z 8401 規則A に従っている、ということになりましょうか……。
Dengan kesaktian Indukmu さんからのコメントです。(令和4年3月24日付け)
まるめたい数を2倍してから四捨〔六〕入して、その後に2で割るとよい、これが二捨三入だ》
が汎用性があっていいと思いました。
四捨六入=五捨五入=偶数まるめ
ということとなります。
(追記) 当HP読者のHN「wakach」さんから、「移り変わる「四捨五入の真実」と丸めの明日」
と題して、ご投稿いただきました。(令和4年12月2日付け)
このページを読んでいて改めて「JIS Z 8401 規則A」を見返そうと、Google検索すると…、
JIS Z 8401: 2019 と、前回の改定が大分最近のことではありませんか。
(私が疎いだけ…?というのは置いておいて)
「JIS丸め」といえばこの規則Aの偶数丸めのこと、という印象がとても強く、これはもともと
鉄鉱などの重量物の取引の際、丸めによる誤差の偏りが不公平をもたらさないように提案
された方法、と聞いております。
このJIS Z 8401の改訂履歴が気になり調べてみると、規則Bの方法、いわゆる「一般的な
四捨五入」の待遇が年々良くなっていることに気が付きました.
JIS Z 8401: 1961では規則Bの方法は記載が無く(規則Bの不公平性に対して作られた、と
いう経緯からは自然と考える)、JIS Z 8401: 1999では原則は規則Aとしたうえで、注釈として
「規則B は,電子計算機による処理において広く用いられている。」と記載。
そして、JIS Z 8401:2019では、「次のいずれかの規則を用いる。」
ただし、推奨は規則Aで、規則Bは計算機による処理において用いられることがある、と記載
されています。
これでは、「JIS丸め」と言った時に、「いや,規則BもJISに書いてあるし、規則AだけをJIS丸
めと呼ぶのはちゃんちゃらおかしいじゃないか!」などと屁理屈をつけられるかもしれません。
この背景に思いを馳せると、技術の進歩によって計量に用いる装置の精度が十分高くなり、
不公平だと目くじらを立てるほどの誤差が生まれなくなったのだろうかと考えたり、計算機の
普及によって、計算機の都合を優先した規則Bの方法が、社会全体で見れば計算効率の面
などから利益となるようになったのだろうか。
特に近年は、深層学習等の技術への注目によって、さらに膨大な数の計算が行われるよ
うになり、そこで起きる丸めの誤差問題というのは従来の「5の扱いに起因する誤差」ではな
く、「量子化した際に、1つの変数に割り当てるビット数の不足による誤差」であり、丸めの方
法としては規則Bで問題ないということだろうか、などと夢想していました。
そう遠くない未来、量子コンピューターが普及した際には、いわゆる「計算のコスト」が激減
しますので、もしかすると丸めの誤差問題の大元が「量子化した際に、1つの変数に割り当て
るビット数の不足による誤差」から「5の扱いに起因する誤差」へと逆転して戻る日が来るかも
しれません。
そうなれば、JIS Z 8401: 2061あたりでは、100年の時を越えて規則Aが再度「JIS丸め」の覇
権を握る日が来るかもしれませんね。
いやはや、割と冗談ではなく、偶数丸めには四捨五入に見られないデメリットがあります。
それは、「偶数+0.5の出現率と奇数+0.5の出現率が異なるデータの処理」において、誤差
が生じるというものです。
今まで注目していた「個の数がとる値に起因する不公平」ではなく、「数の集団のもつ性質
に起因する不公平」と言えるでしょう。
これは深層学習のように、法則性をもつデータを大量に扱う時に対面しうる問題かもしれ
ません。そうなれば対策として、規則A-2「四捨五入と五捨六入をランダムに切り替えて適
用する」なんかが登場するでしょうか。
ランダムって何だ…と考えると、到底書ききれなくなってしまうので、この辺で終わろうと思
います。丸めの明日はどっちでしょうか。
偶数丸めのデメリットについて、改めて整理しながら補足すると…、
今まで取り扱ってきた「真に取るべき値が決まっているのに、丸めによって発生した誤差
によって真の値との誤差が生まれる、それが一方向に累積した結果として不公平を生じる」
という問題点に対抗できるのが、偶数丸めですね。
一方で「真に取るべき値」が不明な(あるいはそれを計算するには計算コストの面で合理
的ではない)計算をする場合、手元の結果に上ブレ下ブレどっちが起きているのか分から
ない(偶数+0.5と奇数+0.5の比率を事前に知る必要があり、丸めの方法だけでは対処でき
ない誤差が生じうる)という問題が残りますね。
ここまで書いて、四捨五入と五捨六入を交互にすれば良いんじゃないかと思いましたが、
それは各丸め操作の誤差の重みが毎回同じでないと不公平は解消されないなと、ぬか喜
びでした。(丸めるデータ列の奇数個目は大きく、偶数個目は小さく見積もられてしまうので)
以下、工事中!