一、实现sqrt函数
一个采用牛顿迭代法的函数
double sqrt(double number)
{
if(number<=0)return 0;
//设置初始值i,i值越接近sqrt(number),所需循环次数越少
double i = 1; //一个快速
原理见:
泰勒级数展开法:f(x)=sqrt(x)在x=1处展开,得:
f(x) = 1+(1/2)×(x-1)+(0.5)×(-0.5)/2!×(x-1)2+(0.5)×(-0.5)×(-1.5)/3!×(x-1)3……
非常不建议使用级数展开,因为当数字比较大时收敛实在慢。
二、实现pow函数
double pow (double base , usigned int exponent)
{
if (exponent == 0) {
return 1;
} else if (exponent == 1) {
return base;
}
double result = pow (base, exponent >> 1);
result *= result;
if (exponent & 0x1 == 1) {
result *= base;
}
return result;
}