使用蒙特卡罗方法近似计算π的值实践
蒙特卡罗方法是一种计算方法。原理是通过大量随机样本,去了解一个系统,进而得到所想要计算的值。是一种基于随机抽样的数值计算方法。这个方法的基本思想是在一个正方形内随机放置若干个点,并且判断每个点是否在以正方形中心为圆心、以正方形边长为直径的圆内。随着放置点的数量的增加,落在圆内的点与总点数的比值将趋近于π/4,我们可以根据这个比例来近似计算π的值。
非常强大和灵活,又相当简单易懂,很容易实现。对于许多问题来说,它往往是最简单的计算方法,有时甚至是唯一可行的方法。这一条感觉在某些场景上确实如此。
这里我们来实践验证下:
java中Math.PI= 3.141592653589793
java测试代码
import java.util.Random;
public class TestPi {
public static void main(String[] args) {
System.out.println("" );
System.out.println("π Math.PI=" + Math.PI);
long stime = System.currentTimeMillis();
int count = 0;
// int total=1000000;
int total = Integer.MAX_VALUE;
Random random = new Random();
for (int i = 0; i < total; i++) {
double x = random.nextDouble();
double y = random.nextDouble();
if (x*x+ y*y < 1) {
count++;
}
}
System.out.println("total = " + total);
System.out.println("count = " + count);
double pi = 4.0 * count / total;
System.out.println("pi = " + pi);
long etime = System.currentTimeMillis();
System.out.printf("执行时长:%d 毫秒.", (etime - stime));
}
}
当样本只有1000000时
取得值 |
3.142648 |
3.14156 |
3.1452 |
3.141768 |
3.142772 |
3.140096 |
3.141228 |
3.14214 |
当样本为Integer.MAX_VALUE=2147483647时,耗时一分多钟
取得值 |
3.141621214869256 |
3.141580238538599 |
3.141645552190787 |
3.1416235562142094 |
3.1415531370516647 |
3.141560710566845 |
3.1415556236829403 |
3.141595825153215 |
耗时 |
75924 |
74308 |
75997 |
75425 |
74782 |
73179 |
75318 |
84878 |
样本太多挺耗时的,测试验证能得到一个近似的π值