import java.math.BigDecimal;
public class Main {
public static void main(String[] args)
{
// 第一种级数方式,太慢了,算不出来,不精确
// //double PI = 0;
// BigDecimal PI =BigDecimal.ZERO;
// BigDecimal j=BigDecimal.ONE;//变量j
// BigDecimal k=BigDecimal.ONE;//常量k
// BigDecimal m=BigDecimal.valueOf(2);//大整数2
// BigDecimal n=BigDecimal.valueOf(-1);//大整数-1
// //PI+=1.0/(2*i-1)*a;// 1 -1 1 -1
// BigDecimal a=BigDecimal.ONE;//变量a 1 -1 1 -1
// for(int i=1;i<900000;i++)
// {
// PI=PI.add(k.divide(m.multiply(j).subtract(k),105,BigDecimal.ROUND_HALF_UP).multiply(a));//pi+=1/(2*j-1)*a
// j=j.add(BigDecimal.ONE);//j++;
// a=a.multiply(BigDecimal.valueOf(-1));
// //PI=BigDecimal.ONE.divide((2*i-1)*Math.pow(-1,i+1 ));
// }
// PI=PI.multiply(BigDecimal.valueOf(2));
// System.out.print(PI.setScale(100,BigDecimal.ROUND_HALF_UP));
//第二种级数方式1000和2000交叉取数即可
BigDecimal PI0 =BigDecimal.ONE;//临时pi
BigDecimal PI1 =BigDecimal.ONE;//真正的pi
BigDecimal i=BigDecimal.ONE;//变量i
BigDecimal j=BigDecimal.ONE;//变量j
BigDecimal m=BigDecimal.valueOf(2);//大整数2
BigDecimal n=BigDecimal.valueOf(1);//大整数1
for(int s=0;s<200;s++)
{
PI0=PI0.multiply(i.divide(m.multiply(i).add(n),105,BigDecimal.ROUND_HALF_UP));//PI0*=1/(2*i+1);
PI1=PI1.add(PI0);
i=i.add(BigDecimal.ONE);//i++;
}
PI1=PI1.multiply(BigDecimal.valueOf(2));
System.out.print(PI1.setScale(100,BigDecimal.ROUND_HALF_UP));
}
}
原文:https://www.cnblogs.com/skz5725/p/11748455.html