2011年8月24日

[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)


投稿者 xml-rpc : 2011年8月24日 11:11
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/105921
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。