public static VeryLong Pi(int numberOfDigits) { VeryLong factor = new VeryLong(1.ToString()); int additionalCalcDigits = 10; int additionalLimitDigits = 0; VeryLong pi = new VeryLong("0"); if (_piAlgorithm == PiAlgorithm.BBP) { pi = GetStartValueBBP(numberOfDigits + additionalCalcDigits); // BBP } else if (_piAlgorithm == PiAlgorithm.Euler) { pi = new VeryLong("3"); // Euler } VeryLong limit = new VeryLong("0." + VeryLong.GetZeros(numberOfDigits + additionalLimitDigits) + "1" + VeryLong.GetZeros(additionalCalcDigits - additionalLimitDigits - 1)); int i = 0; StartTime(); while (true) { i++; VeryLong term = new VeryLong("0"); if (_piAlgorithm == PiAlgorithm.BBP) { term = GetPiTermBBP(i, numberOfDigits + additionalCalcDigits, ref factor); } else if (_piAlgorithm == PiAlgorithm.Euler) { term = GetPiTermEuler(i, numberOfDigits + additionalCalcDigits); } if (!term.IsLargerOrEqual(limit)) { Console.WriteLine("limit reached:"); Console.WriteLine("Term: " + term.ToString()); Console.WriteLine("limit: " + limit.ToString()); PrintTime(); break; } if (_piAlgorithm == PiAlgorithm.BBP) // BBP { pi = pi.Add(term); } else if (_piAlgorithm == PiAlgorithm.Euler) { if (i % 2 == 1) { pi = pi.Add(term); } else { pi = pi.Subtract(term); } } if (i % 10 == 0) { Console.WriteLine(); Console.WriteLine("Term " + i); Console.WriteLine("Pi: " + pi.ToString()); Console.WriteLine("Term: " + term.ToString()); Console.WriteLine("limit: " + limit.ToString()); PrintTime(); } else if (i % 1 == 0) { Console.Write("."); } } VeryLong piCorrectDigits = new VeryLong(pi.ToString().Remove(numberOfDigits + 2)); return(piCorrectDigits); }