using System.Collections.Generic;
using System.Diagnostics;
public static IEnumerable<int> AlternatingSequence()
yield return ((b = !b) ? -1 : 1) * (i = i + 2);
public static double EstimatePI(int sumLength)
return (4 * AlternatingSequence().Take(sumLength).Sum(x => 1.0 / x));
public static double SolveUsingLinq()
return EstimatePI(1000000);
public static double SolveUsingLoop()
for(int i = 1, m = 1, c=0; c < 1000000; i+=2,m*=-1,++c) {
const int NumberOfTries=30;
Stopwatch stopwatch = new Stopwatch();
for(int i = 0; i < NumberOfTries; ++i)
double pi1 = SolveUsingLinq();
s += stopwatch.ElapsedMilliseconds;
Console.WriteLine("SolveUsingLinq: average time taken = {0}", s/NumberOfTries);
for(int i = 0; i < NumberOfTries; ++i)
double pi2 = SolveUsingLoop();
s += stopwatch.ElapsedMilliseconds;
Console.WriteLine("SolveUsingLoop: average time taken = {0}", s/NumberOfTries);