円周率 1000 桁
PC-1 で円周率 1000 桁を計算してみた。
メモリ容量の関係で、プログラムを3(+1)分割し、
イニシャルローダーを用いてそれぞれ手動で読み込む形になった。
(もうすこし頑張れば自動読み込みができそうなのだが…)
準備として作成した、イニシャルオーダー R0 で読み込む
「円周率 400 桁」も掲載する。
使用法
WebGL 版
で(も)試せます。
円周率 1000 桁
-
テレプリンターの左の方にある"LOAD"ボタンを押し、
"pi_1000_0.ptw" を選択する。
本体の "INITIAL LOAD" を押し、読み込む。
"FREE RUN" を押して有効にしておく。
(この後そのままにしておいてよい、はず。)
"CLEAR START" で実行する。
すぐに終了し、テレプリンターに"0"と印字される。
起動直後であればこのステップは不要。
-
同様にして
"pi_1000_1.ptw" を実行する。
30 分強(多分)で終了し、テレプリンターに"1"と印字される。
-
同様にして
"pi_1000_2.ptw" を実行する。
9 分弱(多分)で終了し、テレプリンターに"2"と印字される。
-
同様にして
"pi_1000_3.ptw" を実行すると、
円周率 1000 桁が印字される。
円周率 400 桁
-
テレプリンターの"LOAD"ボタンを押し、
"R0.ptw" を選択する。
本体の "INITIAL LOAD" を押し、読み込む。
-
テレプリンターの"LOAD"ボタンを押し、
"pi_400.ptr" を選択する。
"FREE RUN" を押して有効にし、
"CLEAR START" で R0 を実行する。
読み込みが終わると計算が始まり、
7 分弱(多分)で円周率 400 桁の印字が始まる。
プログラムについて
マチンの公式を用いた。
"pi_1000_0.ptw" は変数領域をクリアし、
"pi_1000_1.ptw" は 16arctan(1/5) を計算し、
"pi_1000_2.ptw" は 4arctan(1/239) を引く。
"pi_1000_3.ptw" で印刷する。
"pi_1000_1.ptw" では、総和と (1/5)^{2n+1} を格納するために
97 長語の領域を二つ利用する。
まず (1/5)^{2n+1} を計算し、
それを 2n+1 で割りながら総和に加減している。
"pi_1000_2.ptw" では "pi_1000_1.ptw" との差分を
上書きし、実行している。
印刷ルーチンには、e1000桁のものに必要な変更を施して用いている。
(ただし、元のものはよどみなく印刷が行われる凝ったプログラムだが、
400 桁の方はいくぶん退化していてそうなっていない。)