标签:
上图展示的是,在二维坐标图中,半径为1的圆的1/4, 随机n个点(x坐标在0~1之间,并且y坐标在0~1之间),落在半径为1的圆内部,当点的样本足够多的时候,形成1/4的饼图。
/** * */ package com.sunny.www.interview; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.Scanner; /** * 使用随机数计算pi值 * @author sunny * */ public class EstimatingPi { public static double estimatingPi(long samplesCount){ long inCircleCount = 0; //落在圆以内的点(直径为单位1) for(int i = 0; i < samplesCount; i++){ double x = Math.random(); //x坐标 double y = Math.random(); //y坐标 if(x * x + y * y < 1){ //到原点距离的平方<1, 表示点落在圆内部 inCircleCount++; } } return BigDecimal.valueOf(4).multiply(BigDecimal.valueOf(inCircleCount)).divide(BigDecimal.valueOf(samplesCount), 5, RoundingMode.HALF_UP).doubleValue(); } public static void main(String[] args) { // while(true){ // Scanner sc = new Scanner(System.in); //从控制台接收参数 // long samplesCount = sc.nextLong(); //样本个数 // System.out.println(EstimatingPi.estimatingPi(samplesCount)); // } for(int i = 2; i <= 10; i++){ long samplesCount = (long) Math.pow(10.0, Double.valueOf(String.valueOf(i))); System.out.println("EstimatingPi(" + samplesCount + ")=" + EstimatingPi.estimatingPi(samplesCount)); } } }
EstimatingPi(100)=3.16 EstimatingPi(1000)=3.244 EstimatingPi(10000)=3.1364 EstimatingPi(100000)=3.14236 EstimatingPi(1000000)=3.1403 EstimatingPi(10000000)=3.14198 EstimatingPi(100000000)=3.14144 EstimatingPi(1000000000)=3.14177
标签:
原文地址:http://www.cnblogs.com/sunny08/p/4883081.html