0

我尝试用 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;
        }
    }
}
4

1 回答 1

0

您的困惑是因为您正在使用intand decimal,这两者都更适合整数或固定精度的财务计算。我的建议是简单地在此处声明所有数字变量double,这将消除有关返回值类型的任何歧义,因为对两个双精度数的任何数学运算都会导致另一个双精度数。

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

于 2011-05-05T16:28:11.843 回答