2010-02-28 110 views
2

我希望四捨五入浮點數來設置精度並返回函數的結果。例如,我現在有以下功能:C++圓浮點數來設置精度

inline bool R3Point:: 
operator==(const R3Point& point) const 
{ 
    // Return whether point is equal 
    return ((v[0] == point.v[0]) && (v[1] == point.v[1]) && (v[2] == point.v[2])); 
} 

我希望做的是,而不是做一個直接的v[i] == point.v[i]比較,我只希望數字比較一組特定的精度,因此,如果v[i] = 0.33349999999999996point.v[i] = 0.33350000000000002,我相等的比較將導致TRUE。

我知道有一個C++ smanip setprecision (int n);函數,我已經看到它在使用cout在屏幕上顯示輸出時使用了很多。但是,我不確定這是否可以在我描述的功能中使用。

謝謝。

回答

5

一般來說,==不應該被用來比較雙打,你應該這樣做:

if(v[0] - point.v[0] < 1e-9) { } 

您可以使用absfabs,如果你不知道的標誌,並相應地改變精度1E-9 。

+0

你是什麼意思相應地改變精度1e-9?在我的情況下,我不確定該符號,所以如果(fabs(v [0] -point.v [0])<1e-9),我會使用某些東西。 – Myx 2010-02-28 17:22:36

+0

我的意思是,你需要根據你需要精確的位數來改變1e-9。 – 2010-02-28 17:28:46

3

比較2個浮點數(比如a和b),最好使用以下方法:abs(a-b)<精度。 abs(x)是絕對值函數,精度是一些小的正數。通常你想設置精度作爲被比較的數字本身的絕對值的函數。

+2

一定要寫std :: abs而不是abs,否則你可能會意外地得到只有整數的C函數。快樂調試,然後... – Tronic 2010-02-28 17:27:33