• ベストアンサー

Perl:計算誤差について

お世話になります。 Perlを使って、計算機には誤差があるという話をしようと思って、  print "1/3*3=", 1/3*3, "\n"; というプログラムを実行させました。 自分としては、1/3の時点で0.333333333333的な数になるので、それを3倍すると、0.9999999999的な数字になると思いましたが、結果としては1になります。 これはどういう原理でしょうか。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

浮動小数点だから、仮数部と指数部で表現できる数値表現のうち、もっとも近いものに丸められるからでは? my $num1 = 1 / 3; printf "%.64f\n", $num1; #0.3333333333333333148296162562473909929394721984863281250000000000 my $num2 = $num1 * 3; printf "%.64f\n", $num2; #1.0000000000000000000000000000000000000000000000000000000000000000 http://perldoc.jp/docs/perl/5.10.0/perlnumber.pod http://ja.wikipedia.org/wiki/%E6%B5%AE%E5%8B%95%E5%B0%8F%E6%95%B0%E7%82%B9%E6%95%B0

TYWalker
質問者

お礼

ありがとうございます! 単純に切捨てではなくて丸めているんですね。 あと、45.2-38.8 が 6.40000000000001 になるってのもあるんですねw http://d.hatena.ne.jp/satakesatake/20090522/1242988375

関連するQ&A