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毫秒