当前位置: 首页 > news >正文

计算圆周率(π)代码实现【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求积分法:
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输出结果:
方法2

http://www.dtcms.com/a/301345.html

相关文章:

  • Java中排序规则详解
  • cJSON在STM32单片机上使用遇到解析数据失败问题
  • 计算柱状图中最大的矩形【单调栈】
  • Dify 本地化部署深度解析与实战指南
  • 蜣螂优化算法的华丽转身:基于Streamlit的MSIDBO算法可视化平台
  • 【ESP32设备通信】-W5500与ESP32 /ESP32 S3集成
  • MySQL - 性能优化
  • Java面试实战:电商高并发与分布式事务处理
  • maven optional 功能详解
  • Java进阶7:Junit单元测试
  • 数据结构基础内容(第九篇:最短路径)
  • OpenCv中的 KNN 算法实现手写数字的识别
  • 电子电路设计学习
  • git回退版本教程
  • Java validation
  • Java学习第八十部分——Freemarker
  • Linux c网络专栏第三章DPDK
  • Petalinux驱动开发
  • Linux驱动开发笔记(五)——设备树(下)——OF函数
  • 人社部物联网安装调试员的实训平台
  • RabbitMq 常用命令和REST API
  • 9.SpringBoot Web请求参数绑定方法
  • 盛最多水的容器-leetcode
  • 《Java 程序设计》第 7 章 - 继承与多态
  • 记录几个SystemVerilog的语法——时钟块和进程通信
  • maven聚合工程(多个mudule只编译、打包指定module)
  • JVM类加载机制全流程详解
  • 通过硬编码函数地址并转换为函数指针来调用函数
  • Java#包管理器来时的路
  • Leetcode-3427变长子数组求和