在不使用64位int的情况下将两个32位数相乘

Alp*_*neo 2 algorithm multiplication 32bit-64bit

我们使用以下算法进行一些32位*32位乘法

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

a =啊*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)~~~


我的问题,

他们有更好的方法吗?

Ala*_*lan 7

在任何主流编译器中,32位平台上的64位整数仿真与自己进行多步数学一样有效.但它会更加可靠地纠正.

当使用大到足以溢出的值进行简单算术时,即使是我见过的最高度调整的数学库也只使用int64.