我只是在高中的初级Java课程,所以我只是在学习Java.这是我的计划
public static void CubeRoot(double number, double guess)
{
double r = number;
double a = guess;
double b = 0;
double goal = Math.pow(number,.333333333333);
while (Math.round(b * 10000) / 10000 != Math.round(goal * 10000) / 10000)
{
b = ((1/3)*((r/(a*a))+(2*a)));
b = a;
}
System.out.println(b);
}
Run Code Online (Sandbox Code Playgroud)
我试图使用Newton-Raphson方法得到10.6的立方根的近似值.问题是该程序运行但从未打印出任何东西.
它永远循环,因为您为其分配了一个值b,然后用它覆盖它a.这意味着无论何时循环开始,b都将具有与a初始值相同的值.
从查看Newton-Raphson算法,我认为你真正想要的是
b = ((1.0/3.0)*((r/(a*a))+(2*a)));
a = b;
Run Code Online (Sandbox Code Playgroud)
这将设置为a等于b您刚刚计算的新值,以便可以在下一次迭代中使用.你也应该用1.0/3.0而不是1/3.整数除法截断结果,所以1/3等于0,而不是0.33你想要的.