其他
经典面试题:如何快速求解根号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·················往期推荐:盘点 7 个神级笔记开源应用!100 行代码透彻解析 RPC 原理大跌眼镜!众多明星、大V翻车了!
浙大小姐姐,真有你的!开箱即用,5 个功能强悍的 JSON 神器!另外欢迎大家围观我的朋友圈,搞搞技术,吹吹牛逼。另外朋友圈会发一些外包单,方便自己没时间的时候,小伙伴可以一起利用技术接一些副业项目赚钱