Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di autior
    Registrato dal
    May 2010
    Messaggi
    17

    [C] Calcolo del valore di un float.

    Di nuovo salve a tutti.

    La domanda che vorrei porvi è abbastanza tecnica, ma forse qualcuno può aiutarmi: ho creato un programmino che permette l'estrazione dei bit di una variabile float per poi stamparli a video. Non posto il listato perchè il problema non è il programma, che funziona a dovere, ma il fatto che io non riesco a trovarmi con i calcoli.

    Allora: se io inserisco il float 1.25 nel programma, questo mi restituisce la stringa di bit "0 01111111 01000000000000000000000", che corrisponde alla rappresentazione dei floating point secondo il Sistema Aritmetico Standard IEEE 754, cioè tramite l'utilizzo di un bit per il segno, 8 per l'esponente e 23 per la mantissa (i bit sono scritti del + significativo al - significativo, tranne per la mantissa che l'ho stampata al contrario). La formula per il calcolo del valore di un numero normalizzato è la seguente: (-1)^s [l.m] 2^(e-bias) , dove s è il bit del segno, l è il bit implicito dei numeri normalizzati,m è la mantissa,e è l'esponente e il bias è 127 in questo caso.

    Quindi per ricalcolarmi il valore del float che ho inserito inizialmente, partendo da quella stringa di bit, dovrei fare: (-1)^0 [1.2] 2^(127-127) = 1 * 1.2 * 1 = 1.2.

    Dov'è che sbaglio? So che la domanda è un pò tecnica, ma confido nella vostra conoscenza.

  2. #2
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Io dalla conversione ho questo valore binario 00111011111110100000000000000000. Nulla toglie che sto sbagliando
    Per gli Spartani e Sparta usa spartan Il mio github

  3. #3
    Utente di HTML.it L'avatar di autior
    Registrato dal
    May 2010
    Messaggi
    17
    Per sicurezza vi posto il mio listato, ma sono più che sicuro che è corretto, dato che i bit che stampa a video sono gli stessi che ho trovato in diversi esempi:

    codice:
    #include <stdio.h>
    
    void estrai_bit (long , char [32]);
    
    void main() {
        char i, bit[32];
        union single_basic {
            float f;
            long l;
        } a;
    
        printf("PROGRAMMA PER L'ESTRAZIONE DEI BIT DA UN FLOAT");
        printf("\n\nInserire il numero float: ");
        scanf("%f",&a.f);
        estrai_bit (a.l,bit);
        printf("\nFloat = %e",a.f);
        printf("\nLong Hex = %x",a.l);
        printf("\nBit corrispondenti a segno, esponente e mantissa\n");
        printf("%d ",bit[0]);
        for (i = 1; i <= 8; i++) printf("%d",bit[i]);
        printf (" %d",bit[9]);
        for (i = 10; i <= 31; i++) printf("%d",bit[i]);
        puts("\n");
    }
    
    void estrai_bit (long reg, char C[32]) {
        short i;
        for (i = 31; i >= 0; i--) {
            C[i] = (char) (reg & 1);
            reg = reg >> 1;
        }
    }

  4. #4
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Cmq basta cercare su Wikipedia. Ricorda che la base è 2.
    Per gli Spartani e Sparta usa spartan Il mio github

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.