嵌套函数实现牛顿法求平方根仅输出整数结果的问题排查求助
解决牛顿法求平方根仅输出整数的问题
嘿,我看到你的问题啦!你的牛顿法求平方根程序只输出整数结果,问题其实出在**整数除法运算符//**上,咱们来一步步解决它~
问题根源
在你的ImprovingGuess嵌套函数里,你使用了Python的整数除法运算符//:
temp=number//newguess newguess=(temp+newguess)//2.0
哪怕操作数是浮点数,//也会返回向下取整的结果,这就导致每次迭代都把计算结果强行压缩成整数方向的数值,最终只能得到整数结果,完全丢失了小数部分的精度。
修复方案
只需要把所有的//替换成普通的浮点数除法运算符/,这样就能保留计算过程中的小数精度,让牛顿法正确迭代出精确的平方根。
另外补充一个小优化:原代码里的if n == (number**.5)容易因为浮点数精度问题判断失误,改成用绝对值差小于一个极小值(比如1e-6)来判断猜测是否足够准确,会更可靠。
修改后的完整代码如下:
def mySqrt2(): number=float(input('enter a number that you want to find its root:')) n=float(input('enter your Guess:')) def mySqrt1(number,n): def checkIfGood(): def ImprovingGuess(): newguess=n i=0 while i!=100: temp=number/newguess # 替换//为/ newguess=(temp+newguess)/2.0 # 替换//为/ i+=1 return newguess if abs(n - (number**.5)) < 1e-6: # 优化浮点数相等判断逻辑 return 'your guess is good!' else: return ImprovingGuess() return checkIfGood() return mySqrt1(number,n) print('The result is :',mySqrt2())
测试验证
当你输入数字2、猜测值1时,修改后的程序会输出近似1.41421356237的正确结果,完全符合牛顿法的计算预期。
内容的提问来源于stack exchange,提问作者Michael ilkanayev
相关产品推荐
相关产品推荐

