浮點運算判斷問題 |
答題得分者是:ikk
|
kenneth_c
一般會員 發表:5 回覆:8 積分:2 註冊:2007-08-03 發送簡訊給我 |
[code cpp] 請在此區域輸入程式碼 //方法1 double f=3,f1=30; if((f/f1)>=0.1) Edit1->Text="等於"; else Edit1->Text="小於" //方法2 double f=3,f1=30,f2; f2=f/f1; if(f2>=0.1) Edit1->Text=”等於"; else Edit1->Text="小於"; [/code] 各位前輩幫忙看一下,為什麼倍精浮點上面「方法1」的寫法會判斷為小於,而「方法2」就是正確的等於??,煩請知道的前輩告知一下, 謝謝 |
hipig
高階會員 發表:31 回覆:75 積分:111 註冊:2007-01-15 發送簡訊給我 |
浮點數是不能作精確比較 只能判斷是否在範圍內
[code cpp] double f = 3, f1 = 30; if(fabs(f / f1) >= 0.1) // 實際上達成條件可能並不是== 而是> Edit1->Text = "等於"; else Edit1->Text = "小於"; [/code] 參閱MSDN說明 http://msdn.microsoft.com/zh-tw/library/c151dt3s.aspx
編輯記錄
hipig 重新編輯於 2008-08-23 01:37:16, 註解 無‧
|
kenneth_c
一般會員 發表:5 回覆:8 積分:2 註冊:2007-08-03 發送簡訊給我 |
===================引 用 hipig 文 章=================== 浮點數是不能作精確比較 只能判斷是否在範圍內 [code cpp] double f = 3, f1 = 30; if(fabs(f / f1) >= 0.1) // 實際上達成條件可能並不是== 而是> Edit1->Text = "等於"; else Edit1->Text = "小於"; [/code] 參閱MSDN說明 http://msdn.microsoft.com/zh-tw/library/c151dt3s.aspx 前輩謝謝您的回覆,上述的問題我知道浮點會有這個問題,關念上是以為如:浮點的0.1 實際不是為0.100000XXX ,都會略大於0.1不是嗎?但以此運算式結果皆是小於,可以麻煩告訴我一下,是不是我關念有錯?? |
ikk
尊榮會員 發表:4 回覆:413 積分:768 註冊:2003-06-30 發送簡訊給我 |
應該是說電腦運算浮點數時的隱藏缺陷吧....
浮點數比對時, 可以轉換成字串來比對.. [code cpp] char CompareValue1[32]; char CompareValue2[32]; double f=3,f1=30; sprintf(CompareValue1,"%f",f/f1); sprintf(CompareValue2,"%f",0.1); //if((f/f1)>=0.100000) if(strcmp(CompareValue1,CompareValue2)>=0) PrintMsg("1.等於"); else PrintMsg("1.小於"); [/code]
------
FPGA驗證, FPGA開發平台, http://smims.com |
kenneth_c
一般會員 發表:5 回覆:8 積分:2 註冊:2007-08-03 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |