# π后100位的计算PI

import java.math.BigDecimal;

/**
* @Description: TODO(π小数点后100位)
* @author zhanbian
* @date 2017年2月21日 下午5:47:12
* 泰勒公式 arctan(x)  =  x − x3/3 + x5/5 − x7/7 + x9/9 − x11/11 + . . .
* 通常用到的公式为π = 4·arctan(1)，效率低
* 这里用到的公式π  =176·arctan(1/57)+28·arctan(1/239)−48·arctan(1/682)+96·arctan(1/12943)
* 参考：http://turner.faculty.swau.edu/mathematics/materialslibrary/pi/piforms.html
*/
public class PITest {

private static int n = 100;//小数点后100位

public static void main(String[] args) {

BigDecimal part1 = arctan(57).multiply(new BigDecimal(176));
BigDecimal part2 = arctan(239).multiply(new BigDecimal(28));
BigDecimal part3 = arctan(682).multiply(new BigDecimal(-48));
BigDecimal part4 = arctan(12943).multiply(new BigDecimal(96));

System.out.println(part.toString());
}

public static BigDecimal arctan(int x){
int n2 = n+2;//为了防误差

BigDecimal result = BigDecimal.ZERO;
BigDecimal xsquare = new BigDecimal(x*x);
BigDecimal bigx = new BigDecimal(x);
BigDecimal temp;
BigDecimal res = BigDecimal.ONE.divide(bigx , n2, BigDecimal.ROUND_HALF_EVEN);

boolean b = true;
for(int i=1;;i+=2){
temp = res.divide(new BigDecimal(i), n2, BigDecimal.ROUND_HALF_EVEN);
if(temp.compareTo(BigDecimal.ZERO)==0){//根据莱布尼兹级数结果=0时返回
break;
}
if(b){
}else{
result = result.subtract(temp);//减
}
b = !b;
res = res.divide(xsquare, n2, BigDecimal.ROUND_HALF_EVEN);
}
return result;
}
}

3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982

1480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288

1097566593344612847564823378678316527120190914564856692346034861045432664821339360726024914127372458700

6606315588174881520920962829254091715364367892590360011330530548820466521384146951941511609433057270365

7595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406

5664308602139494639522473719070217986094370277053921717629317675238467481846766940513200056812714526356

0827785771342757789609173637178721468440901224953430146549585371050792279689258923542019956112129021960

8640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425

2230825334468503526193118817101000313783875288658753320838142061717766914730359825349042875546873115956

28638823537875937519577818577805321712268066130019278766111959092164201989