使用sig figure精度计算PI而不进行舍入

时间:2017-09-04 21:56:55

标签: java math pi

我必须使用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

我不需要解决方案,但有一些帮助,如何在没有舍入的情况下完成。

1 个答案:

答案 0 :(得分:1)

  

如果没有使用数学,圆函数,如果java会给出小数点以外的9位数,我如何检查sig figure精度而不使用舍入?

一种简单的方法是检查它是否在0.000005之内(或者你想要的任何其他精度):

if ((n >= 3.141585) && (n < 3.141595))