我需要使用以下公式预定义精度来计算PI:
于是我得出了这个解决方案。
![enter image description here](https://istack.dev59.com/0N1Qi.webp)
private static double CalculatePIWithPrecision(int presicion)
{
if (presicion == 0)
{
return PI_ZERO_PRECISION;
}
double sum = 0;
double numberOfSumElements = Math.Pow(10, presicion + 2);
for (double i = 1; i < numberOfSumElements; i++)
{
sum += 1 / (i * i);
}
double pi = Math.Sqrt(sum * 6);
return pi;
}
这个公式是正确的,但它的效率存在问题。当精度值为8或更高时,速度非常慢。
有没有更好(且更快!)的方法来使用该公式计算PI值?
for
循环语句中使用int
。我怀疑在那里使用双精度会使你的速度明显变慢。 - Sopuliprecision
不超过8(否则Pow(10, presicion + 2)
会溢出int
),@Sopuli建议使用int
循环变量是好的。您还需要更改sum + =
行上的1为1.0以获得正确的结果,并将numberOfSumElements
更改为int
(在赋值时进行适当的类型转换)以获得最大的受益。 - Joe White