From: Fumiaki Sakamoto Date: 2014-04-23T18:34:49+09:00 Subject: [ruby-list:49815] Re: 小数点以下の表示で質問があります。 勉強になります。 ご指導ありがとうございます。 坂元史明 On 2014/04/23 18:23, "KISHIMOTO, Makoto" wrote: >きしもとです > >一応解決したようなので、深い話は止めますが、一応最低限のことだけ。 > >> おそらく、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: >> ありがとうございます。 >> そちらも行ってみます。 >> >> 坂元史明