有一道题目一直很难忘

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;
}
...全文
298 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
  • 打赏
  • 举报
回复
不说,还真的不知道哦~

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧