利用蒲丰投针实验求π/c语言
//dsd的概率论大作业
平面上画着两条间距a的平行线,随机地向此平面任投掷一长度为l ( l < a )的针N次,观察针与直线相交的次数记为n,计算此针与直线相交的概率。
以x表示针的中点距离最近的一条平行线的距离,φ表示针与平行线的夹角,则可得0≤x≤a/2,0≤φ≤π,要使得针与平行线相交,必须保证x≤1/2lsinφ。
代码:
#include<stdio.h>
#define _USE_MATH_DEFINES
#include<math.h>
#include<stdlib.h>
#include<time.h>int main()
{long int n=0; //相交次数long int N=0; //投针次数int l=100; //针的长度int a=200; //平行线间距double distance=0; //落点距离double angle=0; //角度double P; //频率double pi=0; //最终得到piint i=0; //循环变量printf("输入要投的针数:"); //确定实验次数scanf_s("%d", &N);srand(time(NULL)); for (i = 0; i < N; i++) //进行循环试验{distance = rand() % (l + 1);angle = rand() % 91;if (distance <= 0.5 * l * sin(angle * M_PI / 180))n++; //相交次数计数}P= (double)n / (double)N;pi=2.0 * (double)l / ((double)a * P); printf("计算得到圆周率π为:%lf\n", pi); //输出结果
}
注意:
强制类型转换才能克服整除;
M_PI只有声明#define _USE_MATH_DEFINES后才可以使用参考的π值。
实验结果如下:
N(投针次数) |
输出结果 |
10 |
3.333333 |
100 |
3.333333 |
1000 |
3.300330 |
10000 |
3.210273 |
100000 |
3.112065 |
1000000 |
3.132960 |
10000000 |
3.133065 |
100000000 |
3.131318 |
1000000000 |
3.131390 |
从实验结果可以看出,随着试验次数的增多,频率逐渐趋近概率,可以预见到如果试验次数足够多,能够得到更加精确的圆周率值。
由于C语言中rand函数实际上为伪随机数,所以得到的结果有一定的伪随机性。
C语言中无法用弧度制表示角度,因此在程序中得到随机的角度angle值时,实际需要用math.h文件中自定义的π值进行一遍换算,在上述代码中M-PI将被扩展为3.14159265358979323846,这也带来了实验结果的不准确性,故而会影响最终输出的π的值。从表中也可以看到,结果始终与3.14159265……相差一定的偏差。
如果能有更好的转换角度的方式,也许可以提高c语言随机试验程序的精度。
代码内容参考了http://t.csdn.cn/IO92R。
利用蒲丰投针实验求π/c语言相关推荐
- 蒲丰投针计算机模拟ppt,蒲丰投针实验模课件.doc
概率论与数理统计实验 蒲丰投针与蒙特卡罗法 班级 应数12级01班 学号 2012444086 姓名 张旭东 蒲丰投针与蒙特卡罗法 张旭东 2012444086 (重庆科技学院 数学与应用数学 ,重庆 ...
- 强化学习 蒲丰投针实验 蒙特卡洛算法
目录 一.蒲丰投针实验 1.1背景故事 1.2原理介绍 二.蒙特卡洛方法 2.1方法介绍 2.2经验轨迹 2.3在线学习与离线学习 2.4数学原理 一.蒲丰投针实验 1.1背景故事 1777年,蒲丰请 ...
- Matlab模拟蒲丰投针实验计算Π值
文章目录 1.前言 2.实验目的 3.实验原理 (1)问题描述 (2)问题求解 4.实验过程 5.实验结果 6.实验结论 7.Matlab代码 1.前言 学习了概率论,决定自己动手编程实现蒲丰投针实验 ...
- 一文读懂蒲丰投针实验
这个博客源于概率论复习期间,蒙特卡罗方法的思想起源,这种求π\piπ的思路非常的巧妙 附:历史上用蒲丰投针实验估计圆周率的实验记录,来源 蒲丰投针 蒲丰投针实验是法国数学家.自然科学家"乔治 ...
- 【游戏仿真实验】Unity仿真蒲丰投针实验,丢针计算圆周率,丢了一百万次针得出的结果是...
文章目录 一.前言 二.制作场景 1.制作针模型 2.桌面制作 3.平行线制作 三.物理仿真 1.桌面无反弹 2.针掉落 3.针滚动问题 4.针架到平行线上的问题 5.针与针相互影响的问题 四.UI界 ...
- 蒲丰投针实验的一些理解
由于要做ppt这里把自己的代码先暂时放上来,不当之处请多指正! 实验过程: 1)取一张白纸,在上面画上许多条间距为a的平行线. 2) 取一根长度为l(l≤a) 的针,随机地向画有平行直线的纸上掷n次, ...
- 计算机投针实验程序,蒲丰投针实验SAS程序
投针实验 data a; do i=1 to 5000; /*实验5000次*/ pi=constant('pi');/*得出pi真实值*/ x=0.5*ranuni(0);/*产生随机数,a=1*/ ...
- 蒲丰投针计算机模拟ppt,蒙特卡罗模拟课件.ppt
<蒙特卡罗模拟课件.ppt>由会员分享,提供在线免费全文阅读可下载,此文档格式为ppt,更多相关<蒙特卡罗模拟课件.ppt>文档请在天天文库搜索. 1.蒙特卡洛模拟数学实验之前 ...
- 蒲丰投针与蒙特卡洛模拟
昨天突然看到了蒲丰投针实验,于是想看看到底是怎么推导出来的,baidu上搜索了一下,发现就这篇文章写的比较好,而且也简单的讲解了一下蒙特卡洛方法,在此推荐之! 蒲丰投针与蒙特卡洛模拟.pdf 转载于: ...
最新文章
- 视频+课件| 室内动态变化场景中的相机重定位(CVPR2021)
- XHProf报告字段含义
- 深入了解数据人才 | 中国数据人才白皮书
- k3s containerd和docker命令对比表
- lisp 绘制立体感的五角星_几何作图的方法、例子、解答及札记
- Lambda表达式和闭包Closure
- 探索Julia(part14)--学生得分描述性统计案例
- [原创]windows server 2012 AD架构 试验 系列 – 15解决AD复制冲突
- linux的bash脚本
- 计算机主板 方便用户自己安装的是,电脑水冷安装教程步骤解析【图文】
- Unity 怎么把app改成中文名
- 动图:七分钟帮你理解什么是KMP算法?
- 微信小程序反编译工具及方法
- OSChina 周四乱弹 —— 你从小继承了程序员基因
- [业务流程]JWT实现单点登录(SpringBoot + Vue +axious)
- 女子花2万元雇友人杀逝世女街坊
- Linux 学习 第六单元
- PPC气箱脉冲除尘器
- python检索用人名查电话_创建一个将人名用作键的字典后,输入姓名查找值,返回错误...
- P4117 [Ynoi2018] 五彩斑斓的世界 题解
热门文章
- 独立公众号版本微信社群人脉系统社群空间站最新源码全开源
- c语言 设圆半径r,圆柱高h,求圆周长、圆面积、圆柱体体积
- linux 仿QQ 2.0版本
- idea查看项目pid_intellij idea 插件开发--快速定位到mybatis mapper文件中的sql
- 有什么计算机可以拆分数字,一招教你在Excel中将一个数字拆分为多个数字之和...
- 怎么修改服务器的刷新率,关于Linux系统中调整刷新率
- 山东教师教育网研修平台-报名
- ilitek win10 触摸屏驱动_大佬手机刷入win10系统开机 小米8多少原生系统可以尝鲜...
- windows server服务器杀毒软件推荐
- SKlearn学习笔记——XGBoost