其他
经典面试题:如何快速求解根号2?
The following article is from 小K算法 Author 小K算法
01故事起源
02分析
03二分
如果n小于1,则要在区间[0,1]之间进行查找。
return abs(a - b) <= 1e-7;
}
double search(double n) {
double left = 0, right = n;
double mid = (left + right) / 2;
while (!is_equal(mid * mid, n)) {
if (mid * mid > n) {
right = mid;
} else {
left = mid;
}
mid = (left + right) / 2;
}
return mid;
}
04牛顿迭代法
此时我们发现x1相对于x0,在向左移动。
05求解根号
// 判断相等,浮点数要考虑精度的问题
bool is_equal(double a, double b) {
return abs(a - b) <= 1e-7;
}
// 函数f(x)
double f(double x, double n) {
return x * x - n;
}
// 导数f'(x)
double fd(double x) {
return 2 * x;
}
double solve(double n) {
double x0 = 0, x1 = n;
while (!is_equal(x1, x0)) {
x0 = x1;
x1 = x0 - f(x0, n) / fd(x0);
}
return x1;
}
06总结
<END>
程序员专属T恤
推荐阅读: