c ++循环浮点数来设置精度

时间:2010-02-28 17:15:35

标签: c++ floating-point precision

我希望舍入浮点数来设置精度并从函数返回结果。例如,我目前有以下功能:

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在屏幕上显示输出时使用了很多。但是,我不确定这是否可以像我描述的那样在函数中使用。

感谢。

2 个答案:

答案 0 :(得分:5)

一般情况下,==不应该用来比较双打,你应该这样做:

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

如果您不确定符号并相应更改精度1e-9,则可以使用absfabs

答案 1 :(得分:3)

比较2个浮点数(比如a和b),最好使用以下方法完成:abs(a-b)&lt;精确。其中abs(x)是绝对值函数,精度是一些小的正数。通常,您希望将精度设置为自身比较数字的绝对值的函数。