Re: [問題] c++如何降低精準度
※ 引述《yuchiao0921 (挑戰在我就在)》之銘言:
: 我想讓123.754645 和123.754689變成一樣大有什麼方法?
: 因為我在做ACM11001有一個地方是要判斷2數是否相等
: 用uvatoolkit測試發現它好像都會把很接近的數視為一樣
: 請問有什麼方法能降低精準度?
: 試過setprecision
: 但是setprecision好像只有對output有用
將問題擴充一下,
做數值運算時,常常要判斷兩個座標點是否一樣,但由於
計算上難免會有發生截去誤差,因此在數學上兩個明明是
一樣的座標點經過計算後就變成不一樣。例如:
struct Point {
double x , y ;
Point(double a=0 ,double b=0) : x(a) ,y(b) {}
};
Point pt1(1,1) , pt2 ;
若將 pt1 連八次旋轉 45 度後存入 pt2,則在數學上 pt2 的座標
應與 pt1 同點,但計算上則不同。這時處理的方式就是針對 Point
定義 operator==
bool operator== ( const Point& pt1 , const Point& pt2 ) {
double dx = pt1.x-pt2.x ;
double dy = pt2.y-pt2.y ;
return ( sqrt( dx*dx + dy*dy ) <= TOL ? true : false ) ;
}
bool operator!= ( const Point& pt1 , const Point& pt2 ) {
return ! ( pt1 == pt2 ) ;
}
以上的 TOL 可根據問題的差異自行設定大小。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.115.25.24
→
07/21 14:20, , 1F
07/21 14:20, 1F
→
07/21 14:21, , 2F
07/21 14:21, 2F
→
07/21 14:21, , 3F
07/21 14:21, 3F
→
07/21 14:27, , 4F
07/21 14:27, 4F
→
07/21 18:47, , 5F
07/21 18:47, 5F
討論串 (同標題文章)