BBP算法获得PI的第n位数?

时间:2017-11-03 22:03:49

标签: c# algorithm math

我试图将BBP Formula (Bailey-Borwein-Plouffe)转换为C#代码,它是基数16( spigot算法)中pi的数字提取,这个想法是给输入什么索引/你想要pi的小数位然后得到那个单位数。假设我想要小数位/索引40000(基数为16)的数字而不必计算小数为40000的pi,因为我不关心其他数字。

无论如何这里是数学公式,(看起来应该是多少代码?

enter image description here

不能说我理解100%的形式是什么意思,如果我做了,我可能会把它变成代码,但是从我的理解看它。

这是正确的吗?

伪代码

  

Pi = SUM =(对于int n = 0; n< infinity; n ++){SUM + =((4 /((8 * n)+1))    - (2 /((8 * n)+4)) - (1 /((8 * n)+5)) - (1 /((8 * n)+6))*((1/16)^ n))}

Capital sigma基本上就像一个“for循环”,将序列加在一起? 例 enter image description here

和C#代码:

static int CapSigma(int _start, int _end)
{
    int sum = 0;
    for(int n = _start; n <= _end; n++)
    {
        sum += n; 
    }
    return (sum);
}

到目前为止的代码 (不工作)

static int BBPpi(int _precision)
{
    int pi = 0;
    for(int n = 0; n < _precision; n++)
    {
        pi += ((16 ^ -n) * (4 / (8 * n + 1) - 2 / (8 * n + 4) - 1 / (8 * n + 5) - 1 / (8 * n + 6)));
    }
    return (pi);
}

如果我的伪代码数学是正确的,我不确定如何将其用于实际代码?

如何将0加到无穷大?不能在for循环中这样做,并且在公式中的哪个部分(“输入”)指定你要输出的第n个(索引)数字?它是起点n(n = 0)?所以得到数字40000将是n = 40000?

1 个答案:

答案 0 :(得分:-1)

你需要施展加倍:

    class Program
    {
        static void Main(string[] args)
        {
            double sum = 0;

            for (int i = 1; i < 100; i++)
            {
                sum += BBPpi(i);
                Console.WriteLine(sum.ToString());
            }
            Console.ReadLine();
        }
        static double BBPpi(int n)
        {
            double pi = ((16 ^ -n) * (4.0 / (8.0 * (double)n + 1.0) - 2 / (8.0 * (double)n + 4.0) - 1 / (8.0 * (double)n + 5.0) - 1.0 / (8.0 * (double)n + 6.0)));
            return (pi);
        }

    }