STM32/STM8技术论坛
直播中

朱梁贡

7年用户 207经验值
私信 关注
[问答]

请问乘积超过2的32次方怎么处理?

我的程序是这样的:accel_lim = ((long)step*decel) / (accel+decel);由于step和decel比较大,所以他们的乘积可能超过2的32次方-1,但是除以(accel+decel)后肯定是小于2的32次方的,为什么我算出来的结果是错误的。

回帖(11)

张子晶

2019-2-27 08:46:41
你交换一下计算顺序,accel_lim = ((long)step) / (accel+decel)*decel。
如果结果会出现超过32bit的数,那就只有老实按照两个32bit字节存储计算。
举报

任娟娟

2019-2-27 08:56:19
数据溢出了
举报

李刚

2019-2-27 09:16:07
用int64吧。。。
举报

黄敏

2019-2-27 09:32:15
帮顶吧                 
举报

石栓柱

2019-2-27 09:50:17
先除后乘,二楼正解
举报

朱梁贡

2019-2-27 09:56:36
引用: ndrwer 发表于 2019-2-27 13:55
你交换一下计算顺序,accel_lim = ((long)step) / (accel+decel)*decel。
如果结果会出现超过32bit的数,那就只有老实按照两个32bit字节存储计算。

这样会丢精度。
举报

朱梁贡

2019-2-27 10:14:44
引用: Xavier_1995 发表于 2019-2-27 14:59
先除后乘,二楼正解

会丢精度的。
举报

朱梁贡

2019-2-27 10:20:35
引用: 你我然后 发表于 2019-2-27 14:25
用int64吧。。。

本帖最后由 yanhaijian 于 2015-8-26 10:28 编辑

KEIL识别不了这个关键字。应该是__int64。
举报

李悛

2019-2-27 10:36:53
long long类型的支持。
举报

孙婷婷

2019-2-27 10:55:34
受到警告
提示: 作者被禁止或删除 内容自动屏蔽
举报

孙缅禧

2019-2-27 11:07:08
引用: fantasyo老时光 发表于 2019-2-27 15:05
这样会丢精度。

使用浮点数应该没问题的吧
举报

更多回帖

发帖
×
20
完善资料,
赚取积分