这个C#版的计算圆周率程序就是在C程序的基础上改写的。C#版的程序必须使用C#2.0编译,算法和C程序是一样的,都是利用圆周率的反正切展式的泰勒级数来计算,但C#程序充分使用面象对象的编程方法,并且程序中有适当的注释,比C程序容易理解多了。C#程序从配置文件中读取计算所用的公式,允许自己增加计算公式。
using System; íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
using System.IO; íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
using System.Text.RegularExpressions; íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
using System.Collections.Generic; íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
using System.Diagnostics; íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
namespace Skyiv.Util íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{ íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
// 用反正切展式计算圆周率 íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
// 例如: pi= + 16 * arctan(1/5) - 4 * arctan(1/239) [Machin] íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
sealed class ThePi íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{ íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
// 表示 (positive ? + : -) coefficient * arctan(1/denominator) íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
public sealed class Term íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{ íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
bool positive; // 系数是否正数 íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
int coefficient; // 系数 íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
int denominator; // 分母 íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
public bool Positive { get { return positive; } } íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
public int Coefficient { get { return coefficient; } } íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
public int Denominator { get { return denominator; } } íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
public Term(bool positive, int coefficient, int denominator) íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{ íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
this.positive = positive; íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
this.coefficient = coefficient; íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
this.denominator = denominator; íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
} íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
public override string ToString() íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{ íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
return string.Format("{0} {1} * arctan(1/{2}) ", positive ? "+" : "-", coefficient, denominator); íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
} íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
} íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
const int overDigits = 3; // 额外计算的位数,以消除误差 íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
List<Term> list = new List<Term>(); // 反正切展式 íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
string name; // 反正切展式的发现者 íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
public ThePi(string name) íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{ íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
this.name = name; íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
} íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
public void Add(Term term) íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{ íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
list.Add(term); íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
} íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
// 返回反正切展式,例如: pi= + 16 * arctan(1/5) - 4 * arctan(1/239) [Machin] íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
public override string ToString() íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{ íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
string s = "pi= "; íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
foreach (Term term in list) s += term.ToString(); íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
return s + "[" + name + "]"; íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
} íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
// 将圆周率精确到小数点后 digits 位的值以及所用时间输出到 tw íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
public void Out(TextWriter tw, int digits) íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{ íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
const int digitsPerGroup = 5; íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
const int groupsPerLine = 13; íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
const int digitsPerLine = groupsPerLine * digitsPerGroup; íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
tw.WriteLine(this); íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
TimeSpan elapsed; íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
int [] piValue = Compute(digits, out elapsed); íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
tw.Write("pi= {0}.", piValue[piValue.Length - 1]); íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
int position = 6; íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
for (int i = piValue.Length - 2; i >= overDigits; i--, position++) íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{ íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
tw.Write(piValue); íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
if (position % digitsPerLine == 0) tw.WriteLine(); íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
else if (position % digitsPerGroup == 0) tw.Write(" "); íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
} íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
if ((position - 1) % digitsPerLine != 0) tw.WriteLine(); íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
tw.WriteLine("[{0}] DIGITS:{1:N0} ELAPSED:{2}", name, digits, elapsed); íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
} íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
// 计算圆周率到小数点后 digits 位, 并统计所用时间 elapsed íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
int [] Compute(int digits, out TimeSpan elapsed) íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{ íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
Stopwatch stopWatch = new Stopwatch(); íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
stopWatch.Start(); íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
int [] piValue = Compute(digits + overDigits); íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
Format(piValue); íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
stopWatch.Stop(); íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
elapsed = stopWatch.Elapsed; íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
return piValue; íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
} íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
// 计算圆周率到小数点后 digits 位, 结果未格式化 íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
int [] Compute(int digits) íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{ íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
int [] pi = new int [digits + 1]; // 圆周率的值, 反序存放,如: 951413 íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
int [] tmp = new int [digits + 1]; // 中间计算结果,也是反序存放 íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
foreach (Term term in list) íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{ íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
// arctan(x) = x - x^3/3 + x^5/5 - x^7/7 + x^9/9 - x^11/11 + .. íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
int validDigits = digits; íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
int dividsor = term.Denominator; íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
bool positive = term.Positive; íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
Array.Clear(tmp, 0, tmp.Length); íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
tmp[digits] = term.Coefficient; íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
Divide(true, positive, true, ref validDigits, pi, tmp, dividsor); íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
positive = !positive; íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
dividsor *= dividsor; íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
for (int step = 3; validDigits > 0; positive = !positive, step += 2) íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{ íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
Divide(false, true, true, ref validDigits, null, tmp, dividsor); íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
Divide(true, positive, false, ref validDigits, pi, tmp, step); íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
} íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
} íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
return pi; íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
} íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
// 计算 sum += 或 -= (dividend /= 或 / divisor) íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
void Divide( íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
bool updateSum, // 是否更新sum íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
bool positive, // 系数是否正数 íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
bool updateDividend, // 是否更新被除数 íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
ref int digits, // 被除数的有效位数 íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
int [] sum, // 和数 íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
int [] dividend, // 被除数 íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
int dividsor // 除数 íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
) íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{ íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
for (int remainder = 0, i = digits; i >= 0; i--) íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{ íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
int quotient = 10 * remainder + dividend; íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
remainder = quotient % dividsor; íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
quotient /= dividsor; íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
if (updateDividend) dividend = quotient; íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
if (!updateSum) continue; íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
if (positive) sum += quotient; íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
else sum -= quotient; íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
} íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
if (updateDividend) while (digits > 0 && dividend[digits] == 0) digits--; íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
} íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
// 将 pi 数据组中的每个元素格式化为个位数 íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
void Format(int [] pi) íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{ íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
for (int quotient = 0, i = 0; i < pi.Length; i++) íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{ íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
int numerator = pi + quotient; íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
quotient = numerator / 10; íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
int remainder = numerator % 10; íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
if (remainder < 0) íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{ íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
remainder += 10; íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
quotient--; íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
} íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
pi = remainder; íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
} íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
} íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
} íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
// 用一组反正切展式表示圆周率 íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
sealed class Pi íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{ íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
List<ThePi> list = new List<ThePi>(); íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
/* 从 ini 文件中读入初始配置,其格式如下: íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
# eg. pi = 16 * arctan(1/5) - 4 * arctan(1/239) [Machin] íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
Stormer + 176 57 + 28 239 - 48 682 + 96 12943 íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
Stomer + 24 8 + 8 57 + 4 239 íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
Gauss + 48 18 + 32 57 - 20 239 íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
Machin + 16 5 - 4 239 íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
*/ íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
public Pi(string iniFileName) íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{ íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
using (StreamReader sr = new StreamReader(iniFileName)) íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{ íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
Regex regex = new Regex(@"\s+"); íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
for (;;) íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{ íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
string s = sr.ReadLine(); íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
if (s == null) break; íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
if (s.Length == 0 || s[0] == '#') continue; íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
string [] ss = regex.Split(s); íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
if (ss.Length % 3 != 1) throw new ApplicationException("ini文件栏目数不正确"); íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
ThePi thePi = new ThePi(ss[0]); íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
for (int i = 1; i < ss.Length; i += 3) íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
thePi.Add(new ThePi.Term(ss[0] == '+', int.Parse(ss[i+1]), int.Parse(ss[i+2]))); íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
list.Add(thePi); íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
} íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
} íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
} íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
// 输出全部的反正切展式 íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
public void Out(TextWriter tw) íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{ íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
int i = 0; íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
foreach (ThePi thePi in list) tw.WriteLine("{0,2}: {1}", ++i, thePi); íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
} íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
// 使用 formula 展式计算圆周率精确到小数点后 digits 位,并将其值以及所用时间输出到 tw íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
public void Out(TextWriter tw, int formula, int digits) íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{ íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
list[formula].Out(tw, digits); íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
} íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
} íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
sealed class TheMain íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{ íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
static void Main(string [] args) íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{ íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
TextWriter tw = Console.Out; íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
try íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{ íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
Pi pi = new Pi("pi.ini"); íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
if (args.Length < 1) íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{ íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
pi.Out(tw); íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
tw.WriteLine("Usage: pi formula [ digits ]"); íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
return; íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
} íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
int formula = Convert.ToInt32(args[0]); íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
int digits = 1000; íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
if (args.Length > 1) digits = Convert.ToInt32(args[1]); íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
if (digits < 0) digits = 0; íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
pi.Out(tw, formula - 1, digits); íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
} íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
catch (Exception ex) íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
{ íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
tw.WriteLine(ex.Message); íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
} íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
} íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
} íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
} íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi该程序需要的配置文件(pi.ini)如下:
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi----------------------------------------------------------
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi# eg. pi = 16 * arctan(1/5) - 4 * arctan(1/239) [Machin]
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰiStormer + 176 57 + 28 239 - 48 682 + 96 12943
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰiStomer + 24 8 + 8 57 + 4 239
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰiGauss + 48 18 + 32 57 - 20 239
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰiMachin + 16 5 - 4 239
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi----------------------------------------------------------
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi运行结果:
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰiC> pi
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi1: pi= + 176 * arctan(1/57) + 28 * arctan(1/239) - 48 * arctan(1/682) + 96 * arctan(1/12943) [Stormer]
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi2: pi= + 24 * arctan(1/8) + 8 * arctan(1/57) + 4 * arctan(1/239) [Stomer]
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi3: pi= + 48 * arctan(1/18) + 32 * arctan(1/57) - 20 * arctan(1/239) [Gauss]
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi4: pi= + 16 * arctan(1/5) - 4 * arctan(1/239) [Machin]
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰiUsage: pi formula [ digits ]
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰiC> pi 4
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰipi= + 16 * arctan(1/5) - 4 * arctan(1/239) [Machin]
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰipi= 3.14159 26535 89793 23846 26433 83279 50288 41971 69399 37510 58209 74944
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi59230 78164 06286 20899 86280 34825 34211 70679 82148 08651 32823 06647 09384
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi46095 50582 23172 53594 08128 48111 74502 84102 70193 85211 05559 64462 29489
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi54930 38196 44288 10975 66593 34461 28475 64823 37867 83165 27120 19091 45648
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi56692 34603 48610 45432 66482 13393 60726 02491 41273 72458 70066 06315 58817
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi48815 20920 96282 92540 91715 36436 78925 90360 01133 05305 48820 46652 13841
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi46951 94151 16094 33057 27036 57595 91953 09218 61173 81932 61179 31051 18548
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi07446 23799 62749 56735 18857 52724 89122 79381 83011 94912 98336 73362 44065
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi66430 86021 39494 63952 24737 19070 21798 60943 70277 05392 17176 29317 67523
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi84674 81846 76694 05132 00056 81271 45263 56082 77857 71342 75778 96091 73637
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi17872 14684 40901 22495 34301 46549 58537 10507 92279 68925 89235 42019 95611
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi21290 21960 86403 44181 59813 62977 47713 09960 51870 72113 49999 99837 29780
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi49951 05973 17328 16096 31859 50244 59455 34690 83026 42522 30825 33446 85035
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi26193 11881 71010 00313 78387 52886 58753 32083 81420 61717 76691 47303 59825
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi34904 28755 46873 11595 62863 88235 37875 93751 95778 18577 80532 17122 68066
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi13001 92787 66111 95909 21642 01989
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi[Machin] DIGITS:1,000 ELAPSED:00:00:00.0342141
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰiC> pi 1 10000
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰipi= + 176 * arctan(1/57) + 28 * arctan(1/239) - 48 * arctan(1/682) + 96 * arctan(1/12943) [Stormer]
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰipi= 3.14159 26535 89793 23846 26433 83279 50288 41971 69399 37510 58209 74944
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi...
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi24988 72758 46101 26483 69998 92256 95968 81592 05600 10165 52563 75678
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi[Stormer] DIGITS:10,000 ELAPSED:00:00:03.7817852
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi运行环境是 Pentium 4 2.8GHz PC机。
íS
¾
£Hª;www.netcsharp.cnÅÑà×AŰi