换一种c++方法求π
可以使用蒙特卡洛方法来估算π的值。
具体实现步骤如下:
-
在一个正方形内画一个圆,圆的直径等于正方形的边长。
-
在正方形内均匀随机产生大量的点。
-
对于每个点,判断它是否落在圆内。如果是,则计数器加1。
-
计算圆的面积和正方形的面积。圆的面积为πr²,其中r为圆的半径,半径等于正方形边长的一半。正方形的面积为边长的平方。
-
由于所有点在正方形内均匀分布,因此圆内点的数量与正方形内点的数量的比例近似于圆的面积与正方形面积的比例。因此可以用圆内点的数量与总点数的比值乘以正方形面积来估算圆的面积,从而估算π的值。
下面是使用C++实现的例子:
#include <iostream>
#include <random>
int main() {
const int num_points = 1000000; // 产生的点数
const double square_side = 2.0; // 正方形边长
const double radius = square_side / 2.0; // 圆的半径
const double square_area = square_side * square_side; // 正方形面积
int num_points_in_circle = 0; // 圆内点的数量
std::mt19937 rng(std::random_device{}()); // 随机数生成器
std::uniform_real_distribution<double> dist(-radius, radius); // 均匀分布
for (int i = 0; i < num_points; ++i) {
double x = dist(rng); // 随机产生x坐标
double y = dist(rng); // 随机产生y坐标
if (x * x + y * y <= radius * radius) { // 判断是否在圆内
++num_points_in_circle;
}
}
double circle_area = square_area * num_points_in_circle / num_points; // 估算的圆的面积
double pi = circle_area / (radius * radius); // 估算的π的值
std::cout << "π ≈ " << pi << std::endl;
return 0;
}
原文地址: https://www.cveoy.top/t/topic/bnLe 著作权归作者所有。请勿转载和采集!