看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) C 問題(Question): 想要用Bisection法求一個函數的解,可是do while迴圈怎麼設他都給我一直跳出... 請問板上的大神們我哪個地方沒有注意到嗎? 程式碼(Code):(請善用置底文網頁, 記得排版) ans11=ans1+1; do { z=(ans1+ans11)/2; y1= (ans1*ans1*ans1*ans1)-(9*ans1*ans1*ans1)-(2*ans1*ans1)+(120*ans1)-(130); y2= (ans11*ans11*ans11*ans11)-(9*ans11*ans11*ans11)-(2*ans11*ans11)+(120*ans11)-(130); y3= (z*z*z*z)-(9*z*z*z)-(2*z*z)+(120*z)-(130); if (y1*y3<0) { ans11=(ans1+z)/2; } else if (y2*y3<0){ ans1=(z+ans11)/2; } }while((ans11-ans1)<0.001); 補充說明(Supplement): 他搞了我兩個多小時我還是找不到BUG .... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.209.149.121
loveme00835:你函數的商業邏輯為何? 從變數名稱好難下手... 03/23 01:50
ericinttu:第一次的while裡面, ans11 與 ans1 的值各是多少? 03/23 01:56
james732:這樣沒頭沒腦的問題,要幫忙也挺有難度的...XD 03/23 01:58
loveme00835:在想有可能是型態的關係 http://ppt.cc/4URU 03/23 02:22
ericinttu:型態也是有可能的. 所以我直接問他跑出什麼值 XD 03/23 02:23
xshaddockx:while寫反了 03/23 09:14
xshaddockx:if改一下,跳太快了,ans1間距寬一點 03/23 09:30
FOXSMALL:while(((ans11-ans1)<0.001)|((ans1-ans11)<0.001)) 03/23 09:37
FOXSMALL:這個應該是你要的 03/23 09:37
tropical72:http://ppt.cc/ATno 試試..我認為這麼寫較方便修改. 03/23 13:37
xatier:為什麼不要用fabs(ans11-ans1) < 0.001 呢? 03/23 14:21
tropical72:回樓上,的確用fabs 較佳.該篇的確該修正此謬誤.謝謝. 03/23 14:23
loveme00835:誰大誰小不是固定的嗎? 為啥要再取絕對值勒? 0.0 03/23 14:27
tropical72:敝人之意與 FOXSMALL 同,誰大誰小並非固定.所以要取絕 03/23 14:30
tropical72:對值.可測試該程式,把絕對值拿掉便發現會有謬誤. 03/23 14:30
FOXSMALL:不好意思~~獻醜了~~忘了有這個function 03/23 15:46
FOXSMALL:回L大~~我是猜想~~有可能會是ans有可能會是負的 03/23 15:47
loveme00835:@_@ 03/23 16:47