判断和计算一起进行。
手动二分法。
首先函数f(x)=sqrt(x)是一个在[0,+∞)上单调递增的函数。
那么我们可以这样做。
首先令左界l=0,右界r=x,然后检测mid=(l+r)/2(取下整)是否等于x,如果等于,mid即解,
否则看mid*mid是否大于x,如果大于x,则令r=mid,否则令l=mid,重复多次则可以缩小解的范围。
比如对于数字1296,其平方根为36。
l=0,r=1296, mid=(0+1296)/2=648, mid*mid>1296则令r=mid=648
l=0,r=648, mid=(0+648)/2=324, 324*324>1296 r=mid=324
l=0,r=324, mid=(0+324)/2=162, r=mid=162
l=0,r=162, mid=81 r=mid=81
l=0,r=81 mid=(0+81)/2=40.5,取下整mid=40, 40*40=1600>1296则r=mid=40
l=0,r=40 mid=(0+40)/2=20, 20*20=400<1296 这时令l=20
l=20, r=40 mid=(20+40)/2=30 30*30=900<1296 这时令l=30
l=30, r=40 mid=(30+40)/2=35 35*35=1225<1296 这时令l=35
l=35, r=40 mid=(35+40)/2=37.5 取mid=37, 37*37>1296 r=mid=37
l=35,r=37 mid=(35+37)/2=36 36*36=1296,得解。
当然,你可以人工缩小一些计算量。
这种方法是利用了算术平方根的单调性作的运算,不管1296这样的小数字,就算是10的17次方这种大数字也只需要作最多60次迭代计算就可以得出答案。更进一步,如果你有能耐做10000次左右的计算,那么你可以计算所有小于10的3010次方的数字的平方根。
计算器和计算机也是用这种方法作开根运算的。数学书上的华罗庚轶事中也提到华罗庚用单调性估计某个数字的立方根的故事。