• 全部
  • 问答

有一道题目一直很难忘

Oversense 2007-09-05 12:57:40
Q.下面的程序输出什么?

int main(){
float a = 3.14;
if(a > 3.14){
printf("true");
}else{
printf("false");
}
return 0;
}
...全文
223 点赞 收藏 12
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
rich323 2007-09-06
float数也是不精确的,二楼说的很明白了。
回复
coolFly19 2007-09-05
二楼的说得很明白,

实际上像你这么写,哪一种情况都可能发生。
回复
wyjkk 2007-09-05
float a = 3.14;
if((a - 3.14)>1e-6)
{
printf("true");
}
else
{
printf("false");
回复
做鸡真好吃 2007-09-05
WoW~
回复
wang_wuhui 2007-09-05
UP二楼的说得很明白了.
回复
yydrewdrew 2007-09-05
浮点数表示的数其实是不精确的,总是有误差的,一开始运算误差就会互相累加,所以浮点数无法直接比较,只能在一定精度内进行判断。
回复
gfxiang 2007-09-05
浮点数表示会有截断误差。
if (a > 3.14)
a是float型,3.14是double型,两者精度不一样,具体谁大要用二进制表示出来才知道的
所以一般比较浮点数是否相等都用相减取绝对值小于某个误差范围
if (fabs(a - 3.14) < 1e-6)
回复
lanxiaozhong 2007-09-05
if(a > 3.14) //会出现3种情况,这样写没有意义
回复
星羽 2007-09-05
FLT_EPSILON

第一在float.h中,是float比较的最

小值
回复
星羽 2007-09-05
:)
回复
星羽 2007-09-05
#include "float.h"
int _tmain(int argc, _TCHAR* argv[])
{
float a = 3.14;
if(a > 3.14 + FLT_EPSILON){
printf("large");
}
else if (a < 3.14 + FLT_EPSILON)
{
printf("equre");
}
else{
printf("less");
}







return 0;
}
回复
zhangpingfly 2007-09-05
不说,还真的不知道哦~
回复
发帖
C++ 语言
创建于2007-09-28

5.9w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
申请成为版主
帖子事件
创建了帖子
2007-09-05 12:57
社区公告
暂无公告