读书人

unique精度太高怎么处理

发布时间: 2013-01-08 14:02:14 作者: rapoo

unique精度太高,怎么办?
unique 是标准库提供的算法algorithms。但对于vector<double>进行unique,显然直接使用==/!=有失妥当。楼下的给点建议吧。
[解决办法]

这是解决了吗,求人不如求己
[解决办法]
std::unique 有一个重载接受 predicate,自己提供一个带误差限的仿函数就行了。
[解决办法]

[解决办法]
于是接分。。。
[解决办法]
学 习
[解决办法]
猜测楼主问的是精准度的问题?
从Qt抄来的,稍作了一些修改
精准度可以自己做修改
建议改成functor,效率比function pointer高


[解决办法]
template <class ForwardIterator, class BinaryPredicate>
ForwardIterator unique ( ForwardIterator first, ForwardIterator last,
BinaryPredicate pred );
不是可以带个断言么?
传个自定义的比较函数不就好了。

[解决办法]
仅供参考
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 */
……


[解决办法]
明白楼主的意思了。MSDN中有两unique

[解决办法]
来接点分~unique精度太高,怎么处理
[解决办法]
unique精度太高,怎么处理
[解决办法]
引用:
引用://了
int double_equal(double a, double b)
{
return fabs(a-b) < 2 * DBL_EPSILON;
}
DBL_EPSILON太小,唉。fabs报错,唉。


自己随便写一个比较大小的函数不就行了嘛。大致方法如下:
1. 将double转换成int,先比较整数部分的大小
2. 如果整数部分相等,那么就比较小数部分的大小,比如,如果比较精度是0.00001,那么就将小数部分乘以100000,再比较整数部分的大小就行。
[解决办法]
除了接分,更重要的是学习了~~~~
[解决办法]
好有,玄机。

读书人网 >C++

热点推荐