From: "KISHIMOTO, Makoto" Date: 2014-04-23T18:23:59+09:00 Subject: [ruby-list:49814] Re: 小数点以下の表示で質問があります。 きしもとです 一応解決したようなので、深い話は止めますが、一応最低限のことだけ。 > おそらく、RubyのFloat演算は自動的に誤差の丸めをしており、6番目と8番目では丸め > きれずに小数点以下16桁で表示し、7番目は誤差が丸められていたということでしょう > か。 といったように、なんとなく丸めたり、ということを ruby はして いませんし、一般に、するべきではありません、というか、しては いけません。 # 有名企業の有名なソフトの昔の版で確認されているように、 # 世の中に悪例はありますが。 # http://http://oku.edu.mie-u.ac.jp/~okumura/software/excel/roundoff.html to_s が、小数点の直後の 0 を除いて、0 が連続して最後まで 0 ならその 0 は削る(ゼロサプレス)ということをするため、数に よっては切りが良い数のように見えたりしますが、十進小数で 切りの良い値が、二進で切りが良いわけではない、ということに 注意してください。 Float は内部的には二進法で表現されているため、0.5, 0.25 の ような二進で切りの良い小数以外は、たとえば 0.1 や 0.9 と いった値には誤差があります。そのため組み合わせによっては、 最下位の桁が 0 ではなく 1 になったりするわけです。 これは、なんとなく丸めているのではなく、内部で表現されている 最後の桁まで計算したうえで、表現し切れない最初の桁で0捨1入 (4捨5入)した結果そうなる、ということです。 On Wed, 23 Apr 2014 17:35:32 +0900 Fumiaki Sakamoto wrote: > ありがとうございます。 > そちらも行ってみます。 > > 坂元史明