« クモガタテントウ | トップページ | バッテリーの日 »

2014年12月11日 (木)

πの近似分数:4

http://yamada-kuebiko.cocolog-nifty.com/blog/2014/12/post-e85e.html
2014年12月 9日 (火)「πの近似分数:3」
「πや割り算の結果を「文字=数字」として扱っても同じことができるのではないか」
↑ここで、こう書きました。「同じこと」というのは何かというと
   数を左から1桁ずつ取り出して比較する、という作業
これなんですね。

「数(すう)」の場合、小数点以下の桁を一つずつ取り出すには、10倍して整数部を取る、という操作でできました。
「数字」の場合だと、数字を10倍するなんてできませんので、別の方法を使います。
「3.1415926」と並んでいるのが、数字の列、文字列だとしますと、その文字列の一部分を取り出す関数がプログラミング言語には備わっているのです。
文字列が入っている文字列変数をa$とすると

左端からm文字取り出すのが「LEFT$(a$, m)」という関数。
右端からm文字取り出すのが「RIGHT$(a$, m)」
文字列のn文字目からm文字取り出すのが「MID$(a$, n, m)」

大抵の言語には備わっているはずです、標準じゃなかったり、形式が少し変わってたりするかもしれませんけどね。
機能的には同じものが提供されているはずです。

このMID$()を使って、nを1から順に増やしながら1文字取り出せば、
「3.1415926」から順に「3」「.」「1」「4」「1」・・・と取り出せるはずですね。

★で、書いたプログラムがこれ↓
!************************************************
!近似分数を計算し、どこまで合っているか表示する
!文字列として比較
!十進1000桁で実行
!************************************************

!*****プログラム動作の確認ために使った分数***********
!p = 256839923861488782607902790348837497679
!q = 81754686931803956266412424933874257924

!p = 60728338969805745700507212595448411044
!q = 19330430665609526556707216376512714945

!p = 76324089682448756762
!q = 24294712299901695663

!p = 2646693125139304345
!q = 842468587426513207

!p = 430010946591069243
!q = 136876735467187340

!p = 428224593349304
!q = 136308121570117

!p=355
!q=113
!****************************************************
LET n = 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
LET MAX = 100

INPUT  PROMPT "p=":p
INPUT  PROMPT "q=":q

LET a = p/q

LET s$ = STR$(n)
LET t$ = STR$(a)

FOR i = 1 TO MAX
   IF mid$(s$, i, 1) <> mid$(t$, i, 1) THEN
      LET keta = i
      EXIT FOR
   END IF
NEXT i

PRINT left$(s$, keta)
PRINT left$(t$, keta)
PRINT keta

END
------------------------------------
こういうものです。
「mid$()」「left$()」が小文字なのは、この関数が十進BASICでは「独自拡張機能」だからです。
このBASICが持っている「予約語」は、小文字で入力しても自動的に大文字になります。
他のBASICでも、例えばVBAでは予約語の「頭文字を大文字に」変えます。
こんな事情があるので、プログラムは小文字で書くことをお勧めします。
小文字で書いたのに何か変化が起きていたら、予約語かな、とわかりますので。

さて、これを実行した結果ですが、ファイルにしておきますのでマウスで左クリックしてください。ファイル内容が読めます。ダウンロードしたければ右クリックでどうぞ。

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

ポピュラーな 355/113 でみますと
p=355
q=113
3.1415926
3.1415929
  9

違いが出た桁までを文字列として出力しています。
で、「9」ですが、これは「3」と「.」を文字としてカウントし、違いの出た桁までをカウントして表示していますので
小数点以下なら「9-2-1=6」なんですね。
小数点以下6桁まで一致
もちろん「6」と表示させることは簡単ですが、プログラムの動作を垣間見るためにそのまま出しました。
また、「 9」と半角スペースが入っていますが、これはこの「9」が「文字」ではなく「数」として扱われたので、正負の符号を入れるための「半角スペース」が頭についているのです。

★数と数字と数概念について今、悩んでいます。
踏み込み始めればとめどないんですよね。プログラミング言語としても、人間の成長過程における数学の獲得過程にしても。
何か書きたいんだけどなぁ。

★とにかく、πの近似分数のあれこれ、所期の目的には一応決着がつきましたかね。

« クモガタテントウ | トップページ | バッテリーの日 »

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

コメント

コメントを書く

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

« クモガタテントウ | トップページ | バッテリーの日 »

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 暴想
無料ブログはココログ