【笔记】实现库函数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和指针》一书