タイトルにある Feynman point ちうのは、円周率の一部に 9 が連続する箇所があり、それが何故か Feynman point と呼ばれているとの話であります。
ref. ファインマン・ポイント - Wikipedia
https://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%B3%E3%83%9E%E3%83%B3%E3%83%BB%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88
円周率の小数点以下 762桁から "999999" が現れるとの事。
そういや、CASIO の Topics ページに、以下の記事がありました。
ref. 小学3年生の小原さん 関数電卓でPythonを動かす「シン・電卓アート」を制作 - CASIO Topics
https://www.casio.co.jp/topics/article/2024/K-055/
python で script を組んで、円周率 1000桁を憶えようとしている小学3年生の記事であります。
時代はここまで進んでおりました。マイッタ。
過去に、100円ショップの電卓をいじって興じている幼児をみて「電卓で遊ぶ幼児は理学者の夢を見るか」というネタを書いた憶えがあるのですが、現実はもっと進んでいたという次第。
25歳の頃「円周率を憶えるゾ !」と頑張ってはみたものの、16桁程度で満足してしまったバカチンの当方としては、オツムの体操と称して、円周率を求める script を使って遊んでみたのですが、その辺りの話を書いておきますヨ。
円周率を計算する upython script は以下の様であります。(実は再掲)
def machin(n):これを使うと、(原理的には)所望の桁数分、円周率を計算をしてくれるのですが、実際には丸め誤差があるので、余裕をみて計算桁を指定するのがよいです。
sm=0
term_1=10**n//5
term_2=10**n//239
flg=0
for j in range(n):
dv=1+2*j
if flg==0:
sm+=term_1//dv*4
sm-=term_2//dv
term_1=term_1//5//5
term_2=term_2//239//239
else:
sm-=term_1//dv*4
sm+=term_2//dv
term_1=term_1//5//5
term_2=term_2//239//239
flg=1-flg
return (sm*4)
例えば 500桁を計算するならば、510桁とか。
で、fx-CG50 の upython でコレを実行すると、およそ 508までは計算できました ... Feynman point の 762桁には届かない。ウーム。
800桁程度まで計算できるならば、Feynman Point の部分を取り出すため、つぎの追加をする所なのですが、
print(str(machin(800))[760:769])CASIO python では無理ゲーでした、残念。
しかし、諦めが悪いので Python Extra などで試してみましたら、ナント ! 計算できてしまいますネ ! コリャーエエ。
調子に乗って、XCAS でも試してみましたら、これでも計算できます。いや、不可解。
メモリ管理などの方法が違う、という感じなのかも知れません。
この 「Feynman point を表示する」という設問については、C.BASIC で実現できそうな気がするのですが、そのために、C.BASIC のマニュアルを眺めていたら、その機能の多さに圧倒されてしまい、勉強が進んでおりません。
折を見て、書けたらと思います。
ス・キ・魔 :
fx-9750GIII の CASIO python では、machin(254) まで計算してくれましたが、メモリの少ない 9750GIII では致し方のない所であります。
と・こ・ろ・が ! XCAS では実行できますネ。ただ、Clock UP の仕掛けがないので、40秒くらいの時間が掛かります。
str(machin(800))[760:769]
"349999998"
0 件のコメント:
コメントを投稿