在RGB到HSV空间转换过程中,碰到了比较浮点数是否相等的问题。由于编译器对精度做了优化,不能简单的用==来判断浮点数相等,这样会对逻辑上相等的浮点数得出不等的结论。正确的做法是,当两个浮点数之差小于一个极小的值时,就可以相等待之。
在<float.h>里有一些极小值的宏定义,可以拿来使用。例如
#define FLT_EPSILON 1.19209290E-07F
#define LDBL_EPSILON 1.084202172485504E-19
可以用来判断float,long double 的相等问题。