AI工具人
提示词工程师

大厂面试题:求根号2简单?高级算法你肯定不会

前两天逛github看到一道很简单的面试题——如何不用库函数快速求出$\sqrt2$的值,精确到小数点后10位! 第一反应这不很简单嘛,大学数据结构课讲二分查找的时候老师还用这个做过示例。但转念一想,能作为大厂的面试题,背后绝对没有那么简单,于是我google了下,结果找到了更巧妙的数学方法,甚至发现了一件奇闻趣事…… 一道简简单单的面试题,不仅能考察到候选人的编程能力,还能间接考察到候选人的数学素养,难怪很多大厂都会问这个。。。
在这里插入图片描述
回到正题,求$\sqrt2$究竟有多少种解法,我们由简入难一步步来看下我们是如何让计算机更快计算sqrt的。

二分查找

首先是稍微具备点编程和数据结构基础的人都能想到的二分查找,这里我不再具体讲解思路,但还是要编码测试下,主要是测试需要迭代多少次才能到达小数点后10位的精度。

public class BSearch {
    static double sqrt2 = 1.4142135624;
    static double delta = 0.0000000001;
    public static void main(String[] args) {
        double l = 1.0;
        double r = 2.0;
        int cnt = 0;
        while (l < r) {
            double mid = (l + r) / 2;
            if (Math.abs(l - sqrt2) < delta) {
                break;
            }
            if (mid * mid > 2.0) {
                r = mid;
            } else {
                l = mid;
            }
            cnt++;
        }
        System.out.println("经过" + cnt + "次迭代后得" + l);
    }
}
经过34次迭代后得1.4142135623260401

记住这个迭代次数34。

赞(7) 打赏
未经允许不得转载:XINDOO » 大厂面试题:求根号2简单?高级算法你肯定不会
描述文字

评论 抢沙发

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫