2011年8月24日

[ruby-list:48339] Re: 1.25を %10.1f で出力したときバージョンにより表示に違いがでるのは何故でしょうか。

成瀬です。

2011年8月24日14:23 KISHIMOTO, Makoto <ksmakoto@xxxxx>:
>> 10進で単純に考えると0.4になりそうです..
>> 単精度で銀行家丸めをしてみると(つまりRubyでない) 0.4になり、倍精度だと0.5になります。
>> 0.45はバイナリで正確に表現できないので、というような説明があるのですが、
>> 10進のまま考えてはいけないのでしょうか。
>

> コンピュータの浮動小数点とはそういうもの(普通、2進)だからです。
> ある意味で、期待した通りの「ちょうど5」のふるまいが起きるのは、たまたま
> 2進でちょうど表現できる時のみ、と考えていいでしょう(0.375とか)。

浮動小数点数とはそういうものなので、そういうものでは困る場合、
10進のまま考えたいという場合は BigDecimal 等を使ってください。

参考サイト:
* http://download.oracle.com/docs/cd/E19957-01/806-4847/ncg_goldberg.html
* http://wiki.github.com/rdp/ruby_tutorials_core/ruby-talk-faq#floats_imprecise
* http://en.wikipedia.org/wiki/Floating_point#Accuracy_problems

--
NARUSE, Yui <naruse@xxxxx>


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




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