java计算圆周率

2022/6/21 1:21:28

本文主要是介绍java计算圆周率,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

借鉴博客:https://wenku.baidu.com/view/ed9246f1cd2f0066f5335a8102d276a2002960e8.html

 

java代码

package com.example.demo01.test;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.math.BigDecimal;
import java.util.Date;
import java.util.Scanner;

/**
 * @Description TODO
 * @Author zhouruntao
 * @Date 2022/6/20 10:55
 */
public class Test02Circle {


    private static final Logger log = LoggerFactory.getLogger(Test02Circle.class);

    static void cut(int n){

        double y=1.0;

        for(int i=0;i<=n;i++){

            double π=3*Math.pow(2, i)*y;

            log.info("第"+i+"次切割,为正"+(6+6*i)+"边形,圆周率π≈"+π);

            y=Math.sqrt(2-Math.sqrt(4-y*y));

        }

    }

    public static void main(String[] str){


        BigDecimal fz = BigDecimal.ONE;
        BigDecimal fz1 = new BigDecimal("5");
        BigDecimal fz2 = new BigDecimal("239");

        BigDecimal fm1 = new BigDecimal("25");
        BigDecimal fm2 = new BigDecimal("57121");
        BigDecimal a = new BigDecimal("4");
        BigDecimal b = new BigDecimal("1");
        BigDecimal c = new BigDecimal("2");

        int flag = 1;

        BigDecimal result1;
        BigDecimal r1;
        BigDecimal r2;

        BigDecimal result = new BigDecimal("0");

        //精确迭代10000次
        int n = 10000;
        int i = 1;


        long time1 = new Date().getTime();

        while(i < n){
            i++;

            r1 = fz.divide(fz1.multiply(b), n, BigDecimal.ROUND_DOWN);
            r2 = fz.divide(fz2.multiply(b), n, BigDecimal.ROUND_DOWN);

            if(flag == 1 ){
                result1 = a.multiply(r1).subtract(r2);

                flag = -1;
            }else{
                result1 = r2.subtract(a.multiply(r1));
                flag = 1;
            }

            result = result.add(result1);

            b = b.add(c);
            fz1 = fz1.multiply(fm1);
            fz2 = fz2.multiply(fm2);

        }

        long time2 = new Date().getTime();

        log.info("p计算的结果: \n" + result.multiply(a).toString().substring(0, 1000));
        log.info("p计算时间:\n" + (time2-time1) + "毫秒");


    }





}

 

 

 

3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196442881097566593344612847564823378678316527120190914564856692346034861045432664821339360726024914127372458700660631558817488152092096282925409171536436789259036001133053054882046652138414695194151160943305727036575959195309218611738193261179310511854807446237996274956735188575272489122793818301194912983367336244065664308602139494639522473719070217986094370277053921717629317675238467481846766940513200056812714526356082778577134275778960917363717872146844090122495343014654958537105079227968925892354201995611212902196086403441815981362977477130996051870721134999999837297804995105973173281609631859502445945534690830264252230825334468503526193118817101000313783875288658753320838142061717766914730359825349042875546873115956286388235378759375195778185778053217122680661300192787661119590921642019
15:17:07.941 [main] INFO com.example.demo01.test.Test02Circle - p计算时间:
3329毫秒

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 



这篇关于java计算圆周率的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程