yanhaijian 发表于 2015-8-25 16:39:55

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

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

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

先除后乘,二楼正解

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 编辑

党国特派员 发表于 2015-8-26 08:14
用int64吧。。。
KEIL识别不了这个关键字。应该是__int64。

moyanming2013 发表于 2015-8-26 10:29:18

long long类型的支持。
页: [1] 2
查看完整版本: 乘积超过2的32次方该如何处理?