-
问题描述
求出任一个非负实数的平方根 -
思路分析
平方根是一个数学概念,要找到计算平方根的过程性描述(算 法),也需要通过数学领域的
知识。基本算术课程中介绍过如何求任一正实数的平方 根,但在那个方法里需要做试除,不
太适合机械进行(可以实现,但比较麻烦)。而求平方根 的另一种算法称为牛顿迭代法,描
述如下:
0.对给定正实数x和允许误差e,令变量y取任意正实数值,如令y=x
1.如果y x y与x足够接近,即|_y x y—x|<e,计算结束并把作为结果;
2.取z=(y+x/y)/2;
3.将z作为y的新值,回到步骤1。
- 具体实现
函数
def sqrt(x):
y = 1.0
while abs(y*y - x) > 1e-6:
y = (y + x/y)/2
return y
其中变量y的初值为1.0,允许误差为10的-6次方
- 测试
def sqrt(x):
y = 1.0
while abs(y*y - x) > 1e-6:
y = (y + x/y)/2
return y
print(sqrt(2))
- 小结
- 从这个简单实例可以看到从问题的描述出发最终得到一个可用程序的工作过程。
- 在上述例子中,最不清晰的一步就是从平方根的定义到求平方根 的算法。
- 算法设计是一种创造性工作,依赖于对问题的认识和相关领域的知识,没有放之四海 而皆准的路径可循。
笔记------裘宗燕著《数据结构与算法》