| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5112 人关注过本帖
标题:double与long long占用同样的字节,输出结果不同
只看楼主 加入收藏
C基础
Rank: 6Rank: 6
等 级:侠之大者
威 望:6
帖 子:133
专家分:421
注 册:2018-10-15
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:13 
double与long long占用同样的字节,输出结果不同
#include "stdio.h"
int main()
{
    double sum=0,multiply=1;
    int n;
    for(n=1;n<=20;n++)
    {
        multiply*=n;
        sum+=multiply;
    }
    printf("%e\n",sum);
return 0;
}
 这个程序是没有问题的,可以运行的,但是我不明白的就是我这个编程软件里面的double和long long型都是占用八个字节,但是用double和long long输出的结果不一样,我用的是DEVC++5.6.2;哪位可以帮我解释一些嘛?Thank you!
搜索更多相关主题的帖子: double long 字节 输出 结果 
2019-04-14 22:29
豆豆的滴
Rank: 9Rank: 9Rank: 9
来 自:湖南
等 级:贵宾
威 望:33
帖 子:368
专家分:1087
注 册:2018-5-7
收藏
得分:4 
数据类型不同?

[此贴子已经被作者于2019-4-14 23:29编辑过]

2019-04-14 23:23
C基础
Rank: 6Rank: 6
等 级:侠之大者
威 望:6
帖 子:133
专家分:421
注 册:2018-10-15
收藏
得分:0 
不是,最后求出来的值不同,把sum和multiply定义成double,double是八个字节,可以防止溢出,但是我不明白的就是long long也是八个字节,为什么结果就不一样了
2019-04-15 07:17
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:4 
double有效位只有52位,剩余位数用于符号位和指数位,大概能精确表示16位十进制数,20的阶乘需要19位十进制数表示出来,double就无法精确表示了。

能编个毛线衣吗?
2019-04-15 08:02
C基础
Rank: 6Rank: 6
等 级:侠之大者
威 望:6
帖 子:133
专家分:421
注 册:2018-10-15
收藏
得分:0 
可能是我的问题描述问题吧,不好意思哈,我不明白的就是为什么这两个程序的输出结果是不一样的,第一个程序和第二个程序中只有红色部分的区别,结果我都是用科学计数法输出的,并且在我的这个编译器上的sizeof(double)和sizeof(long long)是相等的,都是八个字节。
不追求明确的说法, 只想听听各位的看法。Thank you!
#include "stdio.h"
int main()
{
    double sum=0,multiply=1;
    int n;
    for(n=1;n<=20;n++)
    {
        multiply*=n;
        sum+=multiply;
    }
    printf("%e\n",sum);
return 0;
}
2.561327e+018

--------------------------------
Process exited with return value 0
Press any key to continue . . .

……………………………………………………………………


#include "stdio.h"
int main()
{
    long long sum=0,multiply=1;
    int n;
    for(n=1;n<=20;n++)
    {
        multiply*=n;
        sum+=multiply;
    }
    printf("%e\n",sum);
return 0;
}

1.858381e-137

--------------------------------
Process exited with return value 0
Press any key to continue . . .



2019-04-15 11:30
lxk1732942
Rank: 6Rank: 6
等 级:侠之大者
威 望:7
帖 子:450
专家分:425
注 册:2018-9-4
收藏
得分:4 
4楼已经说得很清楚了
2019-04-15 12:21
lihuahao哈
Rank: 2
等 级:论坛游民
威 望:1
帖 子:27
专家分:39
注 册:2018-11-17
收藏
得分:4 
可能是精度问题,把数据弄小一点试试

不懂就问,我也想变强!
2019-04-15 12:23
C基础
Rank: 6Rank: 6
等 级:侠之大者
威 望:6
帖 子:133
专家分:421
注 册:2018-10-15
收藏
得分:0 
回复 6楼 lxk1732942
你看了我的问题没,就说四楼说的很清楚了,
2019-04-15 13:33
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
5楼代码对long long输出格式错误,应试“printf("%lld\n",sum);”

能编个毛线衣吗?
2019-04-15 14:57
C基础
Rank: 6Rank: 6
等 级:侠之大者
威 望:6
帖 子:133
专家分:421
注 册:2018-10-15
收藏
得分:0 
回复 9楼 wmf2014
哎,说不定哦,我晚上试试,谢谢
2019-04-15 15:03
快速回复:double与long long占用同样的字节,输出结果不同
数据加载中...
 
   



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

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