请教大神:ARM的32位乘法溢出如何解决

2019-12-24 18:39发布

        uint32_t   e,d,y,x;
        x=0xffffffff;y=100;
           e=(x/1000)*y;
        d=(x*y)/1000;
仿真结果e和d的结果不相同。应是x*y溢出32位所致,请教如何解决!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
20条回答
takashiki
1楼-- · 2019-12-25 16:44
hefeizdl 发表于 2017-8-26 11:37
”e=(x/1000)*y;“这个是避免溢出现象的写法。

一步到位,你直接除0x100000000ull吧,更能避免溢出
你这种是丧失精度带来误差的好方法。
eleqian
2楼-- · 2019-12-25 20:00
 精彩回答 2  元偷偷看……
mo_fish
3楼-- · 2019-12-26 01:28
(1500/1000)*2 = 1*2 = 2
(1500*2)/1000 = 3000/1000 = 3
这能一样吗
huangqi412
4楼-- · 2019-12-26 05:43
ARM 本身就32位,不是极度压榨时间,大胆用64吧。
jackman
5楼-- · 2019-12-26 09:05
解决办法就是充分考虑到溢出的情况,或者防止溢出。没有什么值得讨论的
McuPlayer
6楼-- · 2019-12-26 09:56
64bit,浮点数,都是解决方案

一周热门 更多>