break终止牛顿法求平方根循环致结果异常,求正确终止方式
牛顿法求平方根:循环终止问题解析
问题根源:break的误用
你添加break后只输出3.25,根本原因是break直接终止了循环,程序只完成了一次迭代(把初始guess 4.5更新为3.25)就停止了,完全没继续迭代到收敛值3。break并没有改变guess的值,只是提前打断了迭代流程。
另外你的原代码while条件存在逻辑错误:guess != (abs(guess * guess - x <= 10 ** -12))里,abs(...) <= ...返回的是布尔值(True/False),Python会自动把True转成1、False转成0,拿浮点数guess和整数1/0比较完全不符合逻辑,只是碰巧在迭代到3时,程序误打误撞停止了。
正确的循环终止方式
方式1:用精度条件控制循环(推荐)
直接把“精度未达标”作为while循环的条件,让循环自动终止:
x = int(input("Enter x: ")) guess = x / 2 # 当猜测值的平方与x的差大于精度要求时,继续迭代 while abs(guess ** 2 - x) > 10 ** -12: guess = (guess + x / guess) / 2 print(guess) print("最终平方根:", guess)
方式2:循环内判断后break
如果一定要用break,必须先检查精度是否达标,达标再跳出循环,而不是每次迭代都强制break:
x = int(input("Enter x: ")) guess = x / 2 while True: # 开启无限循环 guess = (guess + x / guess) / 2 print(guess) # 精度达标时终止循环 if abs(guess ** 2 - x) <= 10 ** -12: break print("最终平方根:", guess)
内容的提问来源于stack exchange,提问作者Sameen
相关产品推荐
相关产品推荐

