unique精度太高,怎么办?

Binzo 2012-11-30 01:37:01
unique 是标准库提供的算法algorithms。但对于vector<double>进行unique,显然直接使用==/!=有失妥当。楼下的给点建议吧。
...全文
547 28 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2012-12-03
  • 打赏
  • 举报
回复
int double_equal(double a, double b) {
 return fabs(a-b) < 1000.0 * DBL_EPSILON;
}
goodwithcode 2012-12-02
  • 打赏
  • 举报
回复
Binzo 2012-12-02
  • 打赏
  • 举报
回复
引用 23 楼 pathuang68 的回复:
自己随便写一个比较大小的函数不就行了嘛。大致方法如下: 1. 将double转换成int,先比较整数部分的大小 2. 如果整数部分相等,那么就比较小数部分的大小,比如,如果比较精度是0.00001,那么就将小数部分乘以100000,再比较整数部分的大小就行。
好有,玄机。
boylee1111 2012-12-02
  • 打赏
  • 举报
回复
除了接分,更重要的是学习了~~~~
cbzjzsb123 2012-12-02
  • 打赏
  • 举报
回复
好有,玄机。
pathuang68 2012-12-02
  • 打赏
  • 举报
回复
引用 20 楼 Binzo 的回复:
引用 19 楼 gumh 的回复://寫錯了 int double_equal(double a, double b) { return fabs(a-b) < 2 * DBL_EPSILON; } DBL_EPSILON太小,唉。fabs报错,唉。
自己随便写一个比较大小的函数不就行了嘛。大致方法如下: 1. 将double转换成int,先比较整数部分的大小 2. 如果整数部分相等,那么就比较小数部分的大小,比如,如果比较精度是0.00001,那么就将小数部分乘以100000,再比较整数部分的大小就行。
安然 2012-12-01
  • 打赏
  • 举报
回复
来接点分~
Binzo 2012-12-01
  • 打赏
  • 举报
回复
引用 19 楼 gumh 的回复:
//寫錯了 int double_equal(double a, double b) { return fabs(a-b) < 2 * DBL_EPSILON; }
DBL_EPSILON太小,唉。fabs报错,唉。
prajna 2012-12-01
  • 打赏
  • 举报
回复
//寫錯了 int double_equal(double a, double b) { return fabs(a-b) < 2 * DBL_EPSILON; }
prajna 2012-12-01
  • 打赏
  • 举报
回复
int double_equal(double a, double b) { return (a-b) < 2 * DBL_EPSILON; }
flyrack 2012-12-01
  • 打赏
  • 举报
回复
星期六了 进来接下分
yisikaipu 2012-12-01
  • 打赏
  • 举报
回复
引用 15 楼 Binzo 的回复:
2 四个三角和一个星的比较活跃,努力刷分和灌水。
真心不懂,纯洁学习
Binzo 2012-12-01
  • 打赏
  • 举报
回复
分析了一下: 1 两个三角的,都还纯洁,回复时在尽量提供些自己知道的东西。 2 四个三角和一个星的比较活跃,努力刷分和灌水。 3 两个星星以上的,估计经历比较多了,不罗嗦,谆谆教导一下。老夫不多说了,只讲技术。 顶一下,人多好散分。
转角天边 2012-11-30
  • 打赏
  • 举报
回复
又到星期五了
采石工 2012-11-30
  • 打赏
  • 举报
回复
明白楼主的意思了。MSDN中有两unique

template<class FwdIt>
    FwdIt unique(FwdIt first, FwdIt last);
template<class FwdIt, class Pred>
    FwdIt unique(FwdIt first, FwdIt last, Pred pr);
根据楼主的需要,应该有第二种形式。这是需传入一个谓语,用于浮点数的比较,楼主用的是自定义的double_equal。
赵4老师 2012-11-30
  • 打赏
  • 举报
回复
仅供参考 float.h
……
#define DBL_DIG         15                      /* # of decimal digits of precision */
#define DBL_EPSILON     2.2204460492503131e-016 /* smallest such that 1.0+DBL_EPSILON != 1.0 */
#define DBL_MANT_DIG    53                      /* # of bits in mantissa */
#define DBL_MAX         1.7976931348623158e+308 /* max value */
#define DBL_MAX_10_EXP  308                     /* max decimal exponent */
#define DBL_MAX_EXP     1024                    /* max binary exponent */
#define DBL_MIN         2.2250738585072014e-308 /* min positive value */
#define DBL_MIN_10_EXP  (-307)                  /* min decimal exponent */
#define DBL_MIN_EXP     (-1021)                 /* min binary exponent */
#define _DBL_RADIX      2                       /* exponent radix */
#define _DBL_ROUNDS     1                       /* addition rounding: near */
……
ForestDB 2012-11-30
  • 打赏
  • 举报
回复
template <class ForwardIterator, class BinaryPredicate> ForwardIterator unique ( ForwardIterator first, ForwardIterator last, BinaryPredicate pred ); 不是可以带个断言么? 传个自定义的比较函数不就好了。
redleaves 2012-11-30
  • 打赏
  • 举报
回复
今天已经星期5了,能接多少接多少吧
stereoMatching 2012-11-30
  • 打赏
  • 举报
回复
猜测楼主问的是精准度的问题? 从Qt抄来的,稍作了一些修改 精准度可以自己做修改 建议改成functor,效率比function pointer高

inline bool qFuzzyCompare(double p1, double p2)
{
    return (std::abs(p1 - p2) <= 0.000000000001 * std::min(std::abs(p1), std::abs(p2)));
}
yisikaipu 2012-11-30
  • 打赏
  • 举报
回复
学 习
加载更多回复(6)

15,447

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧