C语言笔试题目一道

yang5856 2007-11-26 08:03:09
下午和同学讨论一道题,很有意思,大家做做看
void main(int c,int,int)
{
int cc=0;
double a=1.0;
double b=1.0;
while(b+a!=a){
b/=2;
cc++;
}
cout<<cc;
return ;
}

输出是多少? 若把while(b+a!=a)换成while(b!=0)输出又是多少呢?
...全文
949 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
wild_fox86116 2007-12-04
  • 打赏
  • 举报
回复
这东西挺乱的
我转了一篇文章放博客了
可以去看看
http://blog.csdn.net/wild_fox86116/archive/2007/12/04/1916821.aspx
我都懒得研究这些东西了
shiao1201 2007-12-04
  • 打赏
  • 举报
回复
都是被面试给弄的,实际上用的上这类程序吗?
blue_zyb 2007-12-03
  • 打赏
  • 举报
回复
我还以为lz是已明白结果,题目是拿出来讨论一下的呢。。。
问一下,lz不懂IEEE754的浮点表示么?
yang5856 2007-12-03
  • 打赏
  • 举报
回复
最近一直忙,忘记看帖子了。

xalangying 其实大家就技术问题讨论下,又不会影响到谁,反正都是学习,有的人走阳光大道,有的人走独木小桥,没有什么争议吧?

blue_zyb
没有看明白你写的,
1)当b' + a = 1.0 + 2^(-53)时,由于2^(-53)要与1.0对阶到1023,所以它的小数位要右移53位,而这正好会将小数位隐含的leading 1移出去,所以失去精度,相加为1.
2)对于指数为11,小数位为52的double浮点来说,能表示的最小的非规格化数字为2^(-52) * = 2^(-1074)。 2^(-1022)?

能否给解释的更详细些。。。

看来这些知识还很欠缺啊,尽管看起来很容易的知识点。
mainboyy 2007-12-02
  • 打赏
  • 举报
回复
呵呵,终于有点明白了,不错
zzyjsjcom 2007-12-02
  • 打赏
  • 举报
回复
建议看看 <深入理解计算机系统>
xalangying 2007-12-01
  • 打赏
  • 举报
回复
怎么那么多人喜欢研究些旁门左道的东西,并以为很有意思,还以为别人也会觉得很有意思?
我觉得很多问题只要知道不应该那样做和不应该那样做的原因就行了,非要去详细了解假如我偏这样做了后的结果吗
就像我们要懂法,但不必对每一条法律都违反一次来感受一下之后的过程和后果吧
具体到c/c++上,太多 ++a+a++ 和 用==比较浮点值 和 使用函数返回的局部变量地址 等的讨论了
天,有人把main 函数写成 void main(int c,int,int) 了
可怜的c/c++,你的设计者给了你优美合身的衣服、平整的大道,但有不少你的使用者乐于看你硬套上奇装异服后蹒跚在崎岖小道上的丑态
个人牢骚,不针对谁,莫怪
独孤过儿 2007-12-01
  • 打赏
  • 举报
回复
老师没讲过浮点数不能用 == 或者!=来判断是否相等,而只能用一个渐进度的值来比较吗?

要是没讲过,那就是你们老师失职了!
supersunshine 2007-12-01
  • 打赏
  • 举报
回复
解释清楚有难度阿!
blue_zyb 2007-12-01
  • 打赏
  • 举报
回复
其实这道题目是有准确答案的,而不是像很多人认为的无聊的或者涉及精度问题。只要遵循的是IEEE标准754

1.对于while(b+a!=a)的情况。
由于1.0的double位表示是0 01111111111 000...000,即符号位位0,11位的指数位除了最高位是0以外都为1,52位小数位全0。即指数E = 1023 - 1023 = 0,有效数字为隐含的1.
那么,当b(初值为1.0)做53次除2操作以后,即2的-53次方,其位表示为 0 01111001010 000...000,11的指数位对应的十进制数为-53 + 1023 = 970的二进制表示,小数位仍然是全0. 设该2的-53次方的小树为b'
当b' + a = 1.0 + 2^(-53)时,由于2^(-53)要与1.0对阶到1023,所以它的小数位要右移53位,而这正好会将小数位隐含的leading 1移出去,所以失去精度,相加为1.
即53次循环后条件b + a == a成立。

2.while(b!=0)的情况。
对于指数为11,小数位为52的double浮点来说,能表示的最小的非规格化数字为2^(-52) * 2^(-1022) = 2^(-1074)。所以当b == 1.0,进行1074次除2操作变为2^(-1074)以后,再进行一次除2操作(即2^(-1075))将无法被表示,从而下溢到0,所以经过1075次操作以后,与0相等。


至于xalangying 说的‘怎么那么多人喜欢研究些旁门左道的东西,并以为很有意思,还以为别人也会觉得很有意思? ’,是因为你不明白这个题蕴含的知识是什么,也就是你不懂,所以你才会觉得他旁门左道。按照你这么说,制定IEEE754浮点标准的人都是些无聊的旁门左道的人。另外,你如果个人认为没有意思,大可不必啰嗦一大堆,自有愿意切磋知识的人认为有趣,比如我。之所以责难你一下,是因为我觉得人群中自以为是抨击知识而不是研究知识的人有点多。。。
blue_zyb 2007-11-30
  • 打赏
  • 举报
回复
mark,明天给解释
xhd3767 2007-11-27
  • 打赏
  • 举报
回复
有分吗?
yang5856 2007-11-26
  • 打赏
  • 举报
回复
void main(int c,int,int)
实在不知道后面两个int做什么的了。


-------随便玩的,没有表示什么意思,在这个程序里
richard_2010 2007-11-26
  • 打赏
  • 举报
回复
void main(int c,int,int)
实在不知道后面两个int做什么的了。
yang5856 2007-11-26
  • 打赏
  • 举报
回复
这个题目实在是没啥意义,经VC运行是答案是
1) 53
2) 1075





这道题目,考察浮点数的知识,我感觉很有意思的,知道答案的产生过程,才是最重要的,而不是只
知道答案。
stormc 2007-11-26
  • 打赏
  • 举报
回复
这个题目实在是没啥意义,经VC运行是答案是
1) 53
2) 1075
gongyiling 2007-11-26
  • 打赏
  • 举报
回复
是关于浮点数的性质问题,如果条件是a+b!=a,那么输出的是53,如果条件是b!=0那么输出是16435,相差很多,
但在条件a+b!=b中,while循环结束后b还有一小值,在b!=0的条件下b会变为0.这是因为
浮点数的小数点是浮动的,它有效数字的位数却大概在16位左右.
在条件a+b!=a下浮点数a+b所能表示的最多有郊数字已经达到极限,略去1e-16数量级的小量,所以判定a+b=a,
但在b!=0的条件下,是浮点数的指数所能表示的数达到最大值,于是判定b=0
.
IlikeEnglish 2007-11-26
  • 打赏
  • 举报
回复
就你觉得这个题,有意思吗
史上最全的android和java面试文档集。包括有: java程序员面试宝典.txt Java面试宝典2011版-1C,Java基础部分.doc 三大框架面试题.zip 技术面试题.zip Android笔试题C语言终极面试宝典.doc Java笔试题汇总.pdf Java面试宝典_2010.doc 面试全攻略100题.doc 智力题和答案.doc C语言面试题大汇总.doc 计算机专业必备笔试面试锦囊.doc 笔试.rar 面试题集合.zip C语言面试题大汇总1.doc 面试题集合 java面试题 JAVA面试题集合(项2部).chm 华为笔试题大全(史上最齐全).doc JAVA题库.doc java面试题.zip Java面试宝典2011版-1A,Java基础部分.doc jsp笔试题全集.doc Java学习笔记(必看经典).doc android和java面试大全.rar JAVA精华.doc JAVA经典算法50题1.doc Android笔试题库.rar Java面试宝典2011版-1B,Java基础部分.doc Java工程师试题(机构招聘)20100526.doc C语言面试题大汇总面试题及答案.doc Java23种设计模式(总结)1.doc JAVA_WEB面试笔试题.doc 实施人员初试题20091009.doc 笔试智力题.doc C语言面试题.doc 2011android面试题及其答案大全.doc java基础笔试题.doc 安卓鄙视题附答案.txt 史上最全的android面试题库.docx android工程师笔试试卷.doc Android面试题(详细答案).doc Android内测题.doc Java面试题2.doc JAVA面试题80页.doc 智力题.doc JAVA 综合面试题.pdf 分类后的葵花宝典 葵花宝典.doc 九阴真经.doc Java面试题1.doc 葵花宝典-数据库类.doc JAVA面试题集锦.doc Java程序员,面试必读.txt 软通动力招聘测试题.doc java面试葵花宝典.doc 新建 文本文档 (2).txt 125条常见的JAVA面试题.doc NET易筋经.doc 葵花宝典-Java Web类.doc 葵花宝典-基础类.doc 葵花宝典-数据库类1.doc 技术测评java.doc 技术测评.net.doc 瑞星笔试题(15道).doc 汉端笔试题(7页).doc 一道测试notepad笔试题.doc 奇虎面试题.doc 喜安科 面试题.doc 北京博彦科技笔试+面试.doc 清华同方开发的面试题 (有兴趣的看一下了 !) 中软的面试题(转贴).doc 亚控科技比试题.doc 神州泰岳测试试题(笔试)转贴.doc 一家通讯公司的面试题.doc 软件测试工程师试题发布版.doc 某公司的面试试题.doc 一个外包测试公司的笔试题!.doc 时力科技面试题.doc 合力金桥的笔试题.doc 一道数据库的笔试题.doc 传视数码公司的面试题.doc 美国英网软件公司题.doc 软件测试工程师测试试题大集合(二)包括答案.d 波尔世通的笔试+面试.doc 瓦瑟笔试题(限男性).doc 软通动力面试笔答.doc 常见的测试题(转贴).doc 北京大学计算机科学技术研究所.doc 联合网视面试题.doc 缺陷的等级划分,一个经常被问到的问题.doc 软件测试工程师笔试试题(大集合).doc 千像互动的笔试.doc 2012java面试题分析大全.doc JAVA面试题集合(项2部).chm JAVA经典算法50题1.doc Java工程师试题(机构招聘)20100526.doc Java23种设计模式(总结)1.doc 实施人员初试题20091009.doc 框架图.png struts面试题 hibernate面试题 三大框架.txt JAVA题库.doc

69,374

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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