一尘不染

不使用64位整数将两个32位数字相乘

algorithm

我们正在使用以下算法进行一些32bit * 32bit乘法

让我们我们想将a(32位)与b(32位)相乘,两者都带符号,

a = ah * 2 ^ 16 + al [ah-高16位,al-低16位]

b = bh * 2 ^ 16 + bl [bh-高16位,bl-低16位]

我们正在有效地做

结果=(al * bl)+(((ah * bl)+(al * bh)) 2 ^ 16)+((ah * bh) 2 ^ 32)~~~


我的问题,

他们有更好的方法吗?


阅读 403

收藏
2020-07-28

共1个答案

一尘不染

在任何主流编译器中,在32位平台上仿真64位int都将与自己进行多步数学运算一样有效。但是它将更加可靠地正确。

当使用值足以溢出的简单算术进行运算时,即使是我见过的最优化的数学库,也只使用int64。

2020-07-28