回答編集履歴

1

有効数字的に考えてみた

2018/04/20 16:09

投稿

swordone
swordone

スコア20651

test CHANGED
@@ -13,3 +13,33 @@
13
13
  - 仮数部は10の循環で52ビットまで取ると、末尾は10で終わる。(1010...10)
14
14
 
15
15
  そのあとにまだ1010...と続き、これは10進法で例えるなら丸める桁が51...のように続いていることになり、切り上げが発生する。結果、1010...1011になる
16
+
17
+
18
+
19
+ ここからは私の推測だが、
20
+
21
+ 最下位ビットの1には誤差を含むことになる。この1は2進法の小数第51位なので、2^(-51)を表す。
22
+
23
+ 2^(-51) = 0.000000000000000444089209850062616169452667236328125(小数首位が第16位)
24
+
25
+ であるが、これには最大でこれの半分、
26
+
27
+ 2^(-52) = 0.0000000000000002220446049250313080847263336181640625
28
+
29
+ のプラスマイナスの誤差を含んでいる。
30
+
31
+ つまりこの部分だけで考えると、小数首位が2~6の幅を持ち、その下の桁の数字はもはや信頼できる意味を持たない数字ということになる。
32
+
33
+
34
+
35
+ そこで、これの小数首位までを有効数字とし(実際この位も振れ幅が大きいが、これを含めないと最下位ビットが0の場合と差がなくなる)、その下の桁で四捨五入して10進数の表記にしていると考えられる。
36
+
37
+ maisumakunさんのコメントから、完全な数値が
38
+
39
+ 3.333333333333333481363069950020872056484222412109375
40
+
41
+ ということなので、これの小数17位を四捨五入して
42
+
43
+ 3.3333333333333335
44
+
45
+ となったのではなかろうか。