| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 857 人关注过本帖
标题:C99 long double 的一个问题。。
只看楼主 加入收藏
zqy110007
Rank: 3Rank: 3
来 自:外太空
等 级:论坛游民
威 望:6
帖 子:1493
专家分:82
注 册:2008-11-19
结帖率:97.78%
收藏
 问题点数:0 回复次数:3 
C99 long double 的一个问题。。
我现在正在看<C Primer Plus>这本书,看到了第60页的地方,有这么一个题目,也不算是题目,反正就是这种示范。
程序代码:
#include <stdio.h>

 
int main(void){
  float aboat=32000.0;
  double abet=2.14e9;
  long double dip=5.32e-5;

 
  printf("%f can be writen %e\n",aboat,aboat);
  printf("%f can e written %e\n",abet,abet);
  printf("%f can be written %e\n",dip,dip);
  getch();
  return 0;
}


他的输出结果是:
32000.000000 can be writen 3.200000e+04
2140000000.000000 can e written 2.140000e+09
0.000053 can be written 5.320000e-05
就是上面这句出了问题。
我这里的输出结果确是:
32000.000000 can be writen 3.200000e+04
2140000000.000000 can e written 2.140000e+09
-195022851250969750000000000000000000000000000000000000000000000000000000000000000 can be written 2.725000e+002
怎么回事?
为什么输出结果错了?
但是我把程序中的
long double dip=5.32e-5;
改成
double dip=5.32e-5;
输出结果就正确了。望高手解答。
收到的鲜花
  • 广陵绝唱2008-12-15 02:26 送鲜花  49朵   附言:这个问题很特殊。
搜索更多相关主题的帖子: double long 
2008-12-14 22:25
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
帮您在网上查了一下,没查出个所以然来,一同等待高手来解决。

    网上一般的都说这两者精度随编译器的不同而不同,也有一部分说这两者基本没什么区别。不过你这个程序中确实出现了那样的问题,而且我把 %f 改为 %lf 也没有解决。
2008-12-15 02:25
福尔摩斯
Rank: 5Rank: 5
等 级:贵宾
威 望:12
帖 子:4011
专家分:370
注 册:2006-8-15
收藏
得分:0 
C Primer Plus 第五版是使用C99来编写的

其中有些头文件和关键字的添加对于一些比较老版本的编译器是认不到的

[[it] 本帖最后由 福尔摩斯 于 2008-12-15 13:31 编辑 [/it]]

自我放逐。。。
2008-12-15 13:28
zqy110007
Rank: 3Rank: 3
来 自:外太空
等 级:论坛游民
威 望:6
帖 子:1493
专家分:82
注 册:2008-11-19
收藏
得分:0 
那头文件应该是什么呢?

每个人都是蛤蟆,只是井的大小不同罢了.
沙石下的泉水,挖得越深,泉水越清.
2008-12-15 13:38
快速回复:C99 long double 的一个问题。。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015635 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved