不用系统函数sqrt,求输入数据的平方根,误差在0.0001以内。
源自创新工场2014年校园招聘。
简要分析:可以采用二分的思想,首先去给定值的一半,将这个一半平方后与给定值比较,若给定值大,则继续二分上半部分;否则,继续二分下半部分。
另一种方法则巧妙很多,是数值分析里面讲到的“牛顿迭代”!该方法用到的递推式为:Xk+1 = (Xk + N / Xk) / 2 其中N为给定数,X从1.0开始,进行若干次迭代后,可接近N的平方根。
参考代码如下:
double mySqrt(double N)
{
double x = 1.0;
while(fabs(x * x - N) > 0.0001) // math.h
{
x = (x + N / x) / 2;
}
return x;
}