From: Kenta Murata Date: 2011-08-24T11:11:22+09:00 Subject: [ruby-list:48336] Re: 1.25を %10.1f で出力したときバージョンにより表示に違いがでるのは何故でしょうか。 むらたです。 http://www.exploringbinary.com/inconsistent-rounding-of-printed-floating-point-numbers/ このページに同様の実験とその結果が載ってますね。 On Tuesday, August 23, 2011 at 16:31 , paptimusx wrote: > JIS丸めは > e-1は 2(=偶数)なので e-2 が 5以下のときは切り捨て、6以上のときは切り上げになる。 > e-1が奇数の場合は普通の四捨五入になる。 > だと理解していたのですが、 > 端数が0.05より小さいなら切り捨て、端数が0.05より大きいならは切り上げ、 > 端数がちょうど0.05なら切り捨てと切り上げのうち結果が偶数となる方へ丸める。 > ということでした。 この丸め方は「最近接偶数への丸め」(round half to even) と呼びます。 ISO-31 で定められていて、その結果として JIS でも定められています。 簿記で良く使われているらしいのですが、そのためかどうか分かりませんが、 慣習的に「銀行家の丸め」(banker's rounding) とも呼ばれます。 この丸め方に対して "(=IEEE754)" と記載する事は正しくありません。 IEEE754 では以下の4つの丸めモードが規定されているためです。 - 最近接偶数への丸め - 0への丸め - 正の無限大への丸め - 負の無限大への丸め > MS系のコンパイラはJIS丸めをしていない。 メールの最初に提示した URL に書かれていますが、 Visual C++ のランタイムライブラリは、0から遠ざかる方向へ丸めるようです。 -- Kenta Murata Sent with Sparrow (http://www.sparrowmailapp.com)