练习:循环与函数
为了练习函数和循环,我们来实现一个平方根函数:给定一个数 x,希望找到一个数 z,使 z² 尽可能接近 x。
计算机通常使用循环来计算 x 的平方根。
从某个猜测值 z 开始,我们可以根据 z² 与 x 的接近程度来调整 z,
从而得到一个更好的猜测值:
z -= (z*z - x) / (2*z)
反复进行这种调整,猜测值会越来越准确,
直到得到一个尽可能接近实际平方根的答案。
请在提供的 func Sqrt 中实现这一算法。
无论输入是什么,z 的一个不错的初始猜测值都是 1。
首先,将计算重复 10 次,并在过程中打印每次得到的 z。
看看对于不同的 x 值(1、2、3……),结果与答案有多接近,
以及猜测值改进得有多快。
提示:要声明并初始化一个浮点数值,
可以使用浮点数语法,或者进行类型转换:
z := 1.0
z := float64(1)
接下来,修改循环条件,使它在值不再变化
(或仅发生非常小的变化)时停止。
看看这需要的迭代次数比 10 次更多还是更少。
尝试 z 的其他初始猜测值,例如 x 或 x/2。
你的函数结果与标准库中的 math.Sqrt 有多接近?
(注意: 如果你对算法的细节感兴趣,上面的 z² − x 表示 z² 距离它应达到的值(x)有多远,而除以 2z 中的 2z 是 z² 的导数,
用于根据 z² 变化的快慢来缩放对 z 的调整量。
这种通用方法称为 牛顿法。
它适用于许多函数,但对平方根尤其有效。)