在C#中使用无限级数计算pi

时间:2010-03-18 04:56:12

标签: c# double decimal division pi

我尝试在C#中编写以下程序来使用无限递归来计算pi,但我对整数/双/小数除法感到困惑。

我真的不知道为什么这不起作用,所以请原谅我对强类型的东西缺乏了解,因为我还在学习C#。

提前致谢!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        public static int Main(string[] args)
        {
            int numeratornext = 2;
            int denominatornext = 5;

            decimal findto = 100.0M;
            decimal pi = 0.0M;
            decimal halfpi = 1.0M;
            int seriesnum = 1;
            int seriesden = 3;

            for (int i = 0; i < findto; i++)
            {
                halfpi += Decimal.Divide((decimal)seriesnum, (decimal)seriesden);
                //System.Console.WriteLine(Decimal.Divide((decimal)seriesnum, (decimal)seriesden).ToString());
                seriesnum *= numeratornext;
                seriesden *= denominatornext;
                numeratornext++;
                denominatornext += 2;
            }

            pi = halfpi * 2;

            System.Console.WriteLine(pi.ToString());
            System.Console.ReadLine();
            return 0;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您的混淆是因为您使用的是intdecimal,这两者都更适合整数或固定精度的财务计算。我的建议是在这里简单地将所有的数值变量声明为double,这将消除关于返回值类型的任何歧义,因为对两个双精度结果的任何数学运算都是如此在另一个双。

(除此之外,你的算法是错误的。但是,算法的错误是与你正在使用的类型不同的问题。)