if中用double类型变量判断的问题。。。
double ff=1.0;
if(ff==1)//精度
{
cout < < "ok " < <endl;
}
else
{
cout < < " cancel " < <endl;
}
为什么输出为ok而不是cancel呢?VC++6.0环境
谢谢!
[解决办法]
一般都和 0.9999999999 1.0000001 做大小比较,不用 == 比较
[解决办法]
和零比较的例子:
const float EPSINON = 0.00001;//此处根据精度定
if ((x > = - EPSINON) && (x <= EPSINON))
[解决办法]
成立也正常,不成立也正常,因此我们应避免那样做.
[解决办法]
double型数据不能这样直接进行比较,我在写程序时也遇到了这样的问题
[解决办法]
你这个好比直接写
if(0.1f == 0.1f)
这么比较是可以为真的,浮点数实际上也是一个2进制数据串,当然是可以相等的,说他的不精确性是体现在
1/3 这样的数值表示中
[解决办法]
1.0f 在内存中表现形式为
00 00 80 3F 四字节数据,当然可以有相等的值,只要另一个浮点数的表现形式也是这么四个字节就行了
[解决办法]
==对float还是有处理的,可以做一个试验
改一下double ff=1.0;的值
改成
double ff=1.0000001;
和
double ff=1.00000001;
其它的代码不变,运行一下程序前面的改法结果是Cancel,后面的是OK
所以==只精确到小数点后面的7位,7位之后就丢掉了
至于LZ说的ff=1.0的情况,编译器应该是把后面的全部当0处理了