我希望舍入浮点数来设置精度并从函数返回结果。例如,我目前有以下功能:
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.33349999999999996
和point.v[i] = 0.33350000000000002
,我的比较将导致TRUE。
我知道有一个c ++ smanip setprecision ( int n );
函数,我看到它在使用cout
在屏幕上显示输出时使用了很多。但是,我不确定这是否可以像我描述的那样在函数中使用。
感谢。
答案 0 :(得分:5)
一般情况下,==
不应该用来比较双打,你应该这样做:
if(v[0] - point.v[0] < 1e-9) { }
如果您不确定符号并相应更改精度1e-9,则可以使用abs
或fabs
。
答案 1 :(得分:3)
比较2个浮点数(比如a和b),最好使用以下方法完成:abs(a-b)&lt;精确。其中abs(x)是绝对值函数,精度是一些小的正数。通常,您希望将精度设置为自身比较数字的绝对值的函数。