float的精确度是7位,为什么与‘零’比较时 0.00001只是5位?解决方法
float的精确度是7位,为什么与‘零’比较时 0.00001只是5位????
为什么零值不用0.000001或0.0000001
------解决方案--------------------
根据需求确定要达到的精度误差就行了。 记得林锐博士的文章中有讲浮点数的比较。
比如你的误差允许范围为千分之一,那和0.0001比较就好了。
------解决方案--------------------
因为赋值粘贴,所以网上到处都是0.00001。这题主要意思就是,不能和0.0直接==。
------解决方案--------------------
楼上说的都对。。。。
------解决方案--------------------
其实和0比较完全可以用==0.0f,不相信的话可以自己做测试,有关浮点的误差问题总是被人放大,实际上两个浮点数是可以用==直接判断的
------解决方案--------------------
参考“浮点表示法”←百度搜
C:\Program Files\Microsoft Visual Studio 10.0\VC\include\float.h
为什么零值不用0.000001或0.0000001
------解决方案--------------------
根据需求确定要达到的精度误差就行了。 记得林锐博士的文章中有讲浮点数的比较。
比如你的误差允许范围为千分之一,那和0.0001比较就好了。
------解决方案--------------------
因为赋值粘贴,所以网上到处都是0.00001。这题主要意思就是,不能和0.0直接==。
------解决方案--------------------
楼上说的都对。。。。
------解决方案--------------------
其实和0比较完全可以用==0.0f,不相信的话可以自己做测试,有关浮点的误差问题总是被人放大,实际上两个浮点数是可以用==直接判断的
------解决方案--------------------
参考“浮点表示法”←百度搜
C:\Program Files\Microsoft Visual Studio 10.0\VC\include\float.h
- C/C++ code
…… #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 */ ……
------解决方案--------------------
其实需要看你自己的精度要求
浮点数与 任何整数a 比较时:
if(f < a+0.0000001 && f > a-0.0000001) //具体后面几个0看你自己的精度确定
{
......
}
------解决方案--------------------
需要看你的精度要求
------解决方案--------------------
------解决方案--------------------
一般直接0比较就行了,被某人放大危害了
------解决方案--------------------
------解决方案--------------------
浮点数的误差在于其计算的时候,而不是赋值的时候。
------解决方案--------------------
参考“浮点表示法”←百度搜