I am creating code to implement this algorithm:
However, I get this error, even with MathContext (1000):
Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result. at java.math.BigDecimal.divide(BigDecimal.java:1603) at picalculator.PiCalculator.calculatePi(PiCalculator.java:59) at picalculator.PiCalculator.main(PiCalculator.java:25) Java Result: 1
When using this method:
public static void calculatePi() { BigInteger firstFactorial; BigInteger secondFactorial; BigInteger firstMultiplication; BigInteger firstExponent; BigInteger secondExponent; int firstNumber = 1103; BigInteger firstAddition; BigDecimal currentPi = BigDecimal.ONE; BigDecimal pi = BigDecimal.ONE; BigDecimal one = BigDecimal.ONE; int secondNumber = 2; double thirdNumber = Math.sqrt(2.0); int fourthNumber = 9801; BigDecimal prefix = BigDecimal.ONE; for(int i=1;i<4;i++){ firstFactorial = factorial(4*i); secondFactorial = factorial(i); firstMultiplication = BigInteger.valueOf(26390*i); firstExponent = exponent(secondFactorial, 4); secondExponent = exponent(BigInteger.valueOf(396),4*i); firstAddition = BigInteger.valueOf(firstNumber).add(firstMultiplication); currentPi = currentPi.add(new BigDecimal(firstFactorial.multiply(firstAddition)).divide(new BigDecimal(firstExponent.multiply(secondExponent)), new MathContext(10000))); } prefix =new BigDecimal(secondNumber*thirdNumber); prefix = prefix.divide(new BigDecimal(fourthNumber), new MathContext(1000)); currentPi = currentPi.multiply(prefix, new MathContext(1000)); pi = one.divide(currentPi); System.out.println("Pi is: " + pi); return; }
I proved that factorial (a); and the exponents (a, b) precisely believe the factorial a and the result a ^ b, respectively.
Does anyone know how to fix this?
source share