【发布时间】:2011-05-05 18:50:28
【问题描述】:
注册这个问题 Pi in C#
我对下面的代码进行了编码,并给出了最后 6 位数字为 0 的输出。所以我想通过将所有内容转换为十进制来改进程序。我以前从未在 C# 中使用过小数而不是双精度数,而且我只习惯在常规使用中使用双精度数。
所以请帮助我进行十进制转换,我尝试在开始时将所有双精度数替换为十进制,但效果不佳:(。
using System;
class Program
{
static void Main()
{
Console.WriteLine(" Get PI from methods shown here");
double d = PI();
Console.WriteLine("{0:N20}",
d);
Console.WriteLine(" Get PI from the .NET Math class constant");
double d2 = Math.PI;
Console.WriteLine("{0:N20}",
d2);
}
static double PI()
{
// Returns PI
return 2 * F(1);
}
static double F(int i)
{
// Receives the call number
//To avoid so error
if (i > 60)
{
// Stop after 60 calls
return i;
}
else
{
// Return the running total with the new fraction added
return 1 + (i / (1 + (2.0 * i))) * F(i + 1);
}
}
}
输出
从此处显示的方法获取 PI 3.14159265358979000000 从.NET Math类常量中获取PI 3.14159265358979000000
【问题讨论】:
-
查看 Eric Lippert 对类似问题的回答:stackoverflow.com/questions/4107047/c-high-double-precision/…
-
@Justin,我不想将算法更改为 Eric 的。我对此很满意。