[#49804] Re: 小数点以下の表示で質問があります。 — Fumiaki Sakamoto <ght8270407fs@...>

自己レスですみません。

14 messages 2014/04/23
[#49805] Re: 小数点以下の表示で質問があります。 — "KISHIMOTO, Makoto" <ksmakoto@...4u.or.jp> 2014/04/23

きしもとです

[#49806] Re: 小数点以下の表示で質問があります。 — Fumiaki Sakamoto <ght8270407fs@...> 2014/04/23

きしもとさま

[#49808] Re: 小数点以下の表示で質問があります。 — Tetsuo Sakaguchi <saka@...> 2014/04/23

阪口です。

[ruby-list:49818] Re: 小数点以下の表示で質問があります。

From: "Fumiaki Sakamoto" <ght8270407fs@...>
Date: 2014-04-24 08:38:40 UTC
List: ruby-list #49818
ありがとうございます。

坂元史明

-----Original Message-----
From: ruby-list [mailto:ruby-list-bounces@ruby-lang.org] On Behalf Of EGUCHI Osamu
Sent: Thursday, April 24, 2014 4:39 PM
To: Ruby users (Japanese)
Subject: [ruby-list:49817] Re: 小数点以下の表示で質問があります。

2014年4月24日 14:09 Fumiaki Sakamoto <ght8270407fs@kfa.biglobe.ne.jp>:
> 昨日はありがとうございました。
> 今日、こちらをアップデートしました。
> おっしゃりたかったのはこのような結果だったでしょうか。
>
> http://d.hatena.ne.jp/hateua123/20140424/1398315657

↑有理数で全て計算するように改善した後ですね

浮動小数の累加の版だと %a で表示している ”n(m) ” の部分が
n != m になることがあります。

n はループで求めた値 m は eval("0." + "9" * i) と文字列を評価し
Float を作っているので最善の精度だと期待できます。

%a は浮動小数点数の内部表現の16新ダンプでこの表現で一致していれば
ビットパターンレベルでも一致してます。

% ruby -ve 'p "%a" %  0.9'
ruby 1.9.3p484 (2013-11-22 revision 43786) [amd64-freebsd9] "0x1.ccccccccccccdp-1"

 0.9 ⇒ 1.ccccccccccccd * 2 ** -1

0.9 は二進だと循環小数だと判ります。

 えぐち


>>えぐち@エスアンドイーです
>>sprintf の %a フォーマットで浮動小数点数のビットパターンを見てみると、
>>発見があるかもしれません。
>>
>>     output = sprintf("%18.16f %a(%a)", c, c, eval("0." + "9" * i))
>>
>>こんな感じ。
>>
>> えぐち
>>
>>2014年4月23日 16:50 Fumiaki Sakamoto <ght8270407fs@kfa.biglobe.ne.jp>:
>>> ありがとうございます。
>>> 早速行ってみます。
>>>
>>> On 2014/04/23 16:42, "Tetsuo Sakaguchi" <saka@slis.tsukuba.ac.jp> wrote:
>>>>In message <CF7D8806.26B3%ght8270407fs@kfa.biglobe.ne.jp>
>>>>2014-04-23T15:17+0900,
>>>>       Fumiaki Sakamoto <ght8270407fs@kfa.biglobe.ne.jp> 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" <ksmakoto@dd.iij4u.or.jp>
>>>>>wrote:
>>>>>
>>>>> >きしもとです
>>>>> >
>>>>> >> require 'rational'
>>>>> >> a = 0.1  あるいは a = Rational(1, 10)
>>>>> >
>>>>> >この、中途半端に有理数を使って(使おうとして)いるのは何でしょうか?
>
>

In This Thread

Prev Next