分析下面这段代码,如果时间足够的话,这段代码是否能够运行完?如果能,运行完后n_f和n_d的值分别是多少?并给出原因。

duantianhen 2011-12-04 07:43:11
float n_f =1 , k_f =0;
double n_d =1 , k_d =0;
while(n_f != k_f )
{
k_f = n_f ;
n_f = n_f + 1 ;
}
printf ("%f\n ",n_f);
while (n_d != k_d )
{
k_d = n_d ;
n_d = n_d + 1 ;
}
printf( "%lf\n" , n_d ) ;

...全文
141 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yisikaipu 2011-12-04
  • 打赏
  • 举报
回复
为什么是24和53,先不赘述,参考IEEE浮点
单精度浮点http://en.wikipedia.org/wiki/Binary32
双精度浮点http://en.wikipedia.org/wiki/Binary64

yisikaipu 2011-12-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 w170532934 的回复:]精度丢失后输出:16777216.000000和
不过这只是我机器的输出,我认为在每个机器上输出不可能都是一样的。[/Quote]

只要用的IEEE标准浮点,结果应该是一样的
从1开始不断+1,单精度第一个+1时丢失精度的是16777216,也就是2^24,这个很快就出结果了
从1开始不断+1,双精度第一个+1时丢失精度的是9007199254740992,也就是2^53,这个数字实在太大,什么时候运行完自己琢磨……
W170532934 2011-12-04
  • 打赏
  • 举报
回复
精度丢失后输出:16777216.000000和
不过这只是我机器的输出,我认为在每个机器上输出不可能都是一样的。
KID_coder 2011-12-04
  • 打赏
  • 举报
回复
个人猜测和精度有关~
精度损失可能会造成相等的情况
可以执行完
whoami1978 2011-12-04
  • 打赏
  • 举报
回复
没测试,不过,不建议用直接的相等,不等判浮点。它是有误差的。

64,660

社区成员

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

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