[ruby-list:49804] Re: 小数点以下の表示で質問があります。
From:
Fumiaki Sakamoto <ght8270407fs@...>
Date:
2014-04-23 03:33:38 UTC
List:
ruby-list #49804
自己レスですみません。
おそらく、RubyのFloat演算は自動的に誤差の丸めをしており、6番目と8番目では丸め
きれずに小数点以下16桁で表示し、7番目は誤差が丸められていたということでしょう
か。
間違えであればご指摘ください。
宜しくお願いいたします。
From: Fumiaki Sakamoto <ght8270407fs@kfa.biglobe.ne.jp>
Reply-To: "Ruby users (Japanese)" <ruby-list@ruby-lang.org>
Date: 2014年4月23日水曜日 12:11
To: "Ruby users (Japanese)" <ruby-list@ruby-lang.org>
Subject: [ruby-list:49803] Re: 小数点以下の表示で質問があります。
度々すみません。
whileループでiをインクリメントするところが抜けておりました。
正しくは、
a = 0.1
b = 9.0
i = 1
c = 0.0
while i < 20 do
c = c + b * a ** i
output = sprintf("%18.16f", c)
print i, " ", c, " ", output, "\n"
i += 1
end
以上です。
宜しくお願いいたします。
From: Fumiaki Sakamoto <ght8270407fs@kfa.biglobe.ne.jp>
Reply-To: "Ruby users (Japanese)" <ruby-list@ruby-lang.org>
Date: 2014年4月23日水曜日 11:38
To: "Ruby users (Japanese)" <ruby-list@ruby-lang.org>
Subject: [ruby-list:49802] Re: 小数点以下の表示で質問があります。
すみません。質問の1行目で6番目と7番目とありますが、6番目と8番目です。
From: Fumiaki Sakamoto <ght8270407fs@kfa.biglobe.ne.jp>
Reply-To: "Ruby users (Japanese)" <ruby-list@ruby-lang.org>
Date: 2014年4月23日水曜日 11:25
To: "Ruby users (Japanese)" <ruby-list@ruby-lang.org>
Subject: [ruby-list:49801] 小数点以下の表示で質問があります。
お忙しい中を恐縮ですが質問があります。
下記の様なプログラムを実行すると、以下のようになります。
ruby --version
ruby 1.9.3p484 … [amd64-freebsd]
<プログラム>
require 'rational'
a = 0.1 あるいは a = Rational(1, 10)
b = 9.0
i = 1
c = 0.0
while i < 20 do
c = c + b * a ** i
output = sprintf("%18.16f", c)
print i, " ", c, " ", output, "\n"
end
<結果>
1 0.9 0.9000000000000000
2 0.99 0.9900000000000000
3 0.999 0.9990000000000000
4 0.9999 0.9999000000000000
5 0.99999 0.99999000000000000
6 0.9999990000000001 0.9999990000000001
7 0.9999999 0.9999999000000001
8 0.9999999900000001 0.9999999900000001
9 0.999999999 0.9999999990000000
10 0.9999999999 0.9999999999000000
11 0.99999999999 0.9999999999900000
12 0.999999999999 0.9999999999990000
13 0.9999999999999 0.9999999999999000
14 0.99999999999999 0.9999999999999900
15 0.999999999999999 0.9999999999999990
16 0.9999999999999999 0.9999999999999999
17 1.0 1.0000000000000000
18 1.0 1.0000000000000000
19 1.0 1.0000000000000000
<質問>
6番目と7番目の結果が桁数指定していなくても16桁で表示されました。
小数点以下を16桁にして表示させると7番目も普通に考えると16桁で表示されていても
おかしくないと思えるのにそうはならなかったのは何故でしょうか?
宜しくお願いいたします。
坂元史明