我必须用leibinz级数计算π
pi/4=1-1/3+1/5-1/7。。。
我需要达到六位有效数字精度所需的迭代次数,原来java的小数点后有15位,但我只需要5(3.14159)的精度,我不能舍入,如果不舍入tho和不使用数学,我如何检查sig figure的精度,如果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);
}
}
输出为
格式化增量:0.0
迭代次数:426183
pi:3.14159
pi格式的数学库:3.14159
我不需要解决办法,但一些帮助,如何才能做到这一点,没有四舍五入。
1条答案
按热度按时间uklbhaso1#
如果java要给我小数点后的9位数字,我如何在不舍入tho和不使用数学舍入函数的情况下检查sig figure的精度?
一个简单的方法是检查它是否在任何一边的0.000005以内(或者任何你想要的精度):