发 帖  
原厂入驻New
[问答] C语言浮点数运算结果是什么??
115 c语言 编译器
分享
int   main(void)
{
       float        A=0.18;
       IF(x==0.18)
              printf(“Equal”);
       else
              printf(“NotEqual”);
       return  0;
}
代码运行的结果是什么??
a.输出依赖于编译器 b.Equal ??   c.Not Equal  ???       d.运行出错         
0
2020-3-5 21:57:42   评论 分享淘帖 邀请回答

相关问题

12个回答
浮點數有精度問題啊~~不一定能夠正確表示出
A實際上有可能多一點(0.1800001) 或少一點(0.1799999)
xp  32位  系统下的VC6.0运行结果是c
2020-3-6 08:04:30 评论

举报

要用绝对值的方法写:
if  ( fabs(A)  < 1e-06);
2020-3-6 08:23:00 评论

举报

变量x 都没定义  运行出错
2020-3-6 08:40:56 评论

举报

在CodeBlocks中用gcc编译了下该代码结果如下(if(x==0.18)应该是if(A==0.18)吧)

同意4楼的观点,应该是精度的问题,而且float和double类型精度不一样。
而if(A==0.18) 中编译器应该把0.18当成double了,而0.18不能用二进制精确表示出来,0.18用float和double分别存在机器中应该是不同的。
我先把程序改了下如下图:把float A=0.18改成了double A=0.18运行结果是Equal

我再改了下程序,把if(A==0.18)修改为if(A==0.18f),结果是Equal,请看下图

最后我把判断的值改成了0.5,0.5这个数是能用二进制精确表示的,请看最后的一个图,这个的结果是Equal
2020-3-6 08:51:18 评论

举报

浮点数不能精确存储,只能限定范围判断。不能==。
如4楼所说。
2020-3-6 08:57:38 评论

举报

受教了,谢谢!
以前确实从未思考过用==来判断两个浮点数是否相等所涉及到的问题。
我上面的帖子也只是根据之前了解到的浮点数存储知识的推断,不严谨!!!
2020-3-6 09:04:59 评论

举报

a.输出依赖于编译器 b.Equal ??   c.Not Equal  ???       d.运行出错 
选择哪个?
2020-3-6 09:11:28 评论

举报

a.输出依赖于编译器 b.Equal ??   c.Not Equal  ???       d.运行出错 
选择哪个?
2020-3-6 09:31:09 评论

举报

真不知道答案...只能肯定不是d. (如果不考慮變數X沒宣告..)
你這麼堅持要人作選項...最後有要公布答案嗎XD
5F講得非常詳細...
事實上就算是64位的浮點數也沒辦法正確表示出0.18 
http://www.h-schmidt.net/FloatConverter/IEEE754.html 
把0.18丟上去看 double表示0.18000000715255737
2020-3-6 09:45:12 评论

举报

2020-3-6 10:01:18 评论

举报

C语言默认将小数存储为双精度类型
2020-3-6 10:15:02 评论

举报

只有小组成员才能发言,加入小组>>

95个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /7 下一条

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