無駄に C# っぽさを追求してみた

class Program2 {
  static void Main(string[] args) {
    var sw = new Stopwatch();
    sw.Start();
    double pi = CalculatePI(1000000);
    sw.Stop();
    Console.WriteLine(" expected: {0}", Math.PI);
    Console.WriteLine(" actual: {0}", pi);
    Console.WriteLine(" error rate: {0}", (pi - Math.PI) / Math.PI);
    Console.WriteLine("elapsed time: {0}", sw.Elapsed);
  }

  private static double CalculatePI(int trialCount) {
    int count = RandomPoints().Take(trialCount).Count(pt => (SqareSum(pt) < 1));
    return 4.0 * count / trialCount;
  }

  private static IEnumerable<double[]> RandomPoints() {
    var r = new Random();
    while(true) yield return new[] { r.NextDouble(), r.NextDouble() };
  }

  private static double SqareSum(params double[] values) {
    return values.Sum(x => Math.Pow(x, 2));
  }
}