估算pi的随机化算法C++
时间: 2024-12-15 09:22:36 浏览: 5
C++ 多线程求PI
5星 · 资源好评率100%
在C++中,可以使用随机化方法来估算圆周率π的一种经典算法是蒙特卡洛方法。这个方法基于投点到单位圆内与边界的概率来近似π的值。以下是简单的步骤:
1. 创建一个足够大的正方形区域,比如一个边长为2n的正方形。
2. 随机生成大量坐标(x, y),其中x和y都在区间[-n, n]之间。
3. 检查每个点是否位于单位圆(即x^2 + y^2 <= 1)内部。这一步可以用if语句快速判断,如`bool isInside = (x*x + y*y) < 1;`
4. 计算落在圆内的点数除以总点数,乘以4,得到估计的π值。因为单位圆面积是π,正方形面积是(2n)^2。
下面是一个简化的C++示例:
```cpp
#include <iostream>
#include <random>
#include <cmath>
double estimatePi(int numPoints) {
double piEstimate = 0;
std::mt19937 gen(std::random_device{}()); // 使用Mersenne Twister作为随机数引擎
std::uniform_real_distribution<> dis(-1, 1);
for (int i = 0; i < numPoints; ++i) {
double x = dis(gen);
double y = dis(gen);
if (std::sqrt(x * x + y * y) <= 1) {
piEstimate += 4 / numPoints;
}
}
return piEstimate;
}
int main() {
int pointsToSample = 1000000; // 样本点越多,估计越精确
double estimatedPi = estimatePi(pointsToSample);
std::cout << "Estimated value of Pi: " << estimatedPi << std::endl;
阅读全文