请注意:我已经阅读这个话题,但我不明白它,它并没有提供一个解决方案,我可以使用。我最不善于用数字的问题。

什么是皮生成一个简单的方法是什么用户希望小数点后的位数?这不是功课,只是想完成这里列出的一些项目:

链接

有帮助吗?

解决方案

一个经典算法用于计算pi的位数是高斯 - 勒让德算法。虽然速度比不上一些更现代的算法,它确实有被理解的优势。

a_0 = 1
b_0 = 1/Sqrt(2)
t_0 = 1/4
p_0 = 1

然后

a_(n+1) = (a_n + b_n) / 2
b_(n+1) = Sqrt(a_n * b_n)
t_(n+1) = t_n - p_n * (a_n - a_(n+1))^2
p_(n+1) = 2 * p_n

然后

pi =. (a_n + b_n)^2 / (4 * t_n)

下面(=.指“近似等于”)该算法表现出二次收敛(正确小数位的数目随着每次迭代增加一倍)。

我将让你来此转换为C#,包括发现的高精度计算库。

其他提示

你谈论使用计算PI值的主题泰勒级数。使用功能“双F(int i)以”关于这一主题写了会给你PI值后的“i”条款。

计算PI的这种方式是一种缓慢的,我建议你看的 PI快速算法

您也可以找到一个实现这里是让计算圆周率到第n数字。

祝你好运!

如果你仔细看这个确实不错指南:

对于并行编程模式:了解和使用.NET Framework应用并行模式4

您会在第70页这个可爱的实现找到(从我身边微小的变化):

static decimal ParallelPartitionerPi(int steps)
{
    decimal sum = 0.0;
    decimal step = 1.0 / (decimal)steps;
    object obj = new object();
    Parallel.ForEach(Partitioner.Create(0, steps),
        () => 0.0,
        (range, state, partial) =>
            {
                for (int i = range.Item1; i < range.Item2; i++)
            {
                decimal x = (i + 0.5) * step;
                partial += 4.0 / (1.0 + x * x);
            }
            return partial;
        },
        partial => { lock (obj) sum += partial; });
    return step * sum;
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top