簡単な計算をするプログラム
フリー アクセスカウンターアクセスカウンター 無料 情報検索エンジン 登録グーグル SEOホームページ分析

これからUPするプログラムはすべて、DOS Prompt で実行するものです(解凍後)。GUI の利用はありません。時間がありましたら実行してみてください。(ソースはすべて自作品です)

●まず最初は、地球上の2点間の最短距離を計算するプログラムです。ただしこれは、地球が完全な「回転楕円体」であるとして計算します。 2点の位置情報(緯度、経度)を入力するとあとは電脳が計算してくれるようにしました。位置情報はたとえば「Google Earth」などで高精度のものが得られます。(赤道半径=6378.140km、極半径=6356.755km
"完全な球体"としたときに比べ、プログラムが面倒な割には結果の数値はあまり変わりません・・・当然かな?

距離の計算


●次はランニングに使える表を作ります。似たようなものですが2つ用意しました。「秒数から」は、100m進むのに要する秒数をプログラム名の次に入力すると画面いっぱいに表ができます。また、「時速から」は、時速をkm/hで入力します。いずれも入力値は小数第一位までで、常識的な数値を入力するようにしています。もちろん出力先をテキストファイルにリダイレクトすることもできます。
例 >marathon1 28 (画像参照)
秒数から

時速から



---------------------------------------------------------------------------

●私が多桁計算のプログラムを作ろうと思ったのはもちろん、かなり以前から「円周率 (pi)」に強い興味があったからでした。この魅力ある数を可能な限り正確に計算してみようとずっと考えていて、電脳機器をそろえた2000年頃から数年間をかけて一応の成果を得たのですが、その手始めとして作った、「ルート2」の値を計算するプログラムを UP します(正確には得た値を2倍したものがルート2です)。ニュートン法(2次収束)利用で、多桁数同士の積には FFT (Fast Fourier Transform : 複素数版) を使ったオリジナル・プログラムです。 これは DOS Prompt で
>sqrt2r 22 s.bin

などと入力すると求める値 0.70710678... が小数点以下 2^22=4,194,304 桁まで正確に計算できるものです(最後の s.bin は保存ファイル名で省略可)。ファイルの保存形式は、十進8桁づつを int型データ(32bits、4Bytes)に収め実行時の配列をそのままバイナリー・ファイルに格納しています。従って上記のファイル s.bin の大きさは次のようになります。

4194304/8 * 4 = 2,097,152Bytes = 2MB

0.70710678...

これを少し古いIBM Think Pad(1.4GHz,1GBmem)にて実行したときの時間は次のとおりでした(2^25=33,554,432のとき、memは1GBほど必要になります)。

2.203s(20), 4.237s(21), 10.535s(22), 22.092s(23), 46.077s(24), 95.417s(25)


●その「円周率 (pi)」ですが、最も簡単な公式(Machinの公式、逆正接の級数展開)を利用して計算するプログラムを UP します。これは、たくさんの分数を小数になおして加えていくものですが、手計算と同じことを電脳にさせています(少し工夫をしてはいますが)。これは有効桁数を2倍にするには4倍の手間がかかります。
私は昔、この公式を使って手計算を実行したことがありますが、わずか50桁ほどで諦めた記憶があります。また、19世紀半ばに William Shanks という人がこの公式を使って pi を小数点以下707桁まで計算した記録が残っています(百年後に電脳による"ごく短時間の"検証で正値は527桁までであることが分かりました・・・そのパワーを「電脳発明」に傾けた方がよかったのかな?)。
なおこの数は無理数の中でも一段と高度な「超越数」であることが証明されています。
DOS prompt で >machin3 20 (2^20=1,048,576 桁) としたとき計算に1時間以上を要します。計算機がいかに速く処理できるとはいえ、桁数を倍にするのに「4倍の手間」というのは致命的です。
pi = 3.1415926535 8979323846 2643383279 5028841971 6939937510 ・・・
(産医師異国に向かう 産後厄なく 産婦みやしろに 虫散々闇に鳴く・・・)

円周率1

これを上記IBM Think Padにて実行したときの時間は次のようになりました(これは末尾誤差なしです)。

21.93s(16), 87.65s(17), 350.59s(18)、5657.05s(20)

上記の「4倍」を2.3倍ほどで実行できるプログラムを次に UP します。これは「Borwein の公式」という少し複雑な漸化式を使っています。繰り返しの計算回数は少ない(4次収束)のですが、複雑な式ゆえ計算時間はかかります。漸化式利用の場合は必要な桁数を初めから"引っ張って"計算するため、FFT の利用は欠かせません(プログラムは 2^25 桁までの計算、末尾誤差あり)。
>bor3 20 pi.bin

と入力すると、pi を 2^20=1,048,576 桁まで計算し、pi.bin という名で保存します。
円周率2

円周率計算の説明

 このプログラムを一部改造して、pi の値を 2^27=134,217,728 桁まで計算し、確認した結果のうちの「はじめの1億桁」について数字の出現状況を調べてみました。
0から9までの数字がほぼ"平等"に出現しているのが分かります!。
数字
出現数
---
9,999,922
---
10,002,475
---
10,001,092
---
9,998,442
---
10,003,863
---
9,993,478
---
9,999,417
---
9,999,610
---
10,002,180
---
9,999,521



●「素数」の個数を計算するプログラムです。2,3,5,7,11,13,17,19,23、29,31、37,41、43、・・・と不規則に出現し、また限りなく続く素数が、ある自然数 N までにいくつあるかを計算します。あわせて最後の4個も表示します。上記同様 DOS prompt で、

>sieveh 10000

などと入力します。N が「1億」のとき、約100MB の mem が必要です。
なお、x が大きいとき 1 から x までに含まれる素数の個数を y とするとおよそ次の式が成り立ちます。

y=x/(ln(x)-1)
素 数


N までの素数の個数 P(N) と上式の値を表にしますと次のようになります。
N
P(N)
x/(ln(x)-1)
ratio
10^3
---
168
169.3
1.00755
10^4
---
1,229
1,218.0
0.99103
10^5
---
9,592
9,512.1
0.99167
10^6
---
78,498
78,030.4
0.99404
10^7
---
664,579
661,459.0
0.99531
10^8
---
5,761,455
5,740,303.8
0.99633
10^9
---
50,847,534
50,701,542.4
0.99713
10^10
---
455,052,512
454,011,971.3
0.99771


●「調和級数
調和級数の和を計算するプログラムです。S(n)=1+1/2+1/3+1/4+・・・+1/n はn の増加に伴い、ゆるやかです(対数的増加)がいくらでも大きくなります。この級数の和をある n までで切って求めます。有効桁数を63桁としました。
調和級数

この和が初めて19および20を超えるのは次に示すとおりです。また、ずっとずっと先の n について 99<S(10^43)<100 が成り立ち、和が100に達するには気の遠くなるほど(まったく人間的尺度ではありません!)多くの項数が必要です。

S(100,210,581)=19.00000 00097 33298 61541...、  S(272,400,600)=20.00000 00016 17442 18955...

さらに、調和級数の各項を2乗した級数の和は pi^2/6、4乗した級数の和は pi^4/90、6乗した級数の和は pi^6/945、8乗した級数の和は pi^8/9450、10乗した級数の和は pi^10/93555、12乗した級数の和は pi^12×691/638512875、14乗した級数の和は pi^14×2/18243225、16乗した級数の和は pi^16×3617/325641566250、18乗した級数の和は pi^18×43867/38979295480125、・・・ などと計算されますが、各項を奇数乗した級数の和、例えば1+1/2^3+1/3^3+1/4^3+1/5^3+・・・ はどんな種類の数なのかさえわかっていません。少々それました・・・それにしても「自然数」に pi が出てくるとはまことに不思議ですね。

三次方程式の解
実数を係数とする三次方程式を解く(近似値を求める)プログラムです。三次関数のグラフからわかりますが、実数係数の三次方程式は少なくとも一つの実数解があります。さらに広い見地からは、「複素数を係数とするn次の代数方程式はちょうどn個の解を複素数の範囲に持つ」ことが証明されています(代数学の基本定理)。
三次方程式を解く


ファイルの先頭部分を見る
保存したデータファイルの先頭部分を表示させるにはこのプログラムを使います。一つの配列に8桁が格納されています。
データ表示
>readintb2 64(配列数) pi.bin(ファイル名)



******************************** ▲▲▲ *****************************

(恐縮ですが計算ソフトを運用し、万一不利益を被っても責任を負いかねます(が住み着いている可能性もあります)。予めご了承ください。)
(ご意見、ご感想をどうぞ。)