牛顿法算平方根的理解

余生长醉 提交于 2019-12-23 21:50:53

原题目:x 的平方根
查看题解,使用到了牛顿法。在这里插入图片描述
公式:

作者已经讲得很清楚了,只是看这里的公式中的xxx0x_0的时候卡了一下,后来理解了,其实x0x_0就是进行尝试的起始点,然后进行图中的迭代公示后得到的x0x_0(其实就是所求的xx)是下一次的起始点,在图中就是那条斜线与xx轴的焦点的位置。那么,如果一个值的平方考虑到可能会溢出的话,如何避免计算平方值呢?代码中写的很清楚的了,因为牛顿法考的是一次次的迭代靠近真实值,那么这样的每次迭代的进步空间聚会越来越小。最后只要要求两次的差值小于某个固定的很小的数就可以了。
在这里插入代码片

class Solution:

    def mySqrt(self, x):
        if x < 0:
            raise Exception('不能输入负数')
        if x == 0:
            return 0
        # 起始的时候在 1 ,这可以比较随意设置
        cur = 1
        while True:
            pre = cur
            cur = (cur + x / cur) / 2
            if abs(cur - pre) < 1e-6:
                return int(cur)
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!