C# で 連分数展開を使って π を求める
πの求め方
using System; public class CS0512 { public static void Main() { for (int i = 11; i <= 31; i += 2) { double radian = 1; double x2 = radian * radian; // 自作の逆正接関数 double d1 = myAtan(radian, x2, i, 0.0); // i:必要な精度が得られる十分大きな奇数 // 結果を π と比較 Console.WriteLine(string.Format("{0,2:D} : {1,13:F10}, {2,13:F10}", i, d1 * 4, d1 * 4 - Math.PI)); } } // 自作の逆正接関数 private static double myAtan(double x, double x2, int n, double t) { int m = n / 2; t = (m * m * x2) / (n + t); n -= 2; if (n <= 1) return x / (1 + t); else return myAtan(x, x2, n, t); } }
Z:\>csc -nologo CS0512.cs Z:\>CS0512 11 : 3.1414634146, -0.0001292390 13 : 3.1416149068, 0.0000222532 15 : 3.1415888251, -0.0000038285 17 : 3.1415933119, 0.0000006583 19 : 3.1415925404, -0.0000001131 21 : 3.1415926730, 0.0000000194 23 : 3.1415926503, -0.0000000033 25 : 3.1415926542, 0.0000000006 27 : 3.1415926535, -0.0000000001 29 : 3.1415926536, 0.0000000000 31 : 3.1415926536, 0.0000000000
参考文献