Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    152

    [algoritmo] Prodotto float in point in binario ieee754

    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 ..

  2. #2
    Complimenti! Come spesso accade a Gastone Paperone, Lei è il millesimo fortunato cliente che si becca la doverosa segnalazione di uno dei miei paper preferiti d'ogni tempo: "What every computer scientist should know about floating-point arithmetic".

    Studialo da cima a fondo, e se dopo hai ulteriori dubbi torna qui che ne parliamo senza problemi.
    • Un plauso a Grisha Perelman, raro esempio di genuino anticonformismo umano e scientifico.

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    152
    ma scusa mi prendi in giro ?? mi dai una pagina che non posso nemmeno leggere per poi non rispondere al quesito ? ..

  4. #4
    Calma e gesso, giovanotto. Il fatto che tu non riesca ad accedere al PDF linkato è un problema solo tuo, che nessuno può divinare senza una sfera di cristallo a disposizione. Io vi accedo senza il benché minimo problema. Questa comunque è una versione HTML del medesimo paper. O mi vorresti dire che non conosci l'inglese?

    Quanto al tuo quesito, non ho il tempo di spiegarti i numerosi errori che commetti, a partire dalla mancata conoscenza della normalizzazione. Tutte le risposte sono in un buon libro di calcolo numerico, e in questo caso fortunato si trovano sintetizzate nel paper linkato, il cui studio ti fornirà molto più di quanto ti serve per risolvere questo banale problemino.

    Quindi: ringraziare sentitamente, studiare le novantasei paginette, e ripresentarsi eventualmente per ulteriori dubbi. Soprattutto, ringraziare e mostrare il massimo rispetto per dei professionisti che sottraggono tempo prezioso ad altri mille impegni per fornire risposte sul forum, talora necessariamente sintetiche ma sempre con riferimenti molto ricchi e strumenti utili a risolvere ampie casistiche di problemi.
    Ultima modifica di M.A.W. 1968; 08-11-2014 a 23:11
    • Un plauso a Grisha Perelman, raro esempio di genuino anticonformismo umano e scientifico.

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    152
    veramente il pdf che mi hai mandato io lo vedo censurato ogni riga e coperta da un rettangolo nero. Per tale motivo ho risposto così, ma non era mia intenzione offendere . Comunque posso accedere alla pagina html quindi darò un occhiata li anche se avrei preferito una risposta più diretta, grazie.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.