| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 901 人关注过本帖
标题:有一个浮点型变量 X,如何判断它是否为 0 ?用除法可以吗?
只看楼主 加入收藏
hiyourstory
Rank: 1
等 级:新手上路
帖 子:7
专家分:4
注 册:2014-10-21
结帖率:0
收藏
已结贴  问题点数:20 回复次数:11 
有一个浮点型变量 X,如何判断它是否为 0 ?用除法可以吗?
就是X除以任意一个数,结果为零则X为0,else X不为0,这样可以吗

# include <stdio.h>

int main(void)
{
     float x;
     if( x/2.00000==0 )
        printf("yes!\n");
     else
        printf("no!\n");
   
      return 0;
}
搜索更多相关主题的帖子: include return 
2014-10-21 19:45
龙牙
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大汉
等 级:贵宾
威 望:17
帖 子:769
专家分:6207
注 册:2013-3-18
收藏
得分:7 
应该有一个scanf()

只要心是晴朗的,人生就没有雨天。
2014-10-21 19:54
hiyourstory
Rank: 1
等 级:新手上路
帖 子:7
专家分:4
注 册:2014-10-21
收藏
得分:0 
回复 2 楼 龙牙
好吧,如果加一个scanf,那这个问题是可以用除法得出结论的吗?
2014-10-21 19:56
龙牙
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:大汉
等 级:贵宾
威 望:17
帖 子:769
专家分:6207
注 册:2013-3-18
收藏
得分:0 
回复 3 楼 hiyourstory
可以,你的被除数不为0就可以

只要心是晴朗的,人生就没有雨天。
2014-10-21 19:58
erty1001
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:331
专家分:1433
注 册:2014-8-31
收藏
得分:7 
简单说说:
不好用!
浮点数总是不是那么灵敏的。它除以一个浮点数 还是浮点数  与整数0相比 总是不那么容易完全相等
结果正确的概率很低
2014-10-21 20:59
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:7 
有一个浮点型变量 X,如何判断它是否为 0 ?
------- if( X == 0.0f ) 就行了呀

用除法可以吗?就是X除以任意一个数,结果为零则X为0,else X不为0,这样可以吗
------ 不行,比如你代码中的 if( x/2.00000==0 ),x可能是个最小非零数,除以2就变为0了,但x不是0。
2014-10-22 08:34
apiuto
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2015-1-2
收藏
得分:0 
回复 6楼 rjsp
用if(x == 0.0f)我用VC++6.0测试结果不行
2015-01-02 10:15
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
以下是引用apiuto在2015-1-2 10:15:41的发言:

用if(x == 0.0f)我用VC++6.0测试结果不行
“测试结果不行”到底是怎么个不行?你要保证你说的话别人能听懂。

是写了 if(x == 0.0f) 这句话后,编译失败?
还是运行后,导致世界奔溃?
还是 x 为 0.0f,但 if(x == 0.0f) 不成立?
还是 x 不为 0.0f,但 if(x == 0.0f) 成立?

最重要的是,为什么不贴出你的代码?
2015-01-04 08:49
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用rjsp在2015-1-4 08:49:33的发言:


r版看看这个  

程序代码:
#include<stdio.h>

int main()
{

    double D=0.2422;
    double C=0.24220001;

    double d=20.0;
    double c=2.0;

    if((D-C)==0.0f)
        printf("0.2422==0.24220001\n");
    else 
        printf("0.2422!=0.24220001\n");
    ///////////////////////////////////////
    
    if((d/c)==10.0f)
        printf("==========\n");
    else 
        printf("!!!!!!!========\n");
    return 0;
}



下面这个 系统认为相等 感觉可以理解

但是上面的 系统认为不相等  不是说浮点数当小数达到多少位时 就自动忽略了吗

DO IT YOURSELF !
2015-01-04 08:59
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
回复 9楼 wp231957
对于 double D = 0.2422; 这一句而言,
左边是C语言的浮点类型变量,右边是人类数学定义中的实数,两者是无法等价的。编译器只能用一个double能表示的、最接近所给实数值的浮点数来表示。
也就是此时,D == 0.2421999999999999986233234494648058898746967315673828125(实数)
同理,C == 0.2422000099999999933597649715011357329785823822021484375(实数)
D-C == 0.000000009999999994736441522036329843103885650634765625(实数)
所以 if((D-C)==0.0) 不成立。 // 你代码手误吧?不应该写成0.0f,而应该写成0.0。楼主用的float,所以才写成0.0f

d = 20.0(实数)
c = 2.0(实数)
d/c = 10.0(实数)
10.0(浮点数) = 10.0(实数)
所以 if((d/c)==10.0) 成立。
2015-01-04 09:19
快速回复:有一个浮点型变量 X,如何判断它是否为 0 ?用除法可以吗?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.041122 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved