正多角形で円周率を計算

VC++ で円に内接する正多角形を用いて円周率を計算します。
昔懐かしい汎用コンピュータ & MS-DOS時代の面白そうなプログラムを拾い出してみました。

前田稔(Maeda Minoru)の超初心者のプログラム入門


円周率の話
円周率の最初の40桁です。
pai=
    1: 3.1415 9265 3589 7932 3846 2643 3832 7950 2884 1971 

プログラムの説明

  1. 私がコンピュータを習い始めたころに FORTRAN で作成したプログラムをベースにC言語に置き換えました。
    FORTRAN のプログラムが始めて動いた時は、なかなか面白い画期的な方法が見つかったと思っていたのですが、 何のことは無いコンピュータが開発される以前から同じようなことを考える数学者がいたのですね。 (^_^;
  2. 半径(R)=1の円の外周は 2лR であり、1/2にすれば円周率が求まります。
  3. いま、円に内接する正6角形から計算を始めることにします。
    正6角形の一辺の長さは半径と同じ1なので「一辺の長さ×辺の数/2」が円周率の近似値になります。
    Pai = 1*6/2 = 3

  4. 正6角形が正12角形になったときの辺の長さを計算することを考えます。
    正6角形の一辺に円の中心から垂線を下します。
    このとき「斜辺=1,底辺=LEN/2」の直角三角形ができます。
    高さ HT はピタゴラスの定理を使って簡単に計算できます。
    HT(三角形の高さ) = SQRT(R**2-(LEN/2)**2) = SQRT(1-(LEN/2)**2)
  5. 正12角形の斜辺(LEN2)も「高さ= 1-HT,底辺= LEN/2」の直角三角形からピタゴラスの定理を使って計算できます。
    LEN2(正12角形の斜辺) = SQRT((LEN/2)**2 + (1-HT)**2))

  6. これを繰り返せば、正24角形, 正48角形, 正96角形・・・と計算を進めることができます。
  7. 新規プロジェクトから、空の Console Application を作成して、次のファイルをプロジェクトに加えて下さい。
  8. 円周率を計算して表示するプログラムです。
        /*★ 円に内接する正六角形から円周率を計算する     前田  稔 ★*/
        #include <stdio.h>
        #include <math.h>
    
        //★ MAIN PROGRAM
        int  main()
        {   double  kaku,len,ht,l2,hw;
            int     i;
    
            kaku= 6.0;
            len= 1.0;
            for(i=0; i<15; i++)
            {   printf("正多角形=%f    LEN=%f    PAI=%f\n",kaku,len,len*kaku/2.0);
                l2= len/2.0;
                ht= sqrt(1.0-l2*l2);
                hw= 1.0-ht;
                len= sqrt((hw*hw)+(l2*l2));
                kaku= kaku+kaku;
            }
            return(0);
        }
        
  9. ビルド(コンパイル)に続いて実行を行います。
    ウインドウに表示された実行の結果です。
    そこそこの精度で円周率を求めることができます。 (^_^;
        正多角形=    6.000000    LEN=1.000000    PAI=3.000000
        正多角形=   12.000000    LEN=0.517638    PAI=3.105829
        正多角形=   24.000000    LEN=0.261052    PAI=3.132629
        正多角形=   48.000000    LEN=0.130806    PAI=3.139350
        正多角形=   96.000000    LEN=0.065438    PAI=3.141032
        正多角形=  192.000000    LEN=0.032723    PAI=3.141452
        正多角形=  384.000000    LEN=0.016362    PAI=3.141558
        正多角形=  768.000000    LEN=0.008181    PAI=3.141584
        正多角形= 1536.000000    LEN=0.004091    PAI=3.141590
        正多角形= 3072.000000    LEN=0.002045    PAI=3.141592
        正多角形= 6144.000000    LEN=0.001023    PAI=3.141593
        正多角形=12288.000000    LEN=0.000511    PAI=3.141593
        正多角形=24576.000000    LEN=0.000256    PAI=3.141593
        正多角形=49152.000000    LEN=0.000128    PAI=3.141593
        正多角形=98304.000000    LEN=0.000064    PAI=3.141593
        

超初心者のプログラム入門(C/C++)