Java手写牛顿法平方根计算器计算结果精度偏差问题求解
问题根因
你的计算结果精度异常是Java整数除法规则导致的:当两个int类型的数值做除法运算时,会直接截断小数部分返回整数结果,不会自动保留浮点精度。
你给出的示例代码中,121 / 10两个操作数都是int,运算结果直接被截断为12,后续计算就变成了0.5 * (12 +10) = 11.0,和预期结果不符。
修复方案
做除法运算前,先把其中一个整数操作数转换为double类型,触发浮点运算规则,即可保留小数部分。修复后的参考代码如下:
// 读取输入 int n = Integer.parseInt(TextFieldOne.getText()); // 待求平方根的正数N int initGuess = Integer.parseInt(TextFieldTwo.getText()); // 初始猜测值A // 转换为double后再参与运算,避免整数截断 double nDouble = n; double guess = initGuess; // 单次牛顿迭代计算 double newGuess = 0.5 * (nDouble / guess + guess);
代入你的示例参数121和10计算,得到的结果就是预期的11.05。
补充优化建议
牛顿法求平方根需要多次迭代才能达到更高精度,你可以增加循环逻辑,直到两次迭代的结果差值小于你需要的精度阈值(比如1e-6)再停止,不需要调用任何内置工具类就能实现高精度计算。
内容的提问来源于stack exchange,提问作者user16775832
相关产品推荐
相关产品推荐

