Я работал над небольшой программой для вычисления числа пи, используя серию Nilacantha, BigDecimal и чей-то код, но отредактированный мной.
Вот код на данный момент:
package com.waitdev.pi;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.math.BigDecimal;
public class MainProgram {
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Enter the number of calculations you would like to do");
long no = Long.parseLong(reader.readLine());
long step = 0;
BigDecimal ans = new BigDecimal(3);
Double j = 2.0;
BigDecimal pi = new BigDecimal(0.0);
while (true) {
step++;
if ((step % 2) == 1) {
ans.add(new BigDecimal(4.0 / (1.0 * j * (j + 1) * (j + 2))));
} else {
ans.subtract(new BigDecimal(4.0 / (1.0 * j * (j + 1) * (j + 2))));
}
j += 2;
pi = ans;
if (step >= no)
break;
}
System.out.println("Calculated: " + pi);
BigDecimal enew = pi;
double error = enew.divide(3.1415926535897932);
if (error >= 1) {
double bigerror = 2 - error;
System.out.println("Your accuracy is: " + bigerror * 100 + "%");
System.out.println(step);
} else {
System.out.print("Your accuracy is: ");
System.out.print(error * 100);
System.out.println("%");
System.out.println(step);
}
}
}
Когда я запускаю эту программу, результатом является этот отчет о сбое:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The method divide(BigDecimal) in the type BigDecimal is not applicable for the arguments (double)
at com.waitdev.pi.MainProgram.main(MainProgram.java:38)
Кажется, в этой части:
double error = enew.divide(3.1415926535897932);
В eclipse эта строка говорит: «Метод разделения (BigDecimal) в типе BigDecimal не применим для аргументов (двойных)».
Кстати, я новичок в BigDecimal и также новичок в Java, хотя кое-что из основ знаю.