menu HCG_Sky's Blog
more_vert
chevron_right 首页 » 学习笔记,教程,随笔,Windows » Java案例-莱布尼兹公式计算Pi的值
Java案例-莱布尼兹公式计算Pi的值
2021-11-08 | 学习笔记,教程,随笔,Windows | 暂无评论 | 132 次阅读 | 1199字

Pi = 3.1415926......?Pi?

前言

依旧是这周 Java 的课后作业了哈哈哈。。。。。。。
作业需求是使用迭代计算PI值

说干就干,依旧是在宿舍用IDEA捣鼓了一会(这个比较简单嘻嘻),最终得以实现
其实昨天就写完了,肝不动了,今天来补个帖哈哈哈
下面我们来看看吧~


先将式子变化一下

掏出我的小黑板,先将式子两边同时×4把左边的4约去,然后给式子的第一个项也就是4,加上分母1,接着把4前的+号显示出来,这样是为了方便我们后面找规律,如下图所示

找规律

 现在可以看到式子的分母都是1、3、5、7、9......的奇数,方法上我们用for循环配合continue来跳过偶数即可。同时发现运算符都是一个“+”一个“-”,这里我们从0开始给它标识上,然后我们又可以发现,“+”号都是偶数标识,“-”号都是奇数标识,再运用if语句进行“+”“-”的判断,最后执行运算即可得到我们的Pi值

话不多说我们上代码

 第一步先定义好我们需要的变量

double Pi = 0;        //用于接收计算后的值
double x;             //用于接收单项式的值
int y = 0;             //用于给运算符进行编号
int total = 0;         //用于统整个过程计算的次数,可有可无

 接着来定义我们的for循环并配合continue来跳过偶数,需要注意的是,循环里的初始化语句对变量类型的定义要是double类型,如果使用int类型会导致计算错误。

for(double i = 1;;i++){                //因为公式是没有尽头的所以就不需要条件判断语句,也就是我们程序上的死循环
    if(i % 2 == 0){                    //对i进行取余,如果为0就是偶数,
        continue;                    //跳过本次循环执行下一次
    }
}
//以上是第二步的代码
=======================================================================================
//以下将一二步合起来的代码
double Pi = 0;
double x;
int y =0;
int total = 0;

for(double i = 1;;i++){                
    if(i % 2 == 0){
        continue;
    }
}

 写到这里,我们已经解决了分母都为奇数的问题,接下来就是计算每个单项式的数值并将它存储起来等待调用,这里我们用刚刚定义的变量x来接收每个单项式的值

x = (4 / i);           //分母为我们的利用continue筛选后的i,也就是奇数
                     // “()”是为了美观也方便理解,可有可无
//以上是第三步的代码
=======================================================================================
//以下将一二三步合起来的代码
double Pi = 0;
double x;
int y =0;
int total = 0;

for(double i = 1;;i++){                
    if(i % 2 == 0){
        continue;
    }
    
    x = (4 / i);
}

 现在整条式子的每个单项式的值我们都有了,接下来我们只需要将他们加起来就行了,这里用到我们前面定义的y配合if语句来判断是应该“+”还是“-”,同时用我们定义的total来记录整个运算过程进行了多少次“+”“-”,当然这一步同样是可有可无

if(y % 2 == 0){            //前面找规律我们知道偶数为“+”奇数为“-”
    Pi += x;            //当y取余为0即为偶数所以做“+”法   Pi += x;  等效于  Pi = Pi + x;
    total++;            //记录“+”的次数
}else{
    Pi -= x;            //当y取余为0即为偶数所以做“-”法   Pi -= x;  等效于  Pi = Pi - x;
    total++;            //记录“-”的次数
}
y++;                     //循环下去给每个符号做标识
//以上是第四步的代码
=======================================================================================
//以下将一二三四步合起来的代码
double Pi = 0;
double x;
int y =0;
int total = 0;

for(double i = 1;;i++){                
    if(i % 2 == 0){
        continue;
    }
    
    x = (4 / i);
    
    if(y % 2 == 0){
        Pi += x;
        total++;
    }else{
        Pi -= x;
        total++;
    }
    y++; 
}

 到这我们基本就可以输出我们的Pi值了,但是需要注意的是,我们写的是死循环,只要没有终止命令它就会至死不渝的执行下去!所以在我debug时发现这个值时无限接近于我们圆周率的3.1415926......,那么我们给它限制一个范围然后执行break语句来终止程序,最后输出我们的Pi值!范围(3.1415926 ≤ Pi ≤ 3.1415927)

if(Pi >= 3.1415926 && Pi <= 3.1415927){                        //利用if判断Pi值达到这个范围时执行输出
    System.out.println("Pi的值为:" + Pi);                     //输出Pi的值 3.1415926000000005
    System.out.println("经过了" + total + "次加减法运算");      //输出一共进行了多少次加减运算 18660304次
    break;                                                 //结束循环
}
//以上是第五步的代码
=======================================================================================
//以下将一二三四五步合起来的代码
double Pi = 0;
double x;
int y =0;
int total = 0;

for(double i = 1;;i++){                
    if(i % 2 == 0){
        continue;
    }
    
    x = (4 / i);
    
    if(y % 2 == 0){
        Pi += x;
        total++;
    }else{
        Pi -= x;
        total++;
    }
    y++;
    
    if(Pi >= 3.1415926 && Pi <= 3.1415927){
        System.out.println("Pi的值为:" + Pi);
        System.out.println("经过了" + total + "次加减法运算");
        break;
    }
}

 到这我们心心念念的Pi值就出现啦!!!

写在最后

 我写的这个方法可能(自信点,把可能去掉)不是那么的简洁高效,但也是在电脑前一点点琢磨出来的,希望各位和我一样初学Java的好兄弟也能沉下心来慢慢的体会,CV大法虽然好,但你真正学到了吗,自己研究过后再来看看别的大神的代码也不迟嘛,最后希望大家都能敲出自己心仪的代码!也希望好兄弟们作为一个未来程序员要有自己排查并解决问题的能力,记住!有了耐心和毅力,你就拥有一切!

直接运行的代码

↓代码要格式化,大家也不要例外哦↓
public class PiOperation {
    public static void main(String[] args){

        double Pi = 0;
        double x;
        int y =0;
        int total = 0;

        for(double i = 1;;i++){
            if(i % 2 == 0){
                continue;
            }

            x = (4 / i);

            if(y % 2 == 0){
                Pi += x;
                total++;
            }else{
                Pi -= x;
                total++;
            }
            y++;

            if(Pi >= 3.1415926 && Pi <= 3.1415927){
                System.out.println("Pi的值为:" + Pi);
                System.out.println("经过了" + total + "次加减法运算");
                break;
            }
        }
    }
}

效果


废话少说

快去做作业吧哈哈
文章目录
发表评论
暂无评论
textsms
account_circle
email
link


arrow_back 上一篇
arrow_forward 下一篇
七牛云 腾讯云 阿里云 百度统计 TrustAsia 安全签章 MySSL 安全签章