質問: ; chomp($value); if ($value >= 5) { print "5以上の数です。"; } else { print "5よりも小さい数です。"; } 上のperlを実行した時に、4.999999999999999 9が15個並んだときは、5よりも小 さいのですが、16個以上の時は5以上になってしまいます。 これってどういうことですか。 教えてください。
回答: perlでは、数値は整数も小数も内部的には全て 倍精度浮動小数点として持っています。 つまり、8バイト(64ビット)で、数値を表現しなければなりません。 この場合、有効桁数は15~16桁になります。 表現するために要するビット数が有限ですから、当然それ以上の桁数を 指定すると誤差が生じ、近似値としてしか表現できないことになります。 4.999.... としても、誤差によって 5.000....1という数に近似されてしまうのです。 これはperlに限ったことではなく、コンピュータで小数を表現するときは、 たいていこの浮動小数点の考え方が絡んできますので、覚えておいてください。