我尝试在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;
}
}
}
答案 0 :(得分:0)
您的混淆是因为您使用的是int
和decimal
,这两者都更适合整数或固定精度的财务计算。我的建议是在这里简单地将所有的数值变量声明为double
,这将消除关于返回值类型的任何歧义,因为对两个双精度结果的任何数学运算都是如此在另一个双。
(除此之外,你的算法是错误的。但是,算法的错误是与你正在使用的类型不同的问题。)