你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

乘积超过2的32次方该如何处理?

[复制链接]
yanhaijian 提问时间:2015-8-25 16:39 /
我的程序是这样的:accel_lim = ((long)step*decel) / (accel+decel);由于step和decel比较大,所以他们的乘积可能超过2的32次方-1,但是除以(accel+decel)后肯定是小于2的32次方的,为什么我算出来的结果是错误的。
收藏 评论11 发布时间:2015-8-25 16:39

举报

11个回答
mlxy123xy 回答时间:2015-8-25 23:10:28
你交换一下计算顺序,accel_lim = ((long)step) / (accel+decel)*decel。
如果结果会出现超过32bit的数,那就只有老实按照两个32bit字节存储计算。
风子 回答时间:2015-8-26 00:47:12
数据溢出了
党国特派员 回答时间:2015-8-26 08:14:33
用int64吧。。。
你好我好大家好! 回答时间:2015-8-26 08:57:46
帮顶吧                 
JackieLaura 回答时间:2015-8-26 09:13:15
先除后乘,二楼正解
stmcu.org.png
yanhaijian 回答时间:2015-8-26 10:22:30
mlxy123xy 发表于 2015-8-25 23:10
你交换一下计算顺序,accel_lim = ((long)step) / (accel+decel)*decel。
如果结果会出现超过32bit的数,那 ...

这样会丢精度。
yanhaijian 回答时间:2015-8-26 10:23:03
JackieLaura 发表于 2015-8-26 09:13
先除后乘,二楼正解

会丢精度的。
yanhaijian 回答时间:2015-8-26 10:24:15
本帖最后由 yanhaijian 于 2015-8-26 10:28 编辑

KEIL识别不了这个关键字。应该是__int64。
moyanming2013 回答时间:2015-8-26 10:29:18
long long类型的支持。
废鱼 回答时间:2015-8-26 11:35:24
MDK支持64位的。用64位。
alvin_ 回答时间:2015-8-26 15:26:55

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

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版