【发布时间】:2010-11-24 05:40:59
【问题描述】:
我们正在使用以下算法进行一些 32 位 * 32 位乘法
让我们想将 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) ~~~
我的问题,
他们有更好的方法吗?
【问题讨论】:
-
在什么处理器上?例如,在 x86 上,当您将两个 32 位数字相乘时,结果的高 32 位存储在 EDX 中,而低位存储在 EAX 中。与 16 位类似。
-
我们需要为 32 位处理器设计这个,处理器可以是 ARM、MIPS 之类的任何东西……
-
使用 int64_t 并让编译器代码生成器操心如何实现它。如果代码生成很差,你只需要手动做一些事情,这对于这样一个简单的情况是不可能的。
标签: algorithm 32bit-64bit multiplication