VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1431|回复: 10

if中用double类型变量判断的问题。。。

[复制链接]

1

主题

5

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-3-12 18:30:01 | 显示全部楼层 |阅读模式
                double ff=1.0;
                if(ff==1)//精度
                {
                        cout<<"ok"<<endl;
                }
                else
                {
                        cout<<"  cancel"<<endl;
                }
为什么输出为ok而不是cancel呢?
谢谢!
回复

使用道具 举报

0

主题

9

帖子

10.00

积分

新手上路

Rank: 1

积分
10.00
发表于 2020-6-7 10:00:02 | 显示全部楼层
一般都和 0.9999999999 1.0000001 做大小比较,不用 == 比较
回复

使用道具 举报

0

主题

63

帖子

43.00

积分

新手上路

Rank: 1

积分
43.00
发表于 2020-6-7 13:30:01 | 显示全部楼层
和零比较的例子:

const float EPSINON = 0.00001;//此处根据精度定
if ((x >= - EPSINON) && (x <= EPSINON))
回复

使用道具 举报

1

主题

5

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
 楼主| 发表于 2020-6-30 11:30:01 | 显示全部楼层
你们误解我的意思了,我知道由于精度问题,都是
if ((x >= - EPSINON) && (x <= EPSINON))这么做的

double ff=1.0;
                if(ff==1)//精度  ,但由于精度问题,此处应该不成立的!,但程序认为是成立的
                {
                        cout<<"ok"<<endl;
                }
                else
                {
                        cout<<"  cancel"<<endl;
                }
//为什么输出为ok而不是cancel呢?
谢谢!
回复

使用道具 举报

0

主题

5

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-6-30 23:15:01 | 显示全部楼层
成立也正常,不成立也正常,因此我们应避免那样做.
回复

使用道具 举报

0

主题

6

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-7-20 16:15:02 | 显示全部楼层
double型数据不能这样直接进行比较,我在写程序时也遇到了这样的问题
回复

使用道具 举报

0

主题

57

帖子

27.00

积分

新手上路

Rank: 1

积分
27.00
发表于 2020-7-28 13:30:01 | 显示全部楼层
你这个好比直接写
if(0.1f == 0.1f)
这么比较是可以为真的,浮点数实际上也是一个2进制数据串,当然是可以相等的,说他的不精确性是体现在
1/3 这样的数值表示中
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-7-28 20:30:01 | 显示全部楼层
if(ff==1)
比较只能在同类型变量之间进行,所以编译器会先把1转为double,再进行比较。
回复

使用道具 举报

1

主题

5

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
 楼主| 发表于 2020-8-7 03:45:01 | 显示全部楼层
但是我觉得if(ff==1)这句肯定是不成立的,因为double只能保持10位有效数字,10位之后的所有位如何保证都为0呢?
但是循环100次比较,编译器都认为if(ff==1)是成立的~

回复

使用道具 举报

0

主题

57

帖子

27.00

积分

新手上路

Rank: 1

积分
27.00
发表于 2020-8-7 09:45:02 | 显示全部楼层
1.0f 在内存中表现形式为
00 00 80 3F 四字节数据,当然可以有相等的值,只要另一个浮点数的表现形式也是这么四个字节就行了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表