求平方根的神级算法探究(1)
求平方根,目前我所知的有两种算法,一是二分法,一是牛顿迭代法.
我们首先来研究下二分法.
1.我们要求什么?能得到什么?
我们要求某个未知数x的开平方,可知x(x>0),且x的平方根X0一定处于[0,x]之间.
2.通过计算中间值进行根的值的收敛
首先,计算[0,x]之间的中间值,即x/2,之后将x/2进行平方,再将平方后的数(假设为y)与你要求的x进行比较,如果y>x,那么可以确定x的开根号一定在范围[0,x/2]中,反之,则在范围[x/2 ,x]中,之后重复进行以上步骤即可.
举个栗子,
我要求9的开根号是多少.
首先,确定9开根号的范围-----[0,9],
接下来算中间值------4.5,
4.54.5=20.25
而20.25大于我们要开平方的值9,
可得9开根号的范围-----[0,4.5],
接下来算中间值------2.25,
2.252.25=5.0625,
而5.0625小于我们要开平方的值9,
可得9开根号的范围-----[2.25,4.5],
接下来算中间值------3.375,
3.3753.375=11.390625,
而11.390625大于我们要开平方的值9,
可得9开根号的范围-----[2.25,3.375],
接下来算中间值------2.8125,
…
我们可以看到,不断循环以上步骤,可以发现算出来的中间值是越来越接近9的开平方3的.
如果用代码表示的话,如下
function two(low,up){
const x=up;
const mid=low+(up-low)/2;
//条件为判断获取的到的值的精度是否有两位
while(midmid-x>0.001)
{
mid=low+(up-low)/2;
if(midmid>x){
up=mid
}
else if(midmid<x)
{
low=mid
}
}
}