using System;
using System.Diagnostics;
public class Test
{
public static void Main()
{
Console.WriteLine("Original");
Console.WriteLine(Original());
Console.WriteLine(TimeCalcOriginal());
Console.WriteLine("PI4");
Console.WriteLine(PI4());
Console.WriteLine(TimeCalcPI4());
Console.ReadKey();
}
public static decimal PI4()
{
decimal pi = 4m, iteration = 3m, piAvg;
do
{
pi = Decimal.Subtract(pi, Decimal.Divide(4m, iteration));
piAvg = pi;
iteration = decimal.Add(iteration, 2m);
pi = Decimal.Add(pi, Decimal.Divide(4m, iteration));
piAvg = Decimal.Divide(Decimal.Add(pi, piAvg), 2m);
iteration = decimal.Add(iteration, 2m);
if(decimal.Add(iteration, 1m) % 100000m == 0) {
Debug.WriteLine(piAvg);
}
} while (Decimal.Round(piAvg, 5) != 3.14159m);
//} while (Decimal.Round(piAvg, 10) != 3.1415926536m); //3.1415926535897932384626433833
return Decimal.Round(piAvg, 10);
}
public static decimal Original()
{
decimal number = 0m;
decimal pi;
int i = 1;
do
{
if ((i / 2) % 2 == 0)
{
number += 1m / i;
}
else
{
number -= 1m / i;
}
pi = 4 * number;
i += 2;
} while (Decimal.Round(pi, 5) != 3.14159m);
return (Decimal.Round(pi, 5));
}
public static System.TimeSpan TimeCalcOriginal()
{
Stopwatch sw = new Stopwatch();
sw.Start();
for (int i = 0; i <= 50; i++)
{
Original();
}
sw.Stop();
return sw.Elapsed;
}
public static System.TimeSpan TimeCalcPI4()
{
Stopwatch sw = new Stopwatch();
sw.Start();
for (int i = 0; i <= 50; i++)
{
PI4();
}
sw.Stop();
return sw.Elapsed;
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uRGlhZ25vc3RpY3M7CgpwdWJsaWMgY2xhc3MgVGVzdAp7CiAgICBwdWJsaWMgc3RhdGljIHZvaWQgTWFpbigpCiAgICB7CiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoIk9yaWdpbmFsIik7CiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoT3JpZ2luYWwoKSk7CiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoVGltZUNhbGNPcmlnaW5hbCgpKTsKICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiUEk0Iik7CiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoUEk0KCkpOwogICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKFRpbWVDYWxjUEk0KCkpOwogICAgICAgIENvbnNvbGUuUmVhZEtleSgpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZGVjaW1hbCBQSTQoKQp7CiAgICBkZWNpbWFsIHBpID0gNG0sIGl0ZXJhdGlvbiA9IDNtLCBwaUF2ZzsKICAgIGRvCiAgICB7ICAgCiAgICAgICAgcGkgPSBEZWNpbWFsLlN1YnRyYWN0KHBpLCBEZWNpbWFsLkRpdmlkZSg0bSwgaXRlcmF0aW9uKSk7CiAgICAgICAgcGlBdmcgPSBwaTsKICAgICAgICBpdGVyYXRpb24gPSBkZWNpbWFsLkFkZChpdGVyYXRpb24sIDJtKTsKICAgICAgICBwaSA9IERlY2ltYWwuQWRkKHBpLCBEZWNpbWFsLkRpdmlkZSg0bSwgaXRlcmF0aW9uKSk7CiAgICAgICAgcGlBdmcgPSBEZWNpbWFsLkRpdmlkZShEZWNpbWFsLkFkZChwaSwgcGlBdmcpLCAybSk7CiAgICAgICAgaXRlcmF0aW9uID0gZGVjaW1hbC5BZGQoaXRlcmF0aW9uLCAybSk7CiAgICAgICAgaWYoZGVjaW1hbC5BZGQoaXRlcmF0aW9uLCAxbSkgJSAxMDAwMDBtID09IDApIHsKICAgICAgICAgICAgRGVidWcuV3JpdGVMaW5lKHBpQXZnKTsKICAgICAgICB9CiAgICB9IHdoaWxlIChEZWNpbWFsLlJvdW5kKHBpQXZnLCA1KSAhPSAzLjE0MTU5bSk7CiAgICAvL30gd2hpbGUgKERlY2ltYWwuUm91bmQocGlBdmcsIDEwKSAhPSAzLjE0MTU5MjY1MzZtKTsgICAgICAvLzMuMTQxNTkyNjUzNTg5NzkzMjM4NDYyNjQzMzgzMwogICAgcmV0dXJuIERlY2ltYWwuUm91bmQocGlBdmcsIDEwKTsKfQoKICAgIHB1YmxpYyBzdGF0aWMgZGVjaW1hbCBPcmlnaW5hbCgpCiAgICB7CiAgICAgICAgZGVjaW1hbCBudW1iZXIgPSAwbTsKICAgICAgICBkZWNpbWFsIHBpOwogICAgICAgIGludCBpID0gMTsKCiAgICAgICAgZG8KICAgICAgICB7CiAgICAgICAgICAgIGlmICgoaSAvIDIpICUgMiA9PSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBudW1iZXIgKz0gMW0gLyBpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbnVtYmVyIC09IDFtIC8gaTsKICAgICAgICAgICAgfQogICAgICAgICAgICBwaSA9IDQgKiBudW1iZXI7CiAgICAgICAgICAgIGkgKz0gMjsKICAgICAgICB9IHdoaWxlIChEZWNpbWFsLlJvdW5kKHBpLCA1KSAhPSAzLjE0MTU5bSk7CiAgICAgICAgcmV0dXJuIChEZWNpbWFsLlJvdW5kKHBpLCA1KSk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBTeXN0ZW0uVGltZVNwYW4gVGltZUNhbGNPcmlnaW5hbCgpCiAgICB7CiAgICAgICAgU3RvcHdhdGNoIHN3ID0gbmV3IFN0b3B3YXRjaCgpOwogICAgICAgIHN3LlN0YXJ0KCk7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gNTA7IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIE9yaWdpbmFsKCk7CiAgICAgICAgfQogICAgICAgIHN3LlN0b3AoKTsKICAgICAgICByZXR1cm4gc3cuRWxhcHNlZDsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIFN5c3RlbS5UaW1lU3BhbiBUaW1lQ2FsY1BJNCgpCiAgICB7CiAgICAgICAgU3RvcHdhdGNoIHN3ID0gbmV3IFN0b3B3YXRjaCgpOwogICAgICAgIHN3LlN0YXJ0KCk7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gNTA7IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIFBJNCgpOwogICAgICAgIH0KICAgICAgICBzdy5TdG9wKCk7CiAgICAgICAgcmV0dXJuIHN3LkVsYXBzZWQ7CiAgICB9Cn0=