乘积超过2的32次方该如何处理?
我的程序是这样的:accel_lim = ((long)step*decel) / (accel+decel);由于step和decel比较大,所以他们的乘积可能超过2的32次方-1,但是除以(accel+decel)后肯定是小于2的32次方的,为什么我算出来的结果是错误的。你交换一下计算顺序,accel_lim = ((long)step) / (accel+decel)*decel。
如果结果会出现超过32bit的数,那就只有老实按照两个32bit字节存储计算。 数据溢出了 用int64吧。。。 帮顶吧 先除后乘,二楼正解 mlxy123xy 发表于 2015-8-25 23:10
你交换一下计算顺序,accel_lim = ((long)step) / (accel+decel)*decel。
如果结果会出现超过32bit的数,那 ...
这样会丢精度。 JackieLaura 发表于 2015-8-26 09:13
先除后乘,二楼正解
会丢精度的。 本帖最后由 yanhaijian 于 2015-8-26 10:28 编辑
党国特派员 发表于 2015-8-26 08:14
用int64吧。。。
KEIL识别不了这个关键字。应该是__int64。 long long类型的支持。
页:
[1]
2