[問題] Do while迴圈

看板C_and_CPP (C/C++)作者 (過路人)時間15年前 (2011/03/23 01:34), 編輯推噓7(7011)
留言18則, 7人參與, 最新討論串1/2 (看更多)
開發平台(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

03/23 01:50, , 1F
你函數的商業邏輯為何? 從變數名稱好難下手...
03/23 01:50, 1F

03/23 01:56, , 2F
第一次的while裡面, ans11 與 ans1 的值各是多少?
03/23 01:56, 2F

03/23 01:58, , 3F
這樣沒頭沒腦的問題,要幫忙也挺有難度的...XD
03/23 01:58, 3F

03/23 02:22, , 4F
在想有可能是型態的關係 http://ppt.cc/4URU
03/23 02:22, 4F

03/23 02:23, , 5F
型態也是有可能的. 所以我直接問他跑出什麼值 XD
03/23 02:23, 5F

03/23 09:14, , 6F
while寫反了
03/23 09:14, 6F

03/23 09:30, , 7F
if改一下,跳太快了,ans1間距寬一點
03/23 09:30, 7F

03/23 09:37, , 8F
while(((ans11-ans1)<0.001)|((ans1-ans11)<0.001))
03/23 09:37, 8F

03/23 09:37, , 9F
這個應該是你要的
03/23 09:37, 9F

03/23 13:37, , 10F
http://ppt.cc/ATno 試試..我認為這麼寫較方便修改.
03/23 13:37, 10F

03/23 14:21, , 11F
為什麼不要用fabs(ans11-ans1) < 0.001 呢?
03/23 14:21, 11F

03/23 14:23, , 12F
回樓上,的確用fabs 較佳.該篇的確該修正此謬誤.謝謝.
03/23 14:23, 12F

03/23 14:27, , 13F
誰大誰小不是固定的嗎? 為啥要再取絕對值勒? 0.0
03/23 14:27, 13F

03/23 14:30, , 14F
敝人之意與 FOXSMALL 同,誰大誰小並非固定.所以要取絕
03/23 14:30, 14F

03/23 14:30, , 15F
對值.可測試該程式,把絕對值拿掉便發現會有謬誤.
03/23 14:30, 15F

03/23 15:46, , 16F
不好意思~~獻醜了~~忘了有這個function
03/23 15:46, 16F

03/23 15:47, , 17F
回L大~~我是猜想~~有可能會是ans有可能會是負的
03/23 15:47, 17F

03/23 16:47, , 18F
@_@
03/23 16:47, 18F
文章代碼(AID): #1DYDsE3B (C_and_CPP)
討論串 (同標題文章)
以下文章回應了本文
完整討論串 (本文為第 1 之 2 篇):
7
18
文章代碼(AID): #1DYDsE3B (C_and_CPP)