求PI

转载 2012年03月26日 23:30:42

话说题目是,用随机算法求PI,就是圆周那个PI。随机算法神马的从来都是用过,没写过,这里随便贴个线性同余法

    其中b >= 0,c >= 0,d <= m。d称为该随机序列的种子。如何选取该方法中的常数b、c和m直接关系到所产生的随机序列的随机性能。这是随机性理论研究的内容,已超出本书讨论的范围。从直观上看,m应取得充分大,因此可取m为机器大数,另外应取gcd(m, b) = 1,因此可取b为一素数。

 

理论的东西,不折腾了,老实说我也不会,这里直接用c库里的rand,种子也不初期化了。

image

原理是很简单了,以圆心为原点,往上面扔随机点,如果随机点的个数足够多,无疑圆心内的点数除以总点数 = (PI * pow(r,2)) / (4 * pow(r,2)) = PI / 4 。所以当n足够大时,k与n之比就逼近这一概率。从而,PI 约等于 (4*k)/n。看实现:

double get_rand_num() {
    //以圆心作为原点,随机点的x轴,y轴的坐标
    return rand() / RAND_MAX;
} 

double get_pi(long num = 200000000) {
    int k = 0;
    for (int i=0; i<num; i++) {
        double x = get_rand_num();
        double y = get_rand_num();
        if ((x*x + y*y) < 1.0) {
            k++;
        }
    }
    return (double)4*k / (double)num;
}

不过么,结果的精确度实在是不咋的,我的机器上跑出来3.9几,可能是计算中的误差问题,也肯能是点数不够大,。。。就这样吧。

写一个函数求PI的值

题意描述:写一个函数,求得PI的值 解题思路一:公式法,Pi/4 = 1 - 1/3 + 1/5 + …… double getPi() { double pi = 0; int sign =...
  • u012050154
  • u012050154
  • 2016年10月11日 09:17
  • 746

matlab数值积分方法求pi的近似值及其比较

求pi的近似值可以说是比较经典的问题了。在各种软件环境下,用过包括蒙特卡洛等各种方法求过pi的近似值。今天给大家带来通过数值积分的方法来求pi的近似值,并进行一个简单的误差分析clear; clc; ...
  • lusongno1
  • lusongno1
  • 2016年03月13日 21:09
  • 1869

用概率法+积分法计算PI的值

设f:[0, 1]->[0, 1]是一个连续函数,则由曲线y=f(x),x轴,y轴和直线x=1围成的面积的积分公式为: 向单位面积的正方形内投镖n次,落入阴影部分的镖的数目为k,则可用面积比来近似求...
  • qiyinmiss
  • qiyinmiss
  • 2015年09月16日 16:17
  • 231

并行计算mpi [ PI ]

#include "mpi.h" #include #include double f( double ); double f( double a ) {     return (...
  • jesseshen
  • jesseshen
  • 2011年08月23日 16:04
  • 3554

python R 实现蒙特卡洛算法计算pi值

python R 两种语言实现蒙特卡洛算法计算pi值。
  • neweastsun
  • neweastsun
  • 2016年07月01日 11:57
  • 3139

初学C语言:求圆周率pi的近似值(pi/4=1-1/3+1/5-1/7...)

#include #include int main() { double pi1,pi2,j=0,i=0,u=0,v=0; do{ i=1/(1+4*j) ; ...
  • litianyang_csdn
  • litianyang_csdn
  • 2016年08月11日 14:17
  • 1201

C语言求高精度PI

如下代码能求解出高精度的PI值 #include #include long a=10000,b,c=2800,d,e,f[2801],g; int main() { for(;...
  • odaynot
  • odaynot
  • 2012年08月30日 10:19
  • 6173

OpenMP并行计算PI的值

用VS新建一个工程后,首先要右键项目,属性--C/C++--语言,,在右边的对话框中OpenMP支持选择是; 程序代码为: #include #include #include   sta...
  • longshengguoji
  • longshengguoji
  • 2012年06月15日 19:42
  • 3793

计算任意位数的Pi

当用程序实现求pi的值时,也许你能够很快写出算法(利用求pi的几个公式),但是由于使用单变量保存结果,限于计算机硬件对变量的表示范围有限,因此,最多只能计算出pi值小数点后十多位。但需要得到一个更大位...
  • u012027907
  • u012027907
  • 2013年10月08日 01:47
  • 3922

C++计算PI的值

#include using namespace std;   double arctan(double x) {           double sqr = x * x;       ...
  • dabai86
  • dabai86
  • 2017年05月08日 14:02
  • 331
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:求PI
举报原因:
原因补充:

(最多只允许输入30个字)