求圆周率π程序
方法一:
蒙特卡洛方法:
迭代次数: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 1000000
using 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 1000000
using 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输出结果:

1776

被折叠的 条评论
为什么被折叠?



