平方根倒数快速算法

主要算法的思路可以参考维基百科的相关说明,这里主要阐述一个该算法的思想。为了能够快速地求解平方根倒数,算法首先将一个32的浮点数float number转化为一个32为的整形数long int,接着对该整形数进行一次右移操作,也就意味着取该整数的一半,之后用一个神奇的数做个减法,即可得到该数平方根倒数的估计值。这也是该算法的精华所在。当得到了一个估计值之后,既可以使用牛顿迭代法来逼近其真实值。通常迭代一次,误差就已经很小了,迭代两次就已经相当精确了。具体的牛顿迭代将在下节中进行介绍。

牛顿迭代法

牛顿迭代的思路其实可以用泰勒级数来描述。高等数学中告诉我们一个正常的函数(不存在若干奇点的可导函数)均可以在某一点展开成泰勒级数的形式。如果需要知道函数中的某一点的值 f(x1),则通过函数中的另外的任何一点f(x0)就可以推导出。但是如果两个点x0和x1距离的比较远,则需要知道函数的多阶导数信息才可以计算。但是如果这两个点距离的比较近的话,就可以用低阶导数就可以获得比较精确的值了。比如说求解f(x1),而知道了一个其大致的结果f(x0),就可以使用泰勒级数的一阶展开式 f(x)=f(x0)+f(x0)'(x-x0)+R(n) 并忽略误差,代入x1后得到,f(x1)=f(x0)+f(x0)'(x1-x0),这样,通过x0,f(x0)和f(x0)'我们就可以计算出f(x1)的更准确的估计值。根据上述的思想,再重复迭代几次,就可以计算出更加准确的f(x1)值了。

所以牛顿迭代法的基本特性就是在知道了函数特性的基础上,可以通过某一估计的函数值,获得该函数值的更加精确的值。

posted @ 2015-03-24 08:57  nearmeng  阅读(1687)  评论(0编辑  收藏  举报