const decimal PI = 3.1415926535897932384626433832m;
public static void Main(string[] args)
Console.WriteLine("PI = {0}",PI);
decimal nilakanthaPI = NilakanthaGetPI(iterationsN);
decimal CalcErrorNilakantha = PI - nilakanthaPI;
Console.WriteLine("\nNilakantha Series -> PI = {0}",nilakanthaPI);
Console.WriteLine("Calculation error = {0}",CalcErrorNilakantha);
int numDecNilakantha = PI.ToString().Zip(nilakanthaPI.ToString(), (x, y) => x == y).TakeWhile(x => x).Count()-2;
Console.WriteLine("Number of correct decimals = {0}",numDecNilakantha);
Console.WriteLine("Number of iterations = {0}",iterationsN);
int iterationsGL = 1000000;
decimal GregoryLeibnizPI = GregoryLeibnizGetPI(iterationsGL);
decimal CalcErrorGregoryLeibniz = PI - GregoryLeibnizPI;
Console.WriteLine("\nGregory-Leibniz Series -> PI = {0}",GregoryLeibnizPI);
Console.WriteLine("Calculation error = {0}",CalcErrorGregoryLeibniz);
int numDecGregoryLeibniz = PI.ToString().Zip(GregoryLeibnizPI.ToString(), (x, y) => x == y).TakeWhile(x => x).Count() - 2;
Console.WriteLine("Number of correct decimals = {0}",numDecGregoryLeibniz);
Console.WriteLine("Number of iterations = {0}",iterationsGL);
public static decimal GregoryLeibnizGetPI(int n)
for (int i = 0; i < n; i++)
sum += i % 2 == 0 ? temp : -temp;
public static decimal NilakanthaGetPI(int n)
decimal a = 2, b = 3, c = 4;
for (int i = 0; i < n; i++)
sum += i % 2 == 0 ? temp : -temp;