求一个数的平方根。
要求:不使用系统函数,求出一个数的平方根(要求误差值在0.0001)。按照如下的算法。
如果一个数为x 假设它的平方根为y, 如果 y*y的结果和x相差大于0.0001,就继续假设下一个值。应该如何猜下一个值呢?
用x除y的商结果z, 再求(y+z)的平均值作为新的平方根的猜测值。
示例如下,假设要求3的平方根,假设为1.5
X | 猜测平方根y | 结果z | 下一个猜测值 |
3 | 1.5 | 3/1.5=2 | (1.5+2)=1.75 |
3 | 1.75 | 3/1.75=1.7143 | ? |
这时1.7143*1.7143=2.9388和3的差距还有
3-2.9388=0.0612所以继续这个猜测过程,直到差距在0.0001这个可接受的范围为止。
这个算法被称为牛顿迭代法。
class MySqrt
{
public const double diff=0.0001;
public static double GetSqrt(double n)
{
double s = n / 2; //假设的平方根初值
while (NotFit(s,n))
{
s = ((n / s) + s) / 2;
}
return s;
}
///
/// 判断是否符合要求的误差范围
///
/// 平方根
/// 目标数
/// 假为合适的值,真为不合适
public static bool NotFit(double num,double n){
double r= num*num;
double d = Math.Abs(n - Math.Abs(r));
if(d>diff){
return true;
}
return false;
}
}