La multiplication de deux 32 bits sans l'aide de 64 bits int

Nous font 32 bits * 32 bits de multiplication à l'aide de l'algorithme suivant

Laissez-nous nous souhaitons multiplier un (32 bits) avec b (32 bits), tous deux signés,

a = ah * 2^16 + al [ah - Plus de 16 bits, al - 16 bits de poids faible]

b = bh * 2^16 + bl [bh - Plus de 16 bits, bl - 16 bits de poids faible]

Nous sommes en mesure de faire

Résultat = (al * bl) + (((ah * bl) + (al * bh)) * 2^16) + ((ah * bh) * 2 ^ 32) ~~~


Ma question,

Est leur meilleure façon de le faire?

Sur quel processeur? Sur x86 par exemple, lorsque vous avez plusieurs deux 32 bits, la haute 32 bits du résultat est stocké dans EDX, tandis que la basse bits sont dans EAX. Similaire avec 16 bits.
Nous avons besoin de concevoir c'est pour un processeur 32 bits, et le processeur peut être quelque chose comme ARM, MIPS, ou basées sur le client ...
Utilisation int64_t et laisser le compilateur générateur de code inquiéter sur la façon de la mettre en œuvre. Vous avez seulement besoin de faire quelque chose à la main si la codegen est pauvre, ce qui est rare pour un cas simple.

OriginalL'auteur Alphaneo | 2009-08-31