You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python用海伦法求平方根的for/while循环输出错误排查

海伦法估算平方根输出异常排查与解决方案

排查思路

  • 核对海伦法迭代逻辑是否正确:海伦法求数n的平方根的核心公式为next_guess = (current_guess + n / current_guess) / 2,你当前输出迭代1估计值为1.0,说明你误将迭代前的初始猜测值当成了第一次迭代的输出结果,迭代计数整体提前了一个步长。
  • 检查相对变化计算逻辑:相对变化的标准公式为|当前估计值 - 上一次估计值| / |上一次估计值|,你输出的迭代2相对变化为2.0,刚好符合|3.0 - 1.0| / |1.0|的计算结果,说明你把初始值当成了迭代1的估计值,第一次迭代计算得到的3.0被误算成了迭代2的结果。
  • 检查结果存储的时机:你当前的代码逻辑大概率是先把初始值append到结果列表,再执行迭代计算,导致首次append的内容是迭代前的初始值,和后续迭代完成后再append的逻辑不一致,刚好对应老师提示的问题点。

错误逻辑复现

你现有代码的逻辑应该和下方示例一致:

n = 5 # 以你作业中需要计算的被开方数为准
guess = 1.0 # 初始猜测值
results = []
iter_count = 0
# 错误逻辑:先存值再计算
while iter_count < 5:
    iter_count += 1
    # 先把当前guess存入结果,第一次存的就是初始值1.0,对应你输出的迭代1结果
    results.append( (iter_count, guess) )
    next_guess = (guess + n / guess) / 2
    rel_change = abs(next_guess - guess)/abs(guess)
    guess = next_guess

修复方案

调整计算和存储的顺序,迭代计算完成后再存储当前迭代的结果,示例如下:

n = 5 # 替换为实际需要计算的被开方数
guess = 5.0 # 按作业要求设置初始猜测值,对应示例中迭代1得到3.0的初始值
results = []
max_iter = 10
tolerance = 1e-15
iter_count = 0
while iter_count < max_iter:
    iter_count += 1
    # 先执行迭代计算
    next_guess = (guess + n / guess) / 2
    rel_change = abs(next_guess - guess) / abs(guess)
    # 计算完成后再存储当前迭代的结果
    results.append( (iter_count, next_guess, rel_change) )
    guess = next_guess
    if rel_change < tolerance:
        break
# 输出验证
for iter_num, est, rel in results:
    print(f"迭代{iter_num}:估计值{est:.14f},相对变化{rel:.16f}")

以上代码首次迭代输出的估计值为3.0、相对变化为0.4,和作业示例完全匹配。如果需要用for循环实现,只需要把while的终止条件替换为固定迭代次数即可,核心存储逻辑不变。

额外检查点

  • 确认初始猜测值的设置和作业要求一致,多数作业会指定海伦法的初始猜测值为被开方数本身,不要自行修改。
  • 相对变化的分母必须是上一次迭代的估计值,不要替换为当前迭代的估计值,否则会出现相对变化计算错误。

内容的提问来源于stack exchange,提问作者ashnotallyson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 04:06:02