| 网站首页 | 业界新闻 | 小组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
买学问 - 大牛一对一辅导,有问必答买学问 - 专业的付费知识问答平台
共有 370 人关注过本帖
标题:double与long long占用同样的字节,输出结果不同
只看楼主 加入收藏
C基础
Rank: 6Rank: 6
等 级:侠之大者
威 望:6
帖 子:130
专家分:416
注 册: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!
2019-04-14 22:29
豆豆的滴
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:30
帖 子:358
专家分:1018
注 册:2018-5-7
  得分:4 
数据类型不同?

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

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

能编个毛线衣吗?
2019-04-15 08:02
C基础
Rank: 6Rank: 6
等 级:侠之大者
威 望:6
帖 子:130
专家分:416
注 册: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
等 级:侠之大者
威 望:5
帖 子:426
专家分:422
注 册:2018-9-4
  得分:4 
4楼已经说得很清楚了
2019-04-15 12:21
lihuahao哈
Rank: 2
等 级:论坛游民
威 望:1
帖 子:22
专家分:39
注 册:2018-11-17
  得分:4 
可能是精度问题,把数据弄小一点试试

学习编程有没有用,你不学怎么知道呢?
2019-04-15 12:23
C基础
Rank: 6Rank: 6
等 级:侠之大者
威 望:6
帖 子:130
专家分:416
注 册:2018-10-15
  得分:0 
回复 6楼 lxk1732942
你看了我的问题没,就说四楼说的很清楚了,
2019-04-15 13:33
wmf2014
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:175
帖 子:1774
专家分:9980
注 册:2014-12-6
  得分:0 
5楼代码对long long输出格式错误,应试“printf("%lld\n",sum);”

能编个毛线衣吗?
2019-04-15 14:57
C基础
Rank: 6Rank: 6
等 级:侠之大者
威 望:6
帖 子:130
专家分:416
注 册:2018-10-15
  得分:0 
回复 9楼 wmf2014
哎,说不定哦,我晚上试试,谢谢
2019-04-15 15:03







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

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