面試題:如何求根號2

2021-02-24 程序猿DD

來源:算法面試題

問題

小E最近找實習的時候,被面試官問了這樣一道題:如何求根號2的值?

小E沒能答上來,回來後向老師請教。

思路

點評:以上介紹了二分法和牛頓迭代法來求解根號2,另外我們還可以通過泰勒公式法來求解。很多朋友可能會問,我們經常調用的Math庫中sqrt(x)函數的實現用的是哪種方法呢?為了效率,sqrt(x)函數在底層是用C語言來實現的,實現過程非常巧妙,效率極高,用到了牛頓迭代法的思想,但又不完全是牛頓迭代法,我會將sqrt(x)庫函數的代碼放於文後,有興趣可以研究。

代碼實現

牛頓迭代法(JavaScript)

//求n的算術平方根,參數n不能為負數
function sqrt(n) {
    //當n>=1時,從n開始迭代;
    //當n<1時,從1開始迭代
    let res = n >= 1 ? n : 1;
    while(res * res - n > 1e-8)
        res = 0.5 * (res + n / res);
    return res;
}

附:

C語言實現的庫函數(源碼)

//源碼中求的是根號x的倒數,參數x必須大於0
float invSqrt(float x){
    float xhalf = 0.5f*x;
    int i = *(int*)&x;
    //下面這句是核心,有興趣可閱讀相關論文
    i = 0x5f375a86 - (i>>1); 

    x = *(float*)&i;
    //下面使用了三次牛頓迭代 
    x = x*(1.5f-xhalf*x*x); 
    x = x*(1.5f-xhalf*x*x); 
    x = x*(1.5f-xhalf*x*x);
    //註:此函數返回的是根號x的倒數
    return x;
}

複製代碼請前往https://blog.csdn.net/Great_Eagle/article/details/84780271

·END·

 近期熱文:

關注我

點擊「閱讀原文」,看本號其他精彩內容

相關焦點

  • 如何求根號2(愛奇藝面試題)
    問題小E最近找實習的時候,被面試官問了這樣一道題:如何求根號2的值
  • 漫畫:如何求根號2(愛奇藝面試題)
    備註:加群,加入程式設計師技術群機器人自動邀請的來源於公眾號算法面試題投稿發布問題小E最近找實習的時候,被面試官問了這樣一道題:如何求根號2的值?點評:以上介紹了二分法和牛頓迭代法來求解根號2,另外我們還可以通過泰勒公式法來求解。很多朋友可能會問,我們經常調用的Math庫中sqrt(x)函數的實現用的是哪種方法呢?
  • 愛奇藝面試題解析:如何求根號2
    (給算法愛好者加星標,修煉編程內功)作者:Great Eagle(本文來自作者的投稿)問題小E最近找實習的時候,被面試官問了這樣一道題:
  • 【offerMe--刷題必備】java如何實現開根號的運算
    今天我們來看一下這道題,java如何實現開根號的運算。
  • 應屆研究生分享:兩道帶坑又簡單的面試題!
    到今天為止有幸拿到五個面試, 其中有兩個On-Site.我自己還是個時常會緊張的人, 所以在面試前會試圖翻看過往學習的所有技術性內容. 當然啦, 常常都是徒勞, 因為我也摸不清楚面試官到底會問什麼. 我想了想, 為了記錄下我的面試歷程, 也是希望能幫助到大家, 我還是把每次被問到的技術問題都寫出來吧. 希望真的能幫到大家, 也希望諸位不要跟我一樣緊張.
  • CAD中如何繪製長度為根號2、根號3的直線?
    對於根號2、根號3、根號5這種比較簡單的數字,我們可以利用勾股定理來解決,比如說根號2,我們可以繪製兩條長度為1相互垂直的線,斜邊連接起來就是根號2長,如下圖所示。 根號5畫法類似,只是將一條直角邊長度改為2就可以了。根號3麻煩一點,需要斜邊長2,一條直角邊是1,另一條直角邊長度就是根號3了,畫法也比較複雜,需要畫一個半徑為2的圓,如下圖所示。
  • 漫畫:美團面試題(TOPK:求第K個最大的元素)
    第215題:在未排序的數組中找到第 k 個最大的元素。請注意,你需要找的是數組排序後的第 k 個最大的元素,而不是第 k 個不同的元素。示例 1:輸入: [3,2,1,5,6,4] 和 k = 2輸出: 5示例 2:輸入: [3,2,3,1,2,4,5,5,6] 和 k = 4輸出: 4堆在算法題目中的應用主要包括以下幾點:
  • CAD中如何繪製長度是帶根號的直線?
    像我們面對根號2、根號3、根號5這些比較簡單的數字,我們完全可以利用勾股定理來解決的,比如說根號2 ,我們可以繪製出兩條垂直的長度為1的直線,斜邊連結起來的線就是根號2的長度。參考下圖。    根號5的畫法類似,只是將一條支教邊長改成2就可以了,根號3比較麻煩一些,我們需要斜邊長度為2,一邊的直角邊是1,另一條的直角邊長度就是根號3了,畫法相對也會複雜些,我們要畫出一個半徑為2的圓形,參考下圖。
  • 頭條一個面試題:後端是如何獲取到客戶端的IP位址的
    蘇格蘭高地上的歐亞紅松鼠,蘇格蘭(© Scotland: The Big Picture/Minden Pictures)本文收錄於 GitHub
  • 【面試題】Java必考面試題全集(30)
    Java基礎面試題(30)public
  • Facebook 面試題全解析
    在這篇文章中,我來介紹一下你在面試Facebook的前端工程師職位時可能會遇到的面試題。本題中,「展平」的數組指的是所有元素均為基本類型的數組。示例輸入:[1, [2, [3], 4], [5]]輸出:[1, 2, 3, 4, 5]
  • 尚矽谷Java視頻教程_Java面試題第一季
    網際網路寒冬來臨,打鐵還需自身硬,嘟嘟這裡分享一套最新Java面試題視頻,祝你更上一層樓。
  • 【每日一題】(41題)JS代碼到底是如何被壓縮的?
    •第 16 題:【每日一題】面試官問:JS中如何全面進行客戶端檢測?•第 15 題:【每日一題】面試官問:JS類型判斷有哪幾種方法?•第 14 題:【每日一題】面試官問:談談你對JS對象的創建和引申•第 13 題[每日一題]面試官問:['1', '2', '3'].map(parseInt)輸出,原因,以及延伸?
  • 面試題:JS 獲取某月的天數
    回復交流,加入前端編程面試算法每日一題群面試官也在看的前端面試資料獲取某個月的天數
  • Linux運維工程師面試題之一
    前段時間,我在準備面試的時搜到的一套Linux運維工程師面試題,感覺比較全面,也一直看到小夥伴在群裡討論Linux方面的面試題,特此整理一篇文章,希望可以幫助到更多的小夥伴在面試過程中更加順利,早日找到自己滿意的工作。
  • 【007期】JavaSE面試題(七):異常
    大家好,我是Java面試題庫
  • Java 最常見的 200+ 面試題全解析
    第二:這只是經驗的高度提煉,讓那些原本就掌握了技術卻不知道怎麼表達的人,學會如何在面試中展示自己。第三:如果只是死記硬背這些面試題,只要面試官再深入問糾一下,也可對這個人有一個準確的認識,之前說的「幫人作弊」的事就不存在了。
  • 一個iOS程式設計師的面試經驗
    求數組中和為某個值的所有子數組,比如數組是 [5,5,10,2,3] 一共有四個子數組的和是 15,比如 [5,10] , [5,10] , [10,2,3] , [5,5,2,3] 。這個就是簡單的遞歸了,分兩種情況,當前位置的數字在子數組中,以及不在子數組中。
  • 2017大數據面試題及答案
    2017年有不少大數據學員學成準備參加工作,在參加工作前最重要的一輪就是大數據的面試,小編收集了一些2017大數據面試題及答案
  • 證券從業機考操作指南:計算器怎麼開方開根號?
    考生可以通過機考系統中的計算題進行運算,或者通過發放的草稿紙進行運算,記得帶一支筆!計算器各項數據怎麼調用出來?有的考生不經常使用電腦自帶的計算器,對於功能不太了解。所以計算題分為標準型和科學型兩種,點擊查看菜單可以自由切換。