Re: [問題] vector遇到小數點的問題!!!?
看板C_and_CPP (C/C++)作者su31o4gj83 (哈哈哈哈哈哈哈哈哈哈哈)時間16年前 (2009/07/21 14:39)推噓2(2推 0噓 6→)留言8則, 2人參與討論串4/4 (看更多)
: 比如你可能會寫 if (aDouble == bDouble) {...}
: 同理,因為 double 是約數,所以明明是相等的情況,用 ==
: 也可能會變成不相等。解決方法嘛,和上面類似,定好小數位 8
: 位後,定義 const double EPSILON = 0.000000001;
: if (aDouble == bDouble) 改為
: if (aDouble < bDouble + EPSILON && aDouble > bDouble -EPSILON)
: 有人寫 if (fabs(aDouble-bDouble) < EPSILON) 意思也是一樣
這邊我有一個疑問
EPSILON要設定多少, 是不是跟所計算的double有關 ?
我自己寫個小測試程式
#include <stdio.h>
#include <math.h>
#define EPSILON 0.001
int main(){
double a = 43000000000000.81;
double b = 7000000000000.51
+ 36000000000000.30;
if( fabs( a - b ) < EPSILON ) printf("equal\n");
else printf("not equal\n");
getchar();
return 0;
}
EPSILON設定為0.001時, 螢幕輸出not equal
EPSILON設定為0.01時, 營幕輸出equal
這個我可以理解, 因為fabs(a - b)後的有效數字為 0.00???? (?為非有效位數)
不過標準函式庫好像沒有什麼提供什麼其他的方法可用來比較浮點數
我試math.h的islessgreater()也沒辦法用在這個例子上
而且islessgreater()也不是個通用的方法 (網路上有人說MSVC上沒有, 但我沒去試)
不然就要include一些非標準函式庫的東西....
### 另一個問題 ###
測試的過程中, 發現(a), (b), (c)的結果不太一樣
但不太懂是哪裡產生差異 ??? @@
(a)
#include <stdio.h>
#include <math.h>
int main(){
double a = 4.381;
double b = 0.751
+ 3.630;
if( a == b ) printf("equal\n"); // 螢幕輸出equal
else printf("not equal\n");
getchar();
return 0;
}
(b)
#include <stdio.h>
#include <math.h>
int main(){
double a = 43.81;
double b = 7.51
+ 36.30;
if( a == b ) printf("equal\n");
else printf("not equal\n"); // 螢幕輸出not equal
getchar();
return 0;
}
(c)
#include <stdio.h>
#include <math.h>
int main(){
double a = 43.081;
double b = 7.051
+ 36.030;
if( a == b ) printf("equal\n"); // 螢幕輸出equal
else printf("not equal\n");
getchar();
return 0;
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.209.20.225
推
07/21 17:06, , 1F
07/21 17:06, 1F
→
07/21 17:06, , 2F
07/21 17:06, 2F
→
07/21 17:07, , 3F
07/21 17:07, 3F
→
07/21 18:03, , 4F
07/21 18:03, 4F
→
07/21 18:04, , 5F
07/21 18:04, 5F
→
07/21 18:10, , 6F
07/21 18:10, 6F
推
07/21 18:16, , 7F
07/21 18:16, 7F
→
07/21 18:32, , 8F
07/21 18:32, 8F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 4 之 4 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章