鱼C论坛

 找回密码
 立即注册
查看: 1977|回复: 4

[已解决]结果的原因

[复制链接]
发表于 2020-5-5 20:32:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>

int main()
{
        int a,c;
        double b;
        printf("请输入两个手济号:\n");
       
        scanf("%d %f",&a,&b);
       
        printf("两号之和为 %d ",a+b);
        return 0;
}
输入18812345678 和15687654321
结果为1400897536
原因!
最佳答案
2020-5-6 10:02:13
原因有很多:%d溢出问题导致的数据损失,%f存储精度损失,%d转为%f是的转换精度损失,大数和小数相加的精度损失

18812345678存放到%d中得到的是1632476494,这是溢出导致的精度损失。18812345678转为16进制结果如下:4614D9D4E,因超过了32位,会被截断,剩下614D9D4E,结果就是1632476494

15687654321以%f存储,会有精度损失,有效位数只有8位,得到的结果是15687654400,前8位是精确的,后三位是不精确的。

a+b的时候是浮点数与整型数相加,会先将整型数转为浮点数,1632476494转为浮点数有精度损失,得到的是1632476544

还有两个浮点数阶码不一样,相加减的时候会先进行对阶,转为相同的阶码,再运算。这里也会有精度损失。

这就导致了最后的结果有很大的差异,我这里得到的是:1350634375

注意:红色标出的部分,在不同的电脑上结果会不一样,甚至每次运行可能都不一样。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-5 20:35:11 | 显示全部楼层
数据溢出??
没怎么学过C
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-5 20:36:14 | 显示全部楼层
int范围太小了,改大一点就好:
#include<stdio.h>

int main()
{
        long long int a,b,c;
        printf("请输入两个手济号:\n");
       
        scanf("%lld %lld",&a,&b);
               c = a+b;
        printf("两号之和为 %lld ",c);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-5 22:57:39 | 显示全部楼层
这个我也知道数据太小,溢出。但我们老师问我们为什么结果是这样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-6 10:02:13 | 显示全部楼层    本楼为最佳答案   
原因有很多:%d溢出问题导致的数据损失,%f存储精度损失,%d转为%f是的转换精度损失,大数和小数相加的精度损失

18812345678存放到%d中得到的是1632476494,这是溢出导致的精度损失。18812345678转为16进制结果如下:4614D9D4E,因超过了32位,会被截断,剩下614D9D4E,结果就是1632476494

15687654321以%f存储,会有精度损失,有效位数只有8位,得到的结果是15687654400,前8位是精确的,后三位是不精确的。

a+b的时候是浮点数与整型数相加,会先将整型数转为浮点数,1632476494转为浮点数有精度损失,得到的是1632476544

还有两个浮点数阶码不一样,相加减的时候会先进行对阶,转为相同的阶码,再运算。这里也会有精度损失。

这就导致了最后的结果有很大的差异,我这里得到的是:1350634375

注意:红色标出的部分,在不同的电脑上结果会不一样,甚至每次运行可能都不一样。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-11 19:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表