【笔记】实现库函数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和指针》一书
浙公网安备 33010602011771号