使用蒙特卡罗方法近似计算π的值实践
蒙特卡罗方法是一种计算方法。原理是通过大量随机样本,去了解一个系统,进而得到所想要计算的值。是一种基于随机抽样的数值计算方法。这个方法的基本思想是在一个正方形内随机放置若干个点,并且判断每个点是否在以正方形中心为圆心、以正方形边长为直径的圆内。随着放置点的数量的增加,落在圆内的点与总点数的比值将趋近于π/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 |
样本太多挺耗时的,测试验证能得到一个近似的π值
标签:count,java,System,实践,近似计算,println,total,out From: https://blog.51cto.com/u_12668715/8195643