浮点数开方运算,经典面试题
一般用两种方案,二分法,牛顿法
二分法
sqrt(x)
首先,设置上下限[0,max(1,x)],注意,如果x小于1的话上限要设置成1
然后二分取值a,判断a^2和x的大小关系,再继续取一半范围
直到a^2和x的差值小于一个很小的数(或者直到前后两次中值的距离小于很小的数)
牛顿法
牛顿法解的是一个二次函数的解的问题。
比如,求的是sqrt(67),那么牛顿法解的就是y=x^2-67=0的问题
y = x^2-p
过点(x1,y1),y1=(x1)^2-p
切线为y=(2x1)x+(y1-2(x1)^2)
切线与x轴交点为新的迭代点
x2= 0.5*(x1 + p/x1)
还有一些改进,可以参考
https://blog.csdn.net/yutianzuijin/article/details/78839981