全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:814
推到 Plurk!
推到 Facebook!

跑迴圈時很詭異的問題

答題得分者是:tech_state
khaupe
一般會員


發表:28
回覆:25
積分:15
註冊:2003-06-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-08-30 06:05:44 IP:61.231.xxx.xxx 未訂閱
我有一個迴圈長這樣: for(float m = 0.1 ; m <= nQW ; m= m 0.1){ 一些數學算式 } nQW則是之前從StringGrid中取出來的一個float數字 現在問題來了: 我將m設入debug的監看視窗中發現一件怪事 跑前七圈時都沒事,m從0.1增加到0.7 但在跑第八圈時m居然變成0.8000001 ! 這使得我的曲線圖完全走樣了! 請問這是什麼原因呢? 我該如何解決呢?
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-08-30 11:25:05 IP:210.3.xxx.xxx 未訂閱
round off error.... this will always happen in using floating point. I think you would better use some kind of integer and do the conversion when necessary in order to minimize the error.
khaupe
一般會員


發表:28
回覆:25
積分:15
註冊:2003-06-30

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-08-30 14:34:30 IP:61.231.xxx.xxx 未訂閱
引言: round off error.... this will always happen in using floating point. I think you would better use some kind of integer and do the conversion when necessary in order to minimize the error.
也就是說這是無法避免的嗎? 其實昨天問完這問題後我就在for(){}裡加了一行m=int(m*10)/10.0 但總覺得這好像治標不治本 現在看來這好像是BCB本身的問題?
tech_state
版主


發表:44
回覆:638
積分:641
註冊:2003-02-10

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-08-30 16:47:05 IP:203.204.xxx.xxx 未訂閱
khaupe, 您好 試試將float改為double看看。    在許多論壇(包含KTop)都有人談論到在C語言裡使用float似乎都會有您的情形發生, 而改為double就沒有問題了。    以上方法提供您試試看。    ================================= 涵養怒中氣。謹防順口言。留心忙裡錯。珍惜有時錢。 是非終日有,不聽自然無 天下本無事,庸人自擾之
khaupe
一般會員


發表:28
回覆:25
積分:15
註冊:2003-06-30

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-08-30 18:07:44 IP:140.115.xxx.xxx 未訂閱
我現在的做法是僅量用int(也比較不耗資源,畢竟計算量滿大的) 感謝william與tech_state兩位前輩指教    我實在不知該給哪位積分 所以就給目前積分較少的tech_state兄 希望william別介意
系統時間:2024-05-14 4:43:36
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!