それとも計算機が計算をまちがえるのでしょうか?先回の話では2n角形の辺の長さdnから2n+1角形の
辺の長さdn+1は次の式で求めることになっていました。
dn+1
= √[ 2−2√{1−( dn /2 )2}]
ここで次の計算を計算機でしてみましょう。
y = √(1−x)
z = 1−y2
上の式ではxからyを求める計算の逆の計算をyからzを求める計算ではしているので結局、z = xとなる
はずです。
実際のBasic Programは次のようになります。
x=0.01
y= sqr(1−x)
z=1−y^2
xの値を変えて実際に計算機で計算した結果は
x z
0.01 0.01
1E-5 9.99999999995449E-6
1E-15 1.11022302462516E-15
1E-16 2.22044604925031E-16
となります。xが小さくなるとzの値がxと一致しなくなります。この原因は1−xの計算にあります。1に比べてxが非常に小さくなると計算機の内部では計算桁数が不足して十分な精度の計算ができなくなります。
一般に2つの数の加算や減算を計算機でするとき、一方の数の絶対値が他方の数の絶対値より非常に小さくなると計算精度が悪くなり、このことを計算の桁落ちと呼びます。今回、正多角形の角の数が非常に大きくなると辺の長さは非常に小さくなり、1との減算で精度が悪化した結果として、角の数が大きな262144, 1048576では逆にπの計算の精度が悪化しました。高精度の計算を計算機でするときは桁落ちに注意が必要なことが今回の話の結論です。今回もBasic Programを載せます。下記のプログラムをメモ帳にコピー、ペーストして「計算精度の検討.vbs」と名前をつけて保存してから、保存したファイルをダブルクリックすれば計算できます。
x=1E-15
y=sqr(1-x)
z=1-y^2
MsgBox("x=" & x & vbCR & "z=" & z |
|