Java程序,用于以10^-6的精度确定嵌套根常量的值

Java程序,用于以10^-6的精度确定嵌套根常量的值,java,matlab,math,Java,Matlab,Math,嵌套根常数定义为: 我正在编写一个Java程序,以10^-6精度计算嵌套根常量的值,并打印达到该精度所需的迭代次数。这是我的密码: public class nested_radical { public nested_radical() { int n = 1; while ((loop(n) - loop(n - 1)) > 10e-6) { n++; } System.out.println("value of given exp

嵌套根常数定义为:

我正在编写一个Java程序,以10^-6精度计算嵌套根常量的值,并打印达到该精度所需的迭代次数。这是我的密码:

public class nested_radical {

public nested_radical() {
    int n = 1;

    while ((loop(n) - loop(n - 1)) > 10e-6) {
        n++;
    }
    System.out.println("value of given expression = " + loop(n));
    System.out.println("Iterations required = " + n);
}

public double loop(int n) {
    double sum = 0;
    while (n > 0) {
        sum = Math.sqrt(sum + n--);
    }
    return (sum);
}


public static void main(String[] args) {
    new nested_radical();
}

}
这段代码执行它应该执行的操作,但速度很慢。我应该做什么来优化这个程序?有人能提出另一种可能的方法来实施这个计划吗


我还想用MATLAB编写一个类似的程序。如果有人也能把这个程序翻译成MATLAB,那就太好了。

我对这个代码做了一些修改,现在它存储了
循环(n-1)
的值,而不是每次都计算它。现在这个程序似乎比以前优化了很多

public class nested_radical {

public nested_radical() {
    int n = 1;
    double x = 0, y = 0, p = 1;
    while ( p > 10e-6) { 
        y=x;             /*stored the value of loop(n - 1) instead of recomputing*/
        x = loop(n);
        p = x - y;
        n++;
    }
    System.out.println("value of given expression = " + x);
    System.out.println("Iterations required = " + n);
}

public double loop(int n) {
    double sum = 0;
    while (n > 0) {
        sum = Math.sqrt(sum + n--);
    }
    return (sum);
}


public static void main(String[] args) {
    new nested_radical();
}

}
我还成功地在MATLAB中翻译了这段代码。以下是MATLAB的代码:

n = 1;
x = 0;
p = 1;
while(p > 10e-6)
    y = x;
    sum = 0;
    m=n;
    while (m > 0)
        sum = sqrt(sum + m);
        m = m - 1;
    end
    x = sum;
    p = (x-y);
    n = n + 1;
end
fprintf('Value of given expression: %.16f\n', x);
fprintf('Iterations required: %d\n', n);

只需记住
循环(n-1)
而不是重新计算,就可以使计算速度提高一倍。转到
n=15
左右不应该那么慢。请解释代码以何种方式或在何种情况下慢。你是怎么测量的?我不是真的测量的。我刚刚注意到这个程序打印输出大约需要2-3秒。这就是为什么我认为它很慢。我认为记住
循环(n-1)
是个好主意。非常感谢。