练习:循环与函数

为了练习函数和循环,我们来实现一个平方根函数:给定一个数 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 的调整量。 这种通用方法称为 牛顿法。 它适用于许多函数,但对平方根尤其有效。)

< 8/14 >