View Single Post
Old 07-04-2006, 15:12   #8
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Cittā: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
http://www.codeproject.com/cpp/MulDiv64.asp

Comunque in linea di principio l'algoritmo per la moltiplicazione č facile... Basta suddividere gli operandi a 64 in "cifre" a 32 bit ed usare l'algoritmo per la moltiplicazione che si usa quando si fanno i conti a mano...

I risultati intermedi li metti in interi a 64 bit e poi li sommi... Ovviamente devi stare attento agli overflow...

Ad esempio:

A1 A2 *
B1 B2 =
______

Il risultato a 128 bit sarebbe: [A2*B2 + [(A1*B2) << 32]] + [A2*B1 + [(A1*B1) << 32] << 32

Quindi si capisce che il risultato su 64 bit č: A2*B2 + [(A1*B2 + A2*B1) << 32]...
Ovviamente a patto che A1*B2 e A2*B1 stiano su 32 bit...questo lo verifichi facilmente memorizzandoli su 64 bit...e testando che sia singolarmente che la loro somma sia inferiore di 2^32...
cionci č offline   Rispondi citando il messaggio o parte di esso