关于π值的计算问题
来源:互联网 发布:java缓存技术 redis 编辑:程序博客网 时间:2024/06/06 05:47
方法一:
(2014年深度学习算法研发工程师笔试题)此方法是百度的多次面试加笔试题。看往年笔试题遇到。题目如下:
在平面上有一组间距为d的平行线,将一根长度为l(l<a)的针任意掷在这个平面上,求此针与平行线中任意一根相交的概率,用高等数学(微积分、概率的方法)求解,基于布丰投针的结论,任选一种编程语言(C/C++, matlab, python,java),写出模拟投针实验(程序中允许把一个理想的Pi作为常量使用),求解圆周率。(15分)
其实这是很有名的普丰投针问题,用以计算圆周率π。
下面我们用数学分析的方法来证明上述实验求π的可行性:
证明:设A=‘针与某平行线相交’,针落在平面上的情况不外乎图中的几种。设x为针的中点到最近的一条平行线的距离。α为针与平行线的夹角。则
0<=x<=d/2,0<=α<=π/2,不等式确定了平面上的一个区域S。
A发生等价于x≤lsina/2 ,不等式确定了S的子域A,
所以p(A)=s(A)/s(S)这里用到了积分。直接传手写图了。因为数学类的公式真心不怎么会敲。
方法二:
用了很朴素的数学思想:一个正方形的内切圆,用随机数生成大于零小于1的点,落在圆内的概率是圆面积与正方形面积的比(近似)p=π/4,由于当计算次数越大,实验概率越接近理论概率,计算出的π结果值越精确。p =[ π(a/2)*(a/2)] / (a*a) 得p(近似)=π/4.
代码:
public static double compute(int n) { int k=0; for(int i=0; i<=n; i++) { double x = Math.random(); double y = Math.random(); if((x*x + y*y)<=1) } return 4*k/(double)n; }方法三:(摘自论坛http://www.newsmth.net/nForum/#!article/IQDoor/75341)
利用随机整数互素的概率来得到π的近似值.具体过程如下.
取一大整数N,在1到N之间随机地取一对整数a,b,找到它们的最大公约数(a,b),做n次这样的实验,记录(a,b)=1的情况次数m,计算出p=m/n的值.在Knuth的TAOCP书上有证明,我这里简述如下吧。
设两个数u,v互质的概率为p,则gcd(u,v)=d当且仅当d|u,d|v,gcd(u/d,v/d)=1。所以任
两个数最大公约数为d的概率为p/d/d,即p/(d^2)
在正整数集合上有p+p/4+p/9+……p/(n^2)+……=1,容易求得p=6/(π*π)。
参考文献:http://wenku.baidu.com/link?url=xO4CtaDw99ZtksN6sy2BUIghP-Y6y9t-T0tnXNzKooqCd3Uc6JmrKC_Bm8dgV5G9KEp8c4CeeyLYGY60ud3RtOeIISCHfRVoEAVvJQWrgJ_
- 关于π值的计算问题
- 关于日期计算的问题
- 关于日期计算的问题
- 关于js计算的问题
- 关于精度计算的问题
- 关于表达式计算的问题
- 关于圆的计算 圆柱的 球的 计算问题
- 关于 贝叶斯 计算公式的一个问题
- 求助:关于计算列的问题!!!
- 关于BigDecimal 的不精确计算问题
- 关于级联信道的信道容量计算问题
- 【关于SimpleDateFormat 的星期计算问题】
- 关于计算解码速度的问题
- IBM 关于云计算的三个问题
- PostgreSQL中关于时间计算的问题
- 关于购物车计算金钱的问题
- 关于java不能精确计算的问题
- 关于宏定义的计算问题
- 数据库系统原理——第一、二章总结
- Java课后作业
- 幻灯片-离散化入门
- 谈下个人web开发的一些优点
- Struts2配置文件
- 关于π值的计算问题
- XML树结构
- Android_gps
- 个人曾经觉得挺好的开发案例
- Merge Sort
- wordpress中不使用插件添加文章浏览数及评论数的方法。
- VST SDK 3.x 开发(一):VST结构介绍
- Actor生命周期理解
- spring mvc 一个controlller对应多个请求 其中包含 不同请求对应不同目录下的不同视图