使用 Nilkantha 的级数计算 Pi
Pi是具有非循环小数的无理数。我们通常知道Pi = 3.14或Pi = 22/7 ,但这只是为方便起见的近似值。可以使用Nilkantha 的系列给出一种计算方法。它是由 -
π = 3 + 4 / (2*3*4) – 4 / (4*5*6) + 4 / (6*7*8) – . . .
方法:观察分母的模式可以看出,对于除第一项以外的每一项,它都包含三个连续数字的乘法。我们可以使用一个变量并在每次迭代时将其增加 2 以获得分母中的正确项。进一步注意,这是交替序列,即连续项的符号不同。
按照以下步骤实施上述观察
- 创建 3 个变量n、Pi、sign
- 初始化Pi = 3,n = 2,符号 = 1
- 迭代0 到 1000000以计算1000000 项和更高的准确度:
- 在每次迭代中乘符号 = sign*(-1)
- 计算Pi = Pi + 符号*(4/(n) * (n+1) * (n+2))
- 每次迭代将n 增加 2
- 打印Pi的值
下面是实现上述方法的代码:
C++
// C++ code to implement the above approach
#include
using namespace std;
// Function to calculate PI
double calculatePI(double PI, double n,
double sign)
{
// Add for 1000000 terms
for (int i = 0; i <= 1000000; i++) {
PI = PI + (sign * (4 / ((n) * (n + 1)
* (n + 2))));
// Addition and subtraction
// of alternate sequences
sign = sign * (-1);
// Increment by 2 according to formula
n += 2;
}
// Return the value of Pi
return PI;
}
// Driver code
int main()
{
// Initialise sum=3, n=2, and sign=1
double PI = 3, n = 2, sign = 1;
// Function call
cout << fixed << setprecision(8)
<< "The approximation of Pi is "
<< calculatePI(PI, n, sign) << endl;
return 0;
}
输出
The approximation of Pi is 3.14159265
时间复杂度: O(N * logN * loglogN),其中N是迭代次数
辅助空间: O(1)