From: "NARUSE, Yui" Date: 2011-08-24T16:20:09+09:00 Subject: [ruby-list:48339] Re: 1.25を %10.1f で出力したときバージョンにより表示に違いがでるのは何故でしょうか。 成瀬です。 2011年8月24日14:23 KISHIMOTO, Makoto : >> 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