本篇文章介绍计算圆周率的几种算法,都是应用蒙特卡罗思想:或称计算机随机模拟方法,是一种基于“随机数”的计算方法。
方法一:蒙特卡罗方法,内切圆
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);
}
}