首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请问前辈关于float变量的比较有关问题

2013-04-20 
请教前辈关于float变量的比较问题小弟想知道float变量的比较怎么进行,在网上查了需要用 a - b eps &&

请教前辈关于float变量的比较问题
小弟想知道float变量的比较怎么进行,在网上查了==需要用 a - b < eps && b - a < eps (eps是精度),小弟想知道>=, >, <= , < 的比较该怎么进行, 是否可以直接使用?
谢谢大家。
[解决办法]
float  x与“零值”比较的if语句:
标准答案:                                                                错误的写法:
    const float  EPSION = 0.00001                                    if(x = 0.0)
    if((x >= -EPSION) && (x <= EPSION))                        if(x != 0.0)
[解决办法]
关于浮点数的精度问题,太多似是而非的东西了,实际浮点数的误差有误差的最根本原因就是计算导致的,比如float x=0.6f;
float y=x/30;//这时候y可能不等于0.02,因为计算误差,所以直接比较会不正确,实际这个时候大于和小于一样有可能不正确,就像这个时候你判断y>0.02,返回值是true

[解决办法]
用10进制小数不能精确表示某些三进制小数0.1(3)=0.33333333333……(10)
同理,用二进制小数也不能精确表示某些10进制小数。
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 */



#define FLT_DIG         6                       /* # of decimal digits of precision */
#define FLT_EPSILON     1.192092896e-07F        /* smallest such that 1.0+FLT_EPSILON != 1.0 */
#define FLT_GUARD       0
#define FLT_MANT_DIG    24                      /* # of bits in mantissa */
#define FLT_MAX         3.402823466e+38F        /* max value */
#define FLT_MAX_10_EXP  38                      /* max decimal exponent */
#define FLT_MAX_EXP     128                     /* max binary exponent */
#define FLT_MIN         1.175494351e-38F        /* min positive value */
#define FLT_MIN_10_EXP  (-37)                   /* min decimal exponent */
#define FLT_MIN_EXP     (-125)                  /* min binary exponent */
#define FLT_NORMALIZE   0
#define FLT_RADIX       2                       /* exponent radix */
#define FLT_ROUNDS      1                       /* addition rounding: near */
...


[解决办法]
引用:
引用:C/C++ code?12345678910111213141516171819bool equals(double a, double b, double epsion){    if ((a - b) <= epsion 
[解决办法]
 (b - a) <= epsion)    {        return true; ……


浮点数的相等 就是如果两个浮点数的差值在误差范围以内 就算相等啊
1.001 跟 1.002 
如果误差设置为0.001 那么就认为 1.001 == 1.002 因为 
[解决办法]
1.001-1.002
[解决办法]
 <= 误差
如果 误差设置为0.0001 那么就认为 1.001 != 1.002 因为 
[解决办法]
1.001-1.002
[解决办法]
 > 误差

既然是a跟b的绝对值 
那这是 或 的关系啊 
怎么会是 且 呢~~

热点排行