丸め
[Wikipedia|▼Menu]
シャープ Compet CS-2122L上の丸めセレクタ。左のツマミで切り上げ・四捨五入・切り捨てのいずれかを選択し、右のツマミで小数点以下の桁数を選択する。事務用電卓の中には、この機種のように計算結果を指定した桁数に丸めて表示できるものもある。

端数処理(はすうしょり)とは、与えられた数値を一定の丸め幅の整数倍の数値に置き換えることである。平たく、丸め(まるめ)ともいう。

常用的には、十進法で10の累乗(…100、10、1、0.1、0.01…)が丸め幅とされることが多いが、そうでない丸め幅をもつ処理は存在する。十進法以外のN進法について同様の概念を考えることもできる。
丸めの種類
凡例

丸めは任意の丸め幅に対し可能だが、以下では特に断らない限り、丸め幅を1とする(後段の「#例」では、丸め幅は0.1である)。任意の丸め幅で丸めるには、丸める前に丸め幅で割り、丸めた後に丸め幅をかける。

主に正数について述べるが、負数についても適宜述べる。
切り捨て・切り上げ

整数部分をそのまま残し、小数点以下を0とする丸めを「切り捨て」という。それに対し、小数点以下が0でなかった場合整数部分を1増やし、小数点以下を0とする丸めを「切り上げ」という。

負の数を考えると、「切り捨て」「切り上げ」に準ずる丸めは、4種類ある。それぞれ「○○への丸め」と呼ばれる。

符号を無視して絶対値を丸める場合、「切り捨て」は常に0へ近づく(または変わらない。以下では省略)ので「0への丸め (rounding toward zero; RZ)」、「切り上げ」は常に数直線上の無限遠点へ近づくので「無限大への丸め (rounding toward infinity; RI)」と呼ばれる。単に「切り捨て」「切り上げ」というと、これらをさす。

逆に、正数の場合と増減を同じ向きにする場合は、「切り捨て」は常に減るので「負の無限大への丸め (rounding toward minus infinity; RM)」、「切り上げ」は常に増えるので「正の無限大への丸め (rounding toward plus infinity; RP)」と呼ばれる。

「切り捨て」「切り上げ」は、最も計算が単純な丸めである。その一方で、丸め誤差上界が1(最大が1近い)と大きい。さらに悪いことに、誤差が常に同じ符号であるというバイアスがあり、丸めた数を多数足し合わせると、個数に比例して丸め誤差が累積する。この欠点のため、限られた目的にしか使われない。

数値が増えては困る/減っては困る場合は、「切り捨て」や「切り上げ」が使われる。

安全基準は、常に安全な方に丸められる。

誤差不確かさは、切り上げられる。

数値が実際より増えると誇張・虚偽・捏造・難解と見なされる恐れがあるときは、切り捨てられる。

数値が実際より減ると矮小化・虚偽・捏造と見なされる恐れがあるときは、切り上げられる。

(広義の)最近接丸め

丸め誤差を小さく抑えるには、常に最も近い整数(2つある場合はそのうちどちらか)に丸めればいい。これを「最近接丸め (round to the nearest)」という。ただし、単に「最近接丸め」というと、後述する「偶数への丸め」を意味することが多いので注意。

「最近接丸め」では、丸め誤差は最大で0.5で、「切り捨て」「切り上げ」の丸め誤差の半分になる。バイアスも、端数がランダム(すなわち、[0, 1)で一様分布)の場合は発生しない。端数がランダムでなく端数0.5が正の割合で発生する場合のみバイアスが発生するが、それでも、「切り上げ」「切り捨て」より格段に少ない(端数が全て0.5であるようなデータを四捨五入するといったワーストケースでは同じ程度になる)。

端数がちょうど半数だった場合どちらに丸めるかで、いくつかの変種がある。
四捨五入

十進法では、端数が0.5未満なら切り捨て、0.5以上なら切り上げる「半数切り上げ」の丸めを「四捨五入」という。JIS Z 8401で規則Bとして定められている[1]。「四捨五入」という呼び名は、小数第一位が4以下ならば切り捨て、5 以上ならば切り上げることに相当することから来ている。一般にはR丸めとも言う。

正数に対しては、0.5を足して切り捨てるという、単純なアルゴリズムで得られる。なお、負数に対して正常な結果を得ようとすれば、切り捨ては負の無限大への丸めである必要がある(0への丸めだと、たとえば?2が?1に丸められてしまう)。ただし、0.5を足して負への無限大へ丸めると、端数が0.5の場合に絶対値が減る(たとえば、?1.5は?1へと丸められる)。一方、JIS Z 8401では、負数は絶対値として丸める(?1.5は?2へと丸められる)。実際に、コンピュータで負の数に「0.5を足して切り捨て」た場合どうなるかは、負数と切り捨ての実装による[1]

端数が0.5のとき常に増える方向に丸められるため、(端数がランダムでない場合は)わずかに正のバイアスが発生しうる。
五捨五超入

端数が0.5以下なら切り捨て、0.5超なら切り上げる丸めを「五捨五超入」という。

0.5は常に切り上げられる四捨五入とは逆の特徴を持つ。端数がランダムでない場合は、わずかに負のバイアスが発生しうる。

正の数に対しては、0.5を引いて切り上げることで得られる。
偶数への丸め(round to even)

「偶数への丸め」(round to even)[2][3]は、端数が0.5より小さいなら「切り捨て」、端数が0.5より大きいならば「切り上げ」、端数がちょうど0.5なら「切り捨て」と「切り上げ」のうち結果が偶数となる方へ丸める(つまり偶数+0.5なら「切り捨て」、奇数+0.5ならば「切り上げ」となる)。JIS Z 8401で規則Aとして定められていて、規則B(四捨五入)より「望ましい」とされている[1]

端数0.5のデータが有限割合で存在する場合、「四捨五入」ではバイアスが発生するが、「偶数への丸め」ではバイアスが無い。つまり、多数足し合わせても、丸め誤差が特定の側に偏って累積することがない。ただし、偶数+0.5は現れるが奇数+0.5は現れないデータのように分布に特殊な特徴がある場合は、バイアスが発生することがある。

単に「偶数丸め」「最近接丸め」とも呼ばれる。JIS Z 8401で定められていることから「 JISの丸め方[4]」、あるいは同様にISO 31-0で定められていることから「ISO丸め」ともいう。英語では、誤差の累積を嫌い銀行家が好んで使ったため「銀行家の丸め (bankers' rounding)」、「銀行丸め」ともいう[注 1]。5が切り捨てられたり切り上げられたりするので「五捨五入」と呼ばれたり、端数がちょうど0.5の場合に整数部分が偶数なら「ゼロへの丸め」奇数なら「無限大への丸め」[注 2]になるので「偶捨奇入」と呼ばれたりもする。
奇数への丸め(round to odd)

「奇数への丸め」(round to odd)[2]は、偶数への丸めの対称である。端数が0.5より小さいなら「切り捨て」、端数が0.5より大きいならは「切り上げ」という点は最近接丸めとして同様だが、端数がちょうど0.5なら「切り捨て」と「切り上げ」のうち結果が奇数となる方へ丸める、という点が偶数への丸めの逆である。

端数0.5のデータが有限割合で存在する場合、「四捨五入」ではバイアスが発生するが、「奇数への丸め」ではバイアスが無い。


次ページ
記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:39 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef