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

浮點運算判斷問題

答題得分者是:ikk
kenneth_c
一般會員


發表:5
回覆:8
積分:2
註冊:2007-08-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-08-22 23:50:39 IP:119.15.xxx.xxx 訂閱

[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」就是正確的等於??,煩請知道的前輩告知一下, 謝謝
編輯記錄
kenneth_c 重新編輯於 2008-08-22 23:58:04, 註解 無‧
kenneth_c 重新編輯於 2008-08-22 23:59:27, 註解 無‧
kenneth_c 重新編輯於 2008-08-23 00:01:30, 註解 無‧
hipig
高階會員


發表:31
回覆:75
積分:111
註冊:2007-01-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-08-23 01:30:40 IP:220.133.xxx.xxx 未訂閱
浮點數是不能作精確比較 只能判斷是否在範圍內

[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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-08-23 09:30:46 IP:125.230.xxx.xxx 訂閱

===================引 用 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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-08-25 08:49:46 IP:163.28.xxx.xxx 訂閱
應該是說電腦運算浮點數時的隱藏缺陷吧....
浮點數比對時, 可以轉換成字串來比對..

[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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-09-09 13:44:17 IP:125.230.xxx.xxx 訂閱
看來這問題就只能以此結案了,謝謝各位回覆的前輩們!!!
系統時間:2024-05-03 13:50:28
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!