1、二分法解法,迭代次数太多了,跑半天就没有放结果出来了。
#include <stdio.h>
#include <math.h>
float eps = 1e-6;
int sqrt(float n) {
float mid, up, low, last;
low = 0;
up = up < 1 ? 1 : n;
mid = (low + up)/2;
do {
if (mid * mid > n) {
up = mid;
} else {
low = mid;
}
} while(fabsf(mid - last) > eps);
return mid;
}
int main() {
printf("%f", sqrt(3.0));
return 0;
}
2、牛顿迭代法,就是去逼近,数学知识自己去看。
#include <stdio.h>
#include <math.h>
float eps = 1e-6;
float sqrtByNewton(float x)
{
float val=x;//初始值
float last;
do
{
last = val;
val =(val + x/val) / 2;
}while(fabsf(val-last) > eps);
return val;
}
int main() {
printf("%f", sqrtByNewton(3.0));
return 0;
}