OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5055|回复: 4

关于计算过程中产生的溢出,但结果不溢出。会不会丢失数据?

[复制链接]

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2014-11-15 16:07:47 | 显示全部楼层 |阅读模式
5金钱
u16  a,b,c;
a = 20000;
b = 30000;
c = a * b / 10000;

结果为60000,不溢出,但计算过程中的a*b超出太多。

那么结果会不会有可能丢失数据?
测试是不丢失,能不能说明这样的计算都是正确的?
有没有哪里资料有讲,求理论支持。

小小蜗牛
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2014-11-15 16:36:57 | 显示全部楼层
中间计算的溢出与否应该和中间结果对应的寄存器有关,是否丢失数据看你的数据是否超过了这个寄存器的表示值,这个应该是汇编。----------个人感觉,仅供参考。
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
 楼主| 发表于 2014-11-15 16:43:12 | 显示全部楼层
回复【2楼】龙之谷:
---------------------------------
这如何看寄存器位数够不够呢?
小小蜗牛
回复

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2014-11-15 17:14:58 | 显示全部楼层
回复【3楼】jiutianshenjian:
---------------------------------
我也多是猜测,你可以用大数相乘除来测试,具体讲解清楚、有理有据就要等原子哥等大神指导了,我功力不够、、、
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复

使用道具 举报

87

主题

569

帖子

0

精华

高级会员

Rank: 4

积分
831
金钱
831
注册时间
2014-9-30
在线时间
140 小时
发表于 2014-11-15 19:27:18 | 显示全部楼层
搞不好——是 编译器 帮你 优化了的。。
如果 不做优化,乘法运算 溢出是必然的,
后面的结果 肯定不会正确。。。

或许——编译器会自动判断:16位x16位
编译器会自动 拿出一个 32位寄存器 做‘中间存储’!!

 你用 32位大数 再做 这样的 运算 试试 ??
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-29 03:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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