您的位置:首页 > 职场人生

实现sqrt函数功能,之前也是常见的面试题,本文两种解法,二分法,牛顿迭代法

2017-09-21 12:46 323 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: