昔の東工大の問題を眺めていたら「負の場合はやばい」みたいなことが書いてあったので調べました。
東工大の問題
の小数第 1 位を四捨五入したものが と等しくなるような実数 を求めよ。
普通に解く分にはなんの問題もありません。
負の数の四捨五入も整数部分と小数部分にわければ簡単です。
では,いったい何がやばいのでしょうか?
負の数の四捨五入の定義
負の数の四捨五入の定義を調べてみましょう。まずは wikipedia から。
を足して切り捨てるという、単純なアルゴリズムで得られる。なお、負の数に対して正常な結果を得ようとすれば、切り捨ては負の無限大への丸めである必要がある(0 への丸めだと、たとえば が に丸められてしまう)。ただし、 を足して負への無限大へ丸めると、端数が の場合に絶対値が減る(たとえば、 は へと丸められる)。一方、JIS Z 8401では、負の数は絶対値として丸める( は へと丸められる)。実際に、コンピュータで負の数に「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 では「絶対値を四捨五入」と定められている。常識的な「小数部分を四捨五入」は不正解とされる可能性がある。
ということなのだろうと思います。そもそも負の数の四捨五入は学校ではあつかわないらしく,他の大学は正の数しか出さなかったり,「誤差の絶対値は 以下」のように指定していたりします。
解答はどう変わるか
「小数部分を四捨五入」と「絶対値を四捨五入」では途中式の不等号が変わるだけで,最終的な答えは変わりません。, とします。 は負の数です。
「小数部分を四捨五入」の場合
「絶対値を四捨五入」の場合
どちらで解いたとしても正解でしょう。