From: Fumiaki Sakamoto Date: 2014-04-24T14:09:33+09:00 Subject: [ruby-list:49816] Re: 小数点以下の表示で質問があります。 えぐちさま 昨日はありがとうございました。 今日、こちらをアップデートしました。 おっしゃりたかったのはこのような結果だったでしょうか。 http://d.hatena.ne.jp/hateua123/20140424/1398315657 ありがとうございました。 坂元史明 On 2014/04/23 17:23, "EGUCHI Osamu" wrote: >えぐち@エスアンドイーです > >sprintf の %a フォーマットで浮動小数点数のビットパターンを見てみると、 >発見があるかもしれません。 > > output = sprintf("%18.16f %a(%a)", c, c, eval("0." + "9" * i)) > >こんな感じ。 > > えぐち > >2014年4月23日 16:50 Fumiaki Sakamoto : >> ありがとうございます。 >> 早速行ってみます。 >> >> On 2014/04/23 16:42, "Tetsuo Sakaguchi" wrote: >>>In message >>>2014-04-23T15:17+0900, >>> Fumiaki Sakamoto wrote: >>>> Rationalを使っても、0.1という形で10分の1を表現しても私の方法では結果は同じで >>>> した。 >>> >>>a に Rational のインスタンスをいれても他に Float な値があると計算する際に >>>Float に変換されて、2進の浮動小数点数計算になるので、十進の 0.1 は >>>2進化される際に近似値になってしまうと思います。その辺りが >>>きしもとさんの「中途半端に」という指摘なんだと思います。 >>> >>>Rational で計算させたいのなら、b とか c に代入している 9.0 とか 0.0 も >>>Rational か整数にしないと。。。 >>> >>>> もともと、0.999...という循環小数が >>>> 0.999...= 9 x (1/10)**1 + 9 x (1/10)**2 + 9 x (1/10)**3 + ・・・+ 9 x >>>> (1/10)**n >>>> で表現され、n=∞の時に1に等しくなるというところを出典に試しに計算させたもので >>>> す。 >>>> >>>> On 2014/04/23 13:33, "KISHIMOTO, Makoto" >>>>wrote: >>>> >>>> >きしもとです >>>> > >>>> >> require 'rational' >>>> >> a = 0.1 あるいは a = Rational(1, 10) >>>> > >>>> >この、中途半端に有理数を使って(使おうとして)いるのは何でしょうか?