Re: [問題] 不用Math函式有辦法開根號嗎?

看板java作者 (swind)時間15年前 (2009/11/06 22:59), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串4/10 (看更多)
我不知道原PO的數學老師有教過哪些 不過電腦老師沒教Math(),數學老師沒有教過逼近法 那真的就只能建議求Google大神瞭解一下數學原理了 不過就先不嘴砲,其實這個很好玩 我覺得用程式實現數學的一些公式與方法是非常有趣的事情 除了前面的十分逼近法之外(應該沒有記錯吧 Orz) 這邊來使用牛頓逼近法 首先 因為我們想計算根號n的近似值,所以可以考慮f(x) = x^2 - x = 0 一開始的起頭數為a, 這個數可以亂取只要在這個方程式中在根號x右側即可, 因為我先不想處理小於1的情況,所以直接取x為起頭 然後從(x,f(x))作一切線,切線跟x軸的交點b就是下一個近似值 簡化處理之後就是b = (a^2+x)/2a 然後重複上面的步驟 所以就是 c = (b^2+x)/2b 依此類推,公式找完之後就可以來實做程式了 public static void sqrt(double x) { double ans = x; //當我逼近值誤差小於多少以下時候我才停止 //好吧其實我根本忘記double的精準度是多少了,所以隨便設個數 XD //1e-10好像是1^-10的表示法 ? while(ans*ans-x>1e-10) ans=(ans*ans+x)/(2*ans); return ans; } 然後ans回傳後就是答案可以收工了 牛頓逼近法的速度非常快,弄個100000000的數字 也可以在約19次之後誤差逼近到1^-10 雖然不太健康就是,想改進的話可以想一下怎樣取第一數方便 然後這個判斷式也沒有辦法處理小於1的情況 更不用說負數會無限迴圈的問題 XD 希望原PO也可以享受寫程式的樂趣,動手試試看如何改進 以前學到找質數方法時 還會跟同學PK看誰找n以內的所以質數比較快 ------- 我不會承認我是因為不能在魔獸版發文 只好來這裡回答問題 ...... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.124.181.98 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.124.181.98

11/07 12:35, , 1F
推 牛頓法
11/07 12:35, 1F
文章代碼(AID): #1Az3dHqO (java)
討論串 (同標題文章)
文章代碼(AID): #1Az3dHqO (java)