java计算π的多种方法

 更新时间:2021年04月19日 14:16:46   作者:birdreamer  
这篇文章主要介绍了使用java计算π的多种方法,代码详细,逻辑清晰,对于算法思路可能有所帮助,需要的朋友可以参考下

计算π的方法 

一、蒙特卡罗法

这种方法是一种利用计算机随机数的功能基于“随机数”的算法,通过计算落在单位圆内的点与落在正方形内的点的比值求π。

在这里插入图片描述

由于图形的对称性,我们靠考虑该图的四分之一部分。

假定一点能够均匀地扔到一个正方形中,计算落入其中的点个数。通过计数其中落入内切圆的点的个数;

如果一共投入N个点,其中有M个落入圆中,则只要点均匀,假定圆周的半径为R,则:

在这里插入图片描述

该方法得到的要得到π的精度与投入点的个数有关,一般个数较大时精度比较高。

java代码:随机计算π的程序

public class RandomPI {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println(rand_pi(100000));  //改变参数值
    }
    public static double rand_pi(int n) {
        int numInCircle = 0;
        double x, y;
        double pi;
        for(int i=0;i < n; i++){
            x = Math.random();
            y = Math.random();
            if(x * x + y * y < 1) 
                numInCircle++;
        }
        pi=(4.0 * numInCircle) / n;
        return pi;
    }

在这里插入图片描述

可以看出来,该方法投入点的个数越大,越接近真实值。

二、数学公式(级数)

由数学公式:

在这里插入图片描述

java代码:随机计算π的程序

public class MathPi {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println(math_Pi(1000));//改变参数值
    }
    public static double math_Pi(int n) {
        int numInCircle = 0;
        double sum = 0;
        double pi;
        for(int i=1;i <= n; i++){
            sum += 1.0/(i*i);
        }
        pi = Math.sqrt(sum * 6);
        return pi;
    }
}

当n取1000时就很接近真实值了n=1000时,pi=3.1406380562059946。

三、划分网格计算π

在这里插入图片描述

将图片分为n*n个小方形,统计落在圆内的个数占所有方形的比列。

java代码:随机计算π的程序

public class gridPI {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println(grid_Pi(10));//改变参数值
    }
    public static double grid_Pi(int n) {
        int i;
        double sum=0;
        for(i = 0;i < n; i++)
            sum += (int)Math.sqrt(n*(double)n-i*(double)i);
        return (4.0 * sum)/n/n;
    }
}

在这里插入图片描述

到此这篇关于java计算π多种方法的文章就介绍到这了,希望对你有所帮助,更多相关计算圆周率内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 如何在 Java 中实现不可变类

    如何在 Java 中实现不可变类

    这篇文章主要介绍了如何在 Java 中实现不可变类,不变性是函数式编程的关键,因为它与尽量减少变化部分的这一目标相一致,这使得对这些部分的推断更为容易一些。,需要的朋友可以参考下
    2019-06-06
  • java 中二分法查找的应用实例

    java 中二分法查找的应用实例

    这篇文章主要介绍了java 中二分法查找的应用实例的相关资料,希望通过本文大家能掌握二分法的使用方法,需要的朋友可以参考下
    2017-09-09
  • Java实现学生信息管理界面

    Java实现学生信息管理界面

    这篇文章主要为大家详细介绍了Java实现学生信息管理界面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • springcloud整合gateway实现网关全局过滤器功能

    springcloud整合gateway实现网关全局过滤器功能

    本文主要介绍了springcloud整合gateway实现网关全局过滤器功能,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • Idea servlet映射方法优缺点对比

    Idea servlet映射方法优缺点对比

    这篇文章主要介绍了Idea servlet映射方法优缺点对比,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • 浅析我对 String、StringBuilder、StringBuffer 的理解

    浅析我对 String、StringBuilder、StringBuffer 的理解

    StringBuilder、StringBuffer 和 String 一样,都是用于存储字符串的。这篇文章谈谈小编对String、StringBuilder、StringBuffer 的理解,感兴趣的朋友跟随小编一起看看吧
    2020-05-05
  • java实现XML与JSON转换的便捷实用方法

    java实现XML与JSON转换的便捷实用方法

    这篇文章主要为大家介绍了java实现XML与JSON转换的便捷实用方法,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • Kafka简单客户端编程实例

    Kafka简单客户端编程实例

    这篇文章主要为大家详细介绍了Kafka简单客户端编程实例,利用Kafka的API进行客户端编程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • java 静态链表实现示例详解

    java 静态链表实现示例详解

    这篇文章主要为大家介绍了java 静态链表实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • Java 动态编译在项目中的实践分享

    Java 动态编译在项目中的实践分享

    在 Java 中,动态编译是指在运行时动态地编译 Java 源代码,生成字节码,并加载到 JVM 中执行,动态编译可以用于实现动态代码生成、动态加载、插件化等功能,本文将给大家分享一下Java 动态编译在项目中的实践,感兴趣的同学跟着小编一起来看看吧
    2023-07-07

最新评论