Ciao a tutti ragazzi ho messo algoritmo, perchè ho realizzato il prodotto in C, ma di fatto ho un problema nel risultato che penso sia dovuto nell'aver compreso male l'algoritmo, quindi vi illusro quello che ho capito e dove ho il problema, nella speranza che qualcuno mi possa dare una mano grazie =)
Sto lavorando al proddotto float in point double a 64bit, ma di fatto a 32 se ho capito bene cambierebbe poco se no dimensione dei registri e bias,
ho due numeri dove identifico tre parti [segno, esponente, mantissa]
il numero C dato da A * B = [a.segno Xor B.segno, A.esponente + B.esponente - 1023, prodotto delle mantisse (considerando l'uno nascosto)]
Ora nella documentazione dice di fare la normalizzazione se è necessario (e non capisco proprio cosa intende se è necessario e per normalizzazione) e in tal caso somma 1 all'esponente. Ora per normalizzazione io ho capito che deve essere 1, ... qualcosa ma considerando che ai due numeri delle mantisse A e B io aggiungo 1, mantissa A e 1, mantissaB questo implica che il prodotto avrà sempre due numeri prima della virgola, e allora non diventa più se è necessario ma devo sempre fare +1 all'esponente?
Ora io ho escluso il +1 e ho provato a simulare il mio programma e volevo porvi due prodotti dove uno riesce il risultato corretto e l'altro appunto manca un uno all'esponente, ma questo già dimostra che non si deve fare sempre questa cosa, qualcuno può chiarirmi le idee =) ? grazie
A= 5; B = 4;
numeri in binario
0 10000000001 01000000000000000000000000000000000000000000000000 00
0 10000000001 00000000000000000000000000000000000000000000000000 00
esponente = 10000000011
Prodotto tra 1.01 x 1.0 = 101 => rimuovo l'uno nascosto =>
risultato: 0 10000000011 01000000000000000000000000000000000000000000000000 00
A = 13 B = 3
0 10000000010 10100000000000000000000000000000000000000000000000 00
0 10000000000 10000000000000000000000000000000000000000000000000 00
exp = 10000000011
prodotto tra 1.101 x 1.1 = 100111
A questo punto faccio lo stesso pure qui => levo 1 e avrei
0 10000000011 00111000000000000000000000000000000000000000000000 00
mentre se faccio il binario di 39 vedo che la parte della mantissa è uguale ma l'esponente mi manca 1
Qualcuno gentilmente potrebbe illuminarmi su dove sbaglio ? Ho già cercato in rete e analizzato vari algoritmi ma sinceramente non capisco ..