计算圆周率(π)代码实现【c++】
求圆周率π程序
方法一:
蒙特卡洛方法:
迭代次数:COUNT 变量定义了蒙特卡洛方法的迭代次数。迭代次数越多,结果越精确,但计算时间也会增加。
随机数生成:使用 srand(time(0)) 初始化随机数生成器,确保每次运行程序时生成的随机数不同。
蒙特卡洛方法:在单位正方形内随机生成点 (x, y),并检查该点是否落在单位圆内(即 xx + yy <= 1.0)。
计算π:落在圆内的点的比例乘以4即为π的近似值。
输出结果:将计算得到的π近似值输出。
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
#define COUNT 1000000using namespace std;bool InCircle(double x, double y)
{if ((x * x + y * y) <= 1) {return true;}return false;
}
void main()
{double x = 0.0, y = 0.0;int num = 0;int i = 0;srand((unsigned)time(NULL));for (i = 0; i < COUNT; i++) {x = rand() * 1.0 / RAND_MAX;y = rand() * 1.0 / RAND_MAX;if (InCircle(x, y)) {num++;}}cout << " π: " << (num * 4.0) / COUNT << endl;getchar();return;
}
方法二:
Simpson求积分法:
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
#define COUNT 1000000using namespace std;double fun(double x)
{return sqrt(1 - x * x);
}/**@brief Simpson 求积分法*@brief 输入积分上/下限 a,b;n 以二次曲线逼近的方式取代矩形或梯形的积分公式,所以划分越多越趋于精确值*@author GhY*@date 2025/07/27*/
double simpson(double(*f)(double), double a, double b, int n)
{double h = (b - a) / n;double sum = f(a) + f(b);for (int i = 1; i < n; i++) {if (i % 2 == 0) {sum += 2 * f(a + i * h);} else {sum += 4 * f(a + i * h);}}return sum * h / 3.0;
}int main()
{double a = 0.0;double b = 1.0;double integral = simpson(fun, a, b, COUNT);double pi = 4.0 * integral;std::cout << "π ≈ " << std::fixed << std::setprecision(10) << pi << std::endl;getchar();return 0;
}
方法2输出结果: