首页 > 编程语言 >使用java近似计算π的值实践

使用java近似计算π的值实践

时间:2023-11-05 21:01:14浏览次数:38  
标签:count java System 实践 近似计算 println total out

使用蒙特卡罗方法近似计算π的值实践

      蒙特卡罗方法是一种计算方法。原理是通过大量随机样本,去了解一个系统,进而得到所想要计算的值。是一种基于随机抽样的数值计算方法。这个方法的基本思想是在一个正方形内随机放置若干个点,并且判断每个点是否在以正方形中心为圆心、以正方形边长为直径的圆内。随着放置点的数量的增加,落在圆内的点与总点数的比值将趋近于π/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

使用java近似计算π的值实践_java

当样本为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

使用java近似计算π的值实践_java_02

 

样本太多挺耗时的,测试验证能得到一个近似的π值

标签:count,java,System,实践,近似计算,println,total,out
From: https://blog.51cto.com/u_12668715/8195643

相关文章

  • Java 操作 XML(15)--XOM 使用
    XOM是一个面向对象的XMLAPI,有点像DOM风格,但是许多功能使XOM与众不同,其中最主要的是严格维护内存对象中的不变性,以便始终可以将XOM实例序列化以更正XML。本文主要介绍使用XOM处理XML,文中所使用到的软件版本:Java1.8.0_341、XOM1.3.9。1、简介XOM被设计成易于学习和......
  • java基础:static静态代码块
    在Java中,静态代码块(staticblock)是在类加载时执行的,而不是在每次创建对象时执行的。当类被加载时,静态代码块会按照在类中出现的顺序被执行一次。这意味着无论创建多少个对象,静态代码块只会执行一次。具体执行时机如下:当类被首次加载时,静态代码块会被执行。类的加载通常发生在使用该......
  • Java21对虚拟线程进行http压测使用不同的GC
    JDK21默认GC是G1.JDK21除了G1外,还可以使用ZGC(Java11预览、Java15正式版),Java21在ZGC基础上继续推出了分代ZGC,目前还是试行阶段。开启ZGC:java-XX:+UseZGC-jarmyapp.jar开启ZGC,并试用分代ZGCjava-XX:+UseZGC-XX:+ZGenerational-jarmyapp.jar以下的对一个启用tomcat......
  • java 模板
    1.添加依赖:<dependencies><!--支持模板--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId></dependency></dependencies>注:......
  • 华为云云耀云服务器L实例评测|企业项目最佳实践之建议与总结(十二)
    十三、建议与总结:本文从云服务器的发展阶段,到华为云的发展阶段,成为国内领先的云计算服务提供商之一,再到华为云耀云服务器L实例服务器的评测。云计算的最大优势在于IT基础设施资源能够随用户业务的实际变化而弹性伸缩,用户需要多少资源就用多少资源,通过这种弹性计算的能力和按需计费......
  • java.time.format.DateTimeParseException: Text ‘202310132358‘ could not be pars
    你遇到的问题是由于在解析日期和时间时格式不正确。Java无法解析‘202310132358’这个字符串,因为它不符合Java日期时间格式。Java期望的日期时间格式通常是“yyyy-MM-ddHH:mm:ss”,其中:yyyy是四位数的年份MM是两位数的月份dd是两位数的日期HH是两位数的小时(24小时制)mm是两......
  • java 计算两个日期之间相隔的天数
    在Java8中,你可以使用java.time包中的LocalDate类和Period类来计算两个日期字符串之间相隔的天数。以下是一个示例代码:importjava.time.LocalDate;importjava.time.format.DateTimeFormatter;importjava.time.Period;publicclassDateDifference{publicstaticvoid......
  • java IO模型:AIO(Asynchronous I/O)
    AIO也就是NIO2。Java7中引入了NIO的改进版NIO2,它是异步IO模型。异步IO是基于事件和回调机制实现的,也就是应用操作之后会直接返回,不会堵塞在那里,当后台处理完成,操作系统会通知相应的线程进行后续的操作。目前来说AIO的应用还不是很广泛。Netty之前也尝试使用过AIO......
  • java IO模型:BIO(Blocking I/O)
    BIO属于同步阻塞IO模型。同步阻塞IO模型中,应用程序发起read调用后,会一直阻塞,直到内核把数据拷贝到用户空间。在客户端连接数量不高的情况下,是没问题的。但是,当面对十万甚至百万级连接的时候,传统的BIO模型是无能为力的。因此,我们需要一种更高效的I/O处理模型来应对更高......
  • java IO流:介绍下阻塞、非阻塞、同步、异步 I/O 的概念
    这里先介绍下阻塞、非阻塞、同步、异步I/O的概念。先来看看阻塞I/O,当用户程序执行read,线程会被阻塞,一直等到内核数据准备好,并把数据从内核缓冲区拷贝到应用程序的缓冲区中,当拷贝过程完成,read才会返回。注意,阻塞等待的是「内核数据准备好」和「数据从内核态拷贝到用户态」这两......