我必须使用leibinz系列计算Pi
pi / 4 = 1 - 1/3 + 1/5 - 1/7 ......
我需要迭代次数才能达到六位数的精确度,原来java有15位以上的小数位但是我只需要5(3.14159)的精度而且我不能舍入,我怎样才能检查sig数字的精度没有舍入和不使用数学,圆函数,如果java会给我超过小数位9位数?
public class Main {
public static void main(String[] args) {
double series = 0;
double denominator = 1;
double numerator = 1;
double testingPi;
double formattedTestingPi = 0;
double formattedMathPi = Math.round(Math.PI * 100000.0) / 100000.0;
int max = 1200000;
int iterations = 0;
double formattedPreviousPi = 0;
double formattedDelta = 0;
for(int i = 1; i < max;i++)
{
iterations = i;
if((i % 2) != 0)
{
series = series + (numerator/denominator);
}
else if((i % 2) == 0)
{
series = series + ((numerator/denominator) * -1);
}
testingPi = series * 4;
formattedTestingPi = (Math.round(testingPi * 100000.0))/100000.0;
formattedDelta = formattedTestingPi - formattedPreviousPi;
if(Math.abs(formattedDelta) <= 0.000009)
{
i = max;
}
formattedPreviousPi = formattedTestingPi;
denominator = denominator + 2;
}
System.out.println("Formatted Delta :" + formattedDelta);
System.out.println("Iterations :" + iterations);
System.out.println("Pi Formatted Computed :" + formattedTestingPi);
System.out.println("Pi Formatted Math Library :" + formattedMathPi);
}
}
输出
格式化Delta:0.0
迭代次数:426183
Pi格式化计算:3.14159
Pi格式化数学库:3.14159
我不需要解决方案,但有一些帮助,如何在没有舍入的情况下完成。
答案 0 :(得分:1)
如果没有使用数学,圆函数,如果java会给出小数点以外的9位数,我如何检查sig figure精度而不使用舍入?
一种简单的方法是检查它是否在0.000005之内(或者你想要的任何其他精度):
if ((n >= 3.141585) && (n < 3.141595))