« 羊さん | トップページ | ヒメミカンソウ »

2015年1月23日 (金)

√2 の話:その13:√2の求め方。★Simpleな考え方:その2

http://yamada-kuebiko.cocolog-nifty.com/blog/2015/01/post-857a.html
2015年1月22日 (木)
前の記事↑で作ったプログラムのVer.2です。

★ループは決められた回数だけ回すことにしてしまって、
逐次求まってくる近似値a=√nの値と、aの自乗の値を並べて表示して、どのようにnに近づいていくのか見るのも面白いかもしれない。
こんなことが頭に浮かぶと、同じことをやるプログラムでも、Ver.2というのが生まれてくるんですね。
こうなります。
********************
!一歩ずつ進む。平方根のみに対応
!nは整数でなくても可

!root(2) = 1.4142135623730950488016887242097
!root(3) = 1.7320508075688772935274463415059

INPUT PROMPT "n = ": n        !平方根を求める数を入力
LET stp =1                             !最初の歩幅は1
LET a = 0                               !出発は0から
FOR i = 1 TO 100                   !FOR~NEXTループの回数
   LET a = a + stp                    !一歩進む
   IF a^2 > n THEN                  !nより大きかったら
      LET a = a - stp                !一歩戻って
      LET stp = stp/10             !歩幅を1/10にして
      PRINT i;
      PRINT a;
      PRINT a*a                       !途中経過をプリントして
   END IF
NEXT i                                  !FORへ戻る
PRINT
PRINT a                                !結果をプリント

END
********************
「DO~LOOP」は、ある条件が成立している間ループを回る、という命令でした。
今回の「FOR~NEXT」はループを回す回数を指定するループ命令です。
省略なしで書くと
「FOR i = 1 TO 100 STEP 1」
こう書きます。iを1から始めて、1ずつカウントアップし、100までループを回る、という意味です。
STEP が1の場合、これは省略可。
そして、「STEP」という語はBASICの予約語ですので、ほかの意味で使うことは許されません。
そのために、「歩幅」を「STEP」とは書けないのです。
で、母音を省いて「stp」という名前にしました。
「STEP」を整数ではなく、小数で書くことは可能です。「STEP 0.1」とかね。でもあまり推奨しません。
誤差の蓄積の問題がありますので。

★実行結果は
n = 2
2  1  1
7  1.4  1.96
9  1.41  1.9881
14  1.414  1.999396
17  1.4142  1.99996164
19  1.41421  1.9999899241
23  1.414213  1.999998409369
29  1.4142135  1.99999982358225
36  1.41421356  1.99999999328787
39  1.414213562  1.99999999894473
43  1.4142135623  1.99999999979326
51  1.41421356237  1.99999999999125
55  1.414213562373  1.99999999999973
56  1.414213562373  1.99999999999973
66  1.41421356237309  1.99999999999999

1.41421356237309

上は「十進15桁」で実行した結果です。
近似値を自乗した2に近づいていくのが目に見えますね。
コレ視覚的でいいな。
左端の数値は、ループ回数です。何回目のループでこの値が出ているか、という目安です。
計算桁数の限度に来ていますので、これ以上ループ回数を増やしても値はよくなりません。

そこで、これを「十進1000桁」でやると
n = 2
2  1  1
7  1.4  1.96
9  1.41  1.9881
14  1.414  1.999396
17  1.4142  1.99996164
19  1.41421  1.9999899241
23  1.414213  1.999998409369
29  1.4142135  1.99999982358225
36  1.41421356  1.9999999932878736
39  1.414213562  1.999999998944727844
43  1.4142135623  1.99999999979325598129
51  1.41421356237  1.9999999999912458800169
55  1.414213562373  1.999999999999731161391129
56  1.414213562373  1.999999999999731161391129
66  1.41421356237309  1.9999999999999857198323561481
72  1.414213562373095  1.999999999999999861967979879025
73  1.414213562373095  1.999999999999999861967979879025
78  1.41421356237309504  1.9999999999999999751050648688726016
87  1.414213562373095048  1.999999999999999997732481866842122304
96  1.4142135623730950488  1.99999999999999999999522356663907438144
97  1.4142135623730950488  1.99999999999999999999522356663907438144
99  1.414213562373095048801  1.999999999999999999998051993763820571537601

1.4142135623730950488011
前進していく様子が見えて楽しいですね。
指定した100回のループの限度近くまで行っています。
そこで、余力を見込んで、ループを1000回も回したりすると
{最後のところだけ表示します。10桁ずつ手動で区切りました。}

993
1.
4142135623 7309504880 1688724209 6980785696 7187537694
8073176679 7379907324 7846210703 8850387534 3276415727
3501384623 0912297024 9248360558 5073721264 4121497099
9358314132 2266592750 55927557

1.
9999999999 9999999999 9999999999 9999999999 9999999999
9999999999 9999999999 9999999999 9999999999 9999999999
9999999999 9999999999 9999999999 9999999999 9999999999
9999999999 9999999999 9999999717 2972914074 9587760834
2065613833 8946232559 2854640200 6918559451 5930651819
5006313683 2928984512 4159757899 0595865375 3300033219
7264611468 8416590196 4540411810 5154967204 7410241631
988249

ループを993回まわったところで
小数点以下170桁以上正しいようですね。
なかなかの見ものでした。
この方式をこれからも採用しましょう。

« 羊さん | トップページ | ヒメミカンソウ »

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

コメント

コメントを書く

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

« 羊さん | トップページ | ヒメミカンソウ »

2021年5月
            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 31          
サイト内検索
ココログ最強検索 by 暴想
無料ブログはココログ