正多角形で円周率を求める

C:\DATA\Java2\Dos>java Pai
正6.0角形    円周率 : 3.0
正12.0角形    円周率 : 3.105828541230249
正24.0角形    円周率 : 3.1326286132812378
正48.0角形    円周率 : 3.1393502030468667
正96.0角形    円周率 : 3.14103195089051
正192.0角形    円周率 : 3.1414524722854624
正384.0角形    円周率 : 3.141557607911858
正768.0角形    円周率 : 3.1415838921483186
正1536.0角形    円周率 : 3.1415904632280505
正3072.0角形    円周率 : 3.1415921059992717
正6144.0角形    円周率 : 3.1415925166921577
正12288.0角形    円周率 : 3.141592619365384
正24576.0角形    円周率 : 3.141592645033691
正49152.0角形    円周率 : 3.141592651450768
正98304.0角形    円周率 : 3.1415926530550373
正196608.0角形    円周率 : 3.1415926534561045
正393216.0角形    円周率 : 3.141592653556372
正786432.0角形    円周率 : 3.141592653581438
正1572864.0角形    円周率 : 3.1415926535877046
正3145728.0角形    円周率 : 3.1415926535892713
正6291456.0角形    円周率 : 3.141592653589663
正1.2582912E7角形    円周率 : 3.141592653589761
正2.5165824E7角形    円周率 : 3.1415926535897856
正5.0331648E7角形    円周率 : 3.1415926535897913
正1.00663296E8角形    円周率 : 3.141592653589793
正2.01326592E8角形    円周率 : 3.1415926535897936
 -- Press any key to exit (Input "c" to continue) --
正多角形の外周から円周率の近似値を求めて表示します。

前田稔の超初心者のプログラム入門

プログラムの作成

  1. メモ帳などでタイプして Pai.java の名前で保存して下さい。
        //★ 正多角形で円周率を計算する  前田 稔
        class Pai
        {   public static void main(String args[])
            {   double  k,l,h,hw,lw,w;
                int     i;
    
                k= 6;
                l= 1;
                for(i=0; i<26; i++)
                {   System.out.print("正" + k + "角形    ");
                    System.out.println("円周率 : " + l*k/2);
                    w= l/2;
                    lw= w*w;
                    h= Math.sqrt(1-lw);
                    hw= 1-h;
                    l= Math.sqrt(hw*hw+lw);
                    k= k+k;
                }
            }
        }
        
  2. Pai.java をコンパイルして Pai.class を作成して class オブジェクトを実行して下さい。
    コンパイルの詳細は Java を動かす を参照して下さい。
  3. ページ先頭の画面が表示されたら完成です。
    ちなみに円周率の最初の部分は、次のようになっています。
    3.1415 9265 3589 7932 3846 2643 3832 7950 2884 1971 6939 9375 1058

プログラムの説明

 半径(r)=1の円周は 2лr であり、1/2にすれば円周率の近似値が求まります。
 いま、円に内接する正六角形の外周から円周率の近似値を計算すると3になります。
   円周率の近似値 = 1*6/2
                      = 3
  これを半径(r)=1の外周から求めた円周率の初期値とします。



 次に正6角形の値を元に、正12角形の外周を計算します。
 1/6に分割した円弧に二分線を描きます。
       lw(多角形の辺/2) = 正6角形の1辺/2
       h(三角形の高さ)   = SQRT(1**2-lw**2)
        l(八角形の辺)    = SQRT((1-h)**2 + lw**2) / 2
 正6角形より正12角形の方が円に近く、正24角形の方がより円に近くなります。
 これを繰り返せば、かなり正確な円周率を求める事ができるはずです。


プログラムで使用する領域は double タイプで定義して下さい。
double タイプの説明は Java で良く使う変数 を参照して下さい。
Math.sqrt() が平方根を計算する関数です。
例えば「1-lw」の平方根を計算する場合には h= Math.sqrt(1-lw); と記述します。

円周率の話

【演習】

このプログラムでは正六角形から始めましたが正四角形から始めるプログラムを作成して下さい。

超初心者のプログラム入門(Java2)