Visualizzazione dei risultati da 1 a 2 su 2

Discussione: floating point

  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    112

    floating point

    ragazzi scusate io vorrei saper come si fa a convertire in binario floating piont a 32 bit tramite lo standard IEEE quello che ho capito è che devo prima trasformare
    il numero es: 12,50 in binario quindi
    codice:
    12/2=6 r:0
    6/2=3 r:0
    3/2=1,5 r:1
    1/2=0,5 r:1
    
    12=1100
    
    0,50*2=1 1
    quindi 12,50=1100.1
    dopo la codifica in binario lo standard usa 
    s=segno m=mentissa b=basa e=esponente 
    e so che sono riservati un bit per il segno 8 per l'esponente 23 la mantissa
    dopo come si procede.........?HELP!

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Devi innanzituttto "normalizzare" il numero, cioè scriverlo in maniera tale da avere solo una cifra binaria a sinistra della virgola e tutte le altre a destra. Se in decimale un numero come 145.6 è uguale a 1.456 x 10^2, in binario il numero 1100.1 è uguale a 1.1001 x 2^3.

    Fatto questo, sappiamo che lo standard IEEE 754 riserva 23 bit per la mantissa (24 con l'hidden bit). Visto che 1.1001 ne ha solo 5, dobbiamo aggiungerci gli altri 24-5 = 19, quindi il numero diventerà

    1.10010000000000000000000

    dove 1 prima della virgola può essere omesso (la forma normalizzata sottintende a 1 la parte prima della virgola, quindi è inutile memorizzarla).

    Tutto questo però è moltiplicato per 2^3, quindi l'esponente del numero sarà 3. Visto che il suddetto standard prevede di rappresentare l'esponente in "eccesso k" (rappresentazione "biased", dove k vale 127 per la singola precisione e 1023 per la doppia), allora devvi appunto sommare 127 a 3 e ottieni 130. L'esponente sarà quindi 130, che in BCD (su 8 bit) è

    10000010

    In conclusione, il tuo numero è positivo quindi avrò 0 come bit segno (1 se fosse stato negativo). In definitiva il numero dovrebbe essere

    0 10000010 10010000000000000000000

    In doppia precisione il ragionamento è praticamente lo stesso, solo che i bit della mantissa dovranno essere 56 eequelli dell'esponente 11 (e l'eccesso 1023 anziché 127).

    Ho comunque fatto una verifica con una semplice utility in C che scrissi quando anch'io mi cimentavo con queste cose (se vuoi usarla anche tu per verificare -> http://sprunge.us/CAgG?c - dovrebbe funzionare correttamente) e ottengo lo stesso risultato :)
    every day above ground is a good one

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 © 2024 vBulletin Solutions, Inc. All rights reserved.