| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1018 人关注过本帖
标题:输出结果的分析
只看楼主 加入收藏
qishi123
Rank: 1
等 级:新手上路
帖 子:78
专家分:9
注 册:2012-9-5
结帖率:78.57%
收藏
已结贴  问题点数:20 回复次数:32 
输出结果的分析
#include<stdio.h>
void main()
{
    double f,g;
    long m,n;
    unsigned int p,q;
    f=3175.890232;g=0.123456789;
    m=50000;n=-60000;
    p=32768;q=40000;
    printf("f=%15.6f,g=%15.12f\nm=%d,n=%ld\np=%u,q=%u\n",f,q,m,n,p,q);
}
对于这个程序来说,我搞不清它的结果是怎样的,求高人指点。
搜索更多相关主题的帖子: double 
2012-10-04 22:14
qishi123
Rank: 1
等 级:新手上路
帖 子:78
专家分:9
注 册:2012-9-5
收藏
得分:0 
第一个f的结果我知道,可以分析出来,剩下的想了1个多小时也不会
2012-10-04 22:26
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
1.上机才是最好的老师;
2.你抱着那么老旧的教材都不知道学的什么。

授人以渔,不授人以鱼。
2012-10-04 22:29
w823352417
Rank: 3Rank: 3
来 自:甘肃兰州
等 级:论坛游侠
威 望:1
帖 子:43
专家分:113
注 册:2012-10-4
收藏
得分:0 
    printf("f=%15.6f,g=%15.12f\nm=%d,n=%ld\np=%u,q=%u\n",f,q,m,n,p,q);
改为printf("f=%15.6f,g=%15.12f\nm=%d,n=%ld\np=%u,q=%u\n",f,g,m,n,p,q);
你的第二个数据错了是g不是q

在代码中享受乐趣
2012-10-04 22:40
qishi123
Rank: 1
等 级:新手上路
帖 子:78
专家分:9
注 册:2012-9-5
收藏
得分:0 
回复 3楼 TonyDeng
版主,这道题是我在一本书上看到的,让分析结果,我上机运行了,结果出乎意料,楼上的说是第二个是g不是q,你觉得呢?如果是g的话,那分析这道题的结果岂不是没意义了?求版主高见。
2012-10-04 22:45
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
出乎你什么意料了?double的有效位数在15位以内,g值的有效位数不超出这个范围。

授人以渔,不授人以鱼。
2012-10-04 22:57
qishi123
Rank: 1
等 级:新手上路
帖 子:78
专家分:9
注 册:2012-9-5
收藏
得分:0 
回复 6楼 TonyDeng
g的值是0.000000000000
2012-10-04 23:16
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
在你机器上输出sizeof(double)看是多少?

授人以渔,不授人以鱼。
2012-10-04 23:20
w823352417
Rank: 3Rank: 3
来 自:甘肃兰州
等 级:论坛游侠
威 望:1
帖 子:43
专家分:113
注 册:2012-10-4
收藏
得分:0 
printf("f=%15.6f,g=%15.12f\nm=%d,n=%ld\np=%u,q=%u\n",f,q,m,n,p,q);
这样你会惊奇的发现g后面的数都错了位,n,p,q,向前都错了一位。最后,q的没有了,只能是0;
现在问题出在q,m。感觉这两个值好像合并了?
现在换成f,12345678901,m,(一个11位的数)发现结果正常。
再换成f,1234567890,m,(10位)又变回去了!
现在把g=%15.12f换成g=%f,发现上诉两种结果一样。
再看一个例子:    printf("%f,%d\n",9,12);结果是异常。两个都是0;将9换成10位以上的数字,又正常。
所以我认为一个非浮点数用浮点数的方法输出时不能转化,如果该非浮点数小于10位,系统会默认提取下一位(即该非浮点数右边逗号右边的一个数)。

在代码中享受乐趣
2012-10-04 23:28
qishi123
Rank: 1
等 级:新手上路
帖 子:78
专家分:9
注 册:2012-9-5
收藏
得分:0 
回复 8楼 TonyDeng
结果得不到,我用的是C++6.0。
2012-10-04 23:35
快速回复:输出结果的分析
数据加载中...
 
   



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

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