[爆卦]java開根號是什麼?優點缺點精華區懶人包

為什麼這篇java開根號鄉民發文收入到精華區:因為在java開根號這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者swind (swind)看板java標題Re: [問題] 不用Math函式有辦法開根號嗎?時間...



我不知道原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
hwChang:推 牛頓法 11/07 12:35

你可能也想看看

搜尋相關網站