本篇文章介绍计算圆周率的几种算法,都是应用蒙特卡罗思想:或称计算机随机模拟方法,是一种基于“随机数”的计算方法。
方法一:蒙特卡罗方法,内切圆
1.1思想
         有一个以(0,0)为中心的2*2的正方形,及这个正方形的半径为1的内接圆,取这个正方形范围内的一点,则这个点落入内接圆的概率为PI/4。
1.2程序
程序分为两部分:(1)随机生成正方形内的一点(2)计算落入内接圆的概率,从而求得PI。
[java] view plaincopy
import java.util.Random;
  
  
public class MonteCarlo
  {
  
    int m = 0;//落入内接圆的次数
  
    int n = 10000000;//试验进行次数
  
    float x;//点的x坐标值
  
    float y;//点的y坐标值
  
    double result = 0;//结果,即为PI
  
    Random r = new Random();//Random对象,用于生成随机数
  
    public static void main(String[] args){
  
        MonteCarlo c = new MonteCarlo();
  
        c.calculatePI();
  
    }
  
    public float getNum(){
  
        float tmp = 1-r.nextFloat()*2;//nextFloat生成[0,1]的浮点数
  
        return tmp;
  
    }
  
    public void calculatePI(){
  
        for(int i = 0; i<n;i++){//进行n次试验
  
            x=getNum();
  
            y=getNum();
  
            float tmp = (float) java.lang.Math.sqrt(x*x+y*y);//开根号
  
            if(tmp<=1)
  
                m++;//落入内接圆的次数
  
        }
  
        result = (4*(float)m)/n;//PI
  
        System.out.println("m: "+m);
  
        System.out.println("n: "+n);
  
        System.out.println("pi: "+result);
  
    }
  
}