負の数の四捨五入(1990東工大後期)

昔の東工大の問題を眺めていたら「負の場合はやばい」みたいなことが書いてあったので調べました。

東工大の問題

 (x+1)(x-2) の小数第 1 位を四捨五入したものが  1+5x と等しくなるような実数  x を求めよ。

普通に解く分にはなんの問題もありません。
負の数の四捨五入も整数部分と小数部分にわければ簡単です。

 -1.1=-2+0.9\fallingdotseq -1

 -1.9=-2+0.1\fallingdotseq -2

 -1.5=-2+0.5\fallingdotseq -1

では,いったい何がやばいのでしょうか?

負の数の四捨五入の定義

負の数の四捨五入の定義を調べてみましょう。まずは wikipedia から。

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

http://ja.wikipedia.org/wiki/端数処理
http://en.wikipedia.org/wiki/Rounding

前段の「丸め」の説明をカットしたのでわかりにくいかもしれませんが,「実装による」がまずそうなのはわかると思います。英語版 wikipedia には実装の例が載っていて,round down / round up / round toward zero / round away from zero / round to nearest で使う関数がすべて違います。

次は JIS Z8401:1999 です。

この規格では対象となる数値として正の数値しか想定していない。負の数値を対象とする場合は,その絶対値に適用しなけれはならない。
http://kikakurui.com/z8/Z8401-1999-01.html

なんと絶対値をとってから四捨五入するのが正しいらしいです。

ISO 80000-1:2009 Annex B にも規定がありましたが,残念ながら中身は読めませんでした(有料でした)。おそらく JIS と同じだろうと思われます。

これでわかりました。

負の数の四捨五入には様々な方法があり,特に JIS では「絶対値を四捨五入」と定められている。常識的な「小数部分を四捨五入」は不正解とされる可能性がある。

ということなのだろうと思います。そもそも負の数の四捨五入は学校ではあつかわないらしく,他の大学は正の数しか出さなかったり,「誤差の絶対値は  0.05 以下」のように指定していたりします。

解答はどう変わるか

「小数部分を四捨五入」と「絶対値を四捨五入」では途中式の不等号が変わるだけで,最終的な答えは変わりません。 P=(x+1)(x-2),  Q=1+5x とします。 P は負の数です。

「小数部分を四捨五入」の場合

  Q-\frac{1}{2} \leqq P < Q+\frac{1}{2}

「絶対値を四捨五入」の場合

 -Q-\frac{1}{2} \leqq -P < -Q+\frac{1}{2}

 \therefore Q-\frac{1}{2} < P \leqq Q+\frac{1}{2}

どちらで解いたとしても正解でしょう。


variee.hatenablog.com