« ジョウロ | トップページ | 何日の月でしょう? »

2015年2月 3日 (火)

√2 の話:その18:√2の求め方。ニュートン法:2

★大抵のアルゴリズムの本では、4,5回も繰り返すと、普通の計算精度を超える、速い、ということで、話を済ませているのですが、もったいない。2次の収束の威力とはどのようなものか、もうちょっと追及してみましょう。

十進BASICの持つ1000桁モードで走らせてみました。
ナント!
10回目のループで750桁を超えていまして、11回目のループでこのBASICの計算の限界を超えてしまいました。
というのは、近似値を自乗した値が「1.9999999……」となって、2より小さくなってしまったのです。
原理的に大きい側から近づいているのですから、近似値の自乗が2より小さくなるわけはないのです。
これは計算機の限界を超えたという証拠です。

10
1.
4142135623 7309504880 1688724209 6980785696 7187537694
8073176679 7379907324 7846210703 8850387534 3276415727
3501384623 0912297024 9248360558 5073721264 4121497099
9358314132 2266592750 5592755799 9505011527 8206057147
0109559971 6059702745 3459686201 4728517418 6408891986
0955232923 0484308714 3214508397 6260362799 5251407989
6872533965 4633180882 9640620615 2583523950 5474575028
7759961729 8355752203 3753185701 1354374603 4084988471
6038689997 0699004815 0305440277 9031645424 7823068492
9369186215 8057846311 1596668713 0130156185 6898723723
5288509264 8612494977 1542183342 0428568606 0146824720
7714358548 7415565706 9677653720 2264854470 1585880162
0758474922 6572260020 8558446652 1458398893 9443709265
9180031138 8246468157 0826301005 9485870400 3186480342
1948972782 9064104507 2636881313 7398552561 1732204024
5091227700 2269411275 7362728049 5741473629 3353181629
6920543260 7709384331 6328892995 8463476441 8509603415
7210767753 5413083925 8336964677 5842358847 5634111018
1393980467 4776409151 5873323060 8686976354 8287544437
4038163473 2876540877 0734706632 3410744091 039323939

2.
0000000000 0000000000 0000000000 0000000000 0000000000
0000000000 0000000000 0000000000 0000000000 0000000000
0000000000 0000000000 0000000000 0000000000 0000000000
0000000000 0000000000 0000000000 0000000000 0000000000
0000000000 0000000000 0000000000 0000000000 0000000000
0000000000 0000000000 0000000000 0000000000 0000000000
0000000000 0000000000 0000000000 0000000000 0000000000
0000000000 0000000000 0000000000 0000000000 0000000000
0000000000 0000000000 0000000000 0000000000 0000000000
0000000000 0000000000 0000000000 0000000000 0000000000
0000000000 0000000000 0000000000 0000000000 0000000000
0000000000 0000000000 0000000000 0000000000 0000000000
0000000000 0000000000 0000000000 0000000000 0000000000
0000000000 0000000000 0000000000 0000000000 0000000000
0000000000 0000000000 0000000000 0000000000 0000000000
0000000000 0000000000 0000000000 0009516700 7892465243
2229533797 7648144589 1679672061 7224451270 9697198073
9991183302 6091596504 6118192872 6371082101 0596831860
9602034427 8479630372 4611109424 6373333656 2834741016
0800125940 4399579438 6929953574 3016412241 8100955106
893717

11
1.
4142135623 7309504880 1688724209 6980785696 7187537694
8073176679 7379907324 7846210703 8850387534 3276415727
3501384623 0912297024 9248360558 5073721264 4121497099
9358314132 2266592750 5592755799 9505011527 8206057147
0109559971 6059702745 3459686201 4728517418 6408891986
0955232923 0484308714 3214508397 6260362799 5251407989
6872533965 4633180882 9640620615 2583523950 5474575028
7759961729 8355752203 3753185701 1354374603 4084988471
6038689997 0699004815 0305440277 9031645424 7823068492
9369186215 8057846311 1596668713 0130156185 6898723723
5288509264 8612494977 1542183342 0428568606 0146824720
7714358548 7415565706 9677653720 2264854470 1585880162
0758474922 6572260020 8558446652 1458398893 9443709265
9180031138 8246468157 0826301005 9485870400 3186480342
1948972782 9064104507 2636881313 7398552561 1732204024
5091227700 2269411275 7362728049 5738108967 5040183698
6836845072 5799364729 0607629969 4138047565 4823728997
1803268024 7442062926 9124859052 1810044598 4215059112
0249441341 7285314781 0580360337 1077309182 8693147101
7111168391 6581726889 4197587165 8215212822 951848847

1.
9999999999 9999999999 9999999999 9999999999 9999999999
9999999999 9999999999 9999999999 9999999999 9999999999
9999999999 9999999999 9999999999 9999999999 9999999999
9999999999 9999999999 9999999999 9999999999 9999999999
9999999999 9999999999 9999999999 9999999999 9999999999
9999999999 9999999999 9999999999 9999999999 9999999999
9999999999 9999999999 9999999999 9999999999 9999999999
9999999999 9999999999 9999999999 9999999999 9999999999
9999999999 9999999999 9999999999 9999999999 9999999999
9999999999 9999999999 9999999999 9999999999 9999999999
9999999999 9999999999 9999999999 9999999999 9999999999
9999999999 9999999999 9999999999 9999999999 9999999999
9999999999 9999999999 9999999999 9999999999 9999999999
9999999999 9999999999 9999999999 9999999999 9999999999
9999999999 9999999999 9999999999 9999999999 9999999999
9999999999 9999999999 9999999999 9999999999 9999999999
9999999999 9999999999 9999999999 9999999999 9999999999
9999999999 9999999999 9999999999 9999999999 9999999999
9999999999 9999999999 9999999999 9999999999 9999999999
9999999999 9999999999 9999999999 9999999999 9999999994
0894507

★11回のループで、どのくらい正しかったのか知りたくなりました。

http://www.usamimi.info/~geko/arch_pro/0x003_calculation/0-3alpha7/sqrt2-10000.html
ルート2小数点以下15360桁 by JavaScript
というページです↑
ここから、1000桁コピーしました。
10000桁以上を計算したのですから、1000桁についてはおそらく確実に正しい。
{どんな計算でも、最後の辺りには誤差がつきまといますが、その10000桁を超える位置の誤差がここ1000桁まで上がってくることはまずあり得ない、という意味です。}
で、その値と、私が十進BASICで計算した値を、上下に並べて一目で比較できるようにしたファイルへリンクします。
ここをマウスで左クリックすればファイルが読めますし、右クリックすればダウンロードできます。

「sqrt2_1000.txt」をダウンロード

最後のところです。
8215212822 9518488472
8215212822 951848847←この「7」が999桁目です。
ここまで正しかったのですね。

で、正確な値はその次に「2」があるのですが、それが十進BASICでは落ちてしまいました。
その結果、自乗したときに2よりわずかに小さくなって、1.9999……となってしまったのでしょう。

これ以上は、JAVAなりJAVA SCRIPTを使うか、十進BASICの1000桁モードで「多倍長計算」のルーチンを作るしかないでしょうね。
さすがにもう、そういう気力は湧きません。昔はいろいろ多倍長ルーチンも作ったけどなぁ。年です。

« ジョウロ | トップページ | 何日の月でしょう? »

理科おじさん」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

« ジョウロ | トップページ | 何日の月でしょう? »

2017年9月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
サイト内検索
ココログ最強検索 by 暴想
無料ブログはココログ