【笔记】实现库函数sqrt的功能(C代码)

实现库函数sqrt的功能(C代码)

正数 n 的平方根可以通过计算一系列近似值来获得,每个近似值够比前一个更加接近准确值。第一个近似值是 1 ,接下来的近似值则通过下面的公式来获得。

       每进行一次计算得到的结果都是 n 的平方根的一个近似值,原则上,这种计算可以永远进行下去,它会不断产生更加精确的结果。但在实际中,由于浮点变量的精度限制,程序无法一直计算下去。当计算得到某个近似值与前一个近似值相等的时候,就可以停止计算。得到的这个值也就是 n 的平方根。

#include <stdio.h>
#include <stdlib.h>
 
double Sqrt( double dNum );
 
int main(void)
{
    double  number;
    printf( "Please enter a number: " );
    scanf( "%lf" , &number );
    printf( "Sqrt(%g) = %g\n", number,Sqrt(number));
    return EXIT_SUCCESS;
}
 
double Sqrt( double dNum )
{
    double dVal = -1;
    double dLastVal;
 
    //负数不符合运算规则,返回 -1 
    if ( dNum < 0 )
    {
        return dVal;
    }
    //根据上面的计算公式计算
    dVal = 1.0;
    do
    {
        dLastVal = dVal;
        dVal = ( dLastVal + dNum / dLastVal ) / 2.0;
    } while ( dVal != dLastVal );
 
    return dVal;
}

 

注:问题及解决方案出自《C和指针》一书



posted on 2012-02-27 22:11  克劳德曼  阅读(1000)  评论(0编辑  收藏  举报