我试图将BBP Formula (Bailey-Borwein-Plouffe)转换为C#代码,它是基数16( spigot算法)中pi的数字提取,这个想法是给输入什么索引/你想要pi的小数位然后得到那个单位数。假设我想要小数位/索引40000(基数为16)的数字而不必计算小数为40000的pi,因为我不关心其他数字。
无论如何这里是数学公式,(看起来应该是多少代码?)
不能说我理解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循环”,将序列加在一起? 例
和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?
答案 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);
}
}