Oppure

Loading
24/08/18 15:01
comtel
Salve ragazzi, per un esercizio di programmazione in C devo confrontare un numero scritto in forma SEGNO-ESPONENTE-MANTISSA con il suo valore iniziale. Ebbene per quanto riguarda il segno so che è il primo bit più significativo, per cui in un array di 32 elementi (quali i bit del numero floating-point), esso è bit[0], cosi come anche per l'esponente è facile risalire al numero dalla sequenza di bit. Quello che non mi spiego, e che mi ha mostrato un collega in pratica è questa funzione che calcola invece la mantissa:

float Calc_Esp(char array[], int inizio, int fine) {
    int i;
    float numero=0.0f,peso=1.0f;
    for (i=inizio; i<=fine;i ++) {
        if(array[i]=='1')
        numero = numero+peso;
        peso = peso/2;
    }

    return numero;
}


Perchè il peso ad ogni passo viene diviso per 2 ?
Ultima modifica effettuata da comtel 24/08/18 15:09
aaa
24/08/18 18:38
nessuno
Semplicemente perché ogni bit pesa la metà del precedente. Però mi sa che state sbagliando qualcosa perché il bit 0 dovrebbe essere il meno significativo e non il contrario. Poi nel valore normalizzato per la mantissa il valore 1, è implicito e il segno non è in bit 0 ma nel più signigicativo

E infine, perché la funzione si chiama Calc_Esp se la usi per la mantissa?
Ultima modifica effettuata da nessuno 24/08/18 18:51
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
25/08/18 9:43
comtel
Postato originariamente da nessuno:

Semplicemente perché ogni bit pesa la metà del precedente. Però mi sa che state sbagliando qualcosa perché il bit 0 dovrebbe essere il meno significativo e non il contrario. Poi nel valore normalizzato per la mantissa il valore 1, è implicito e il segno non è in bit 0 ma nel più signigicativo

E infine, perché la funzione si chiama Calc_Esp se la usi per la mantissa?


Innanzitutto ti ringrazio per la risposta.
Dal punto di vista del codice l'array bit di char viene riempito da sinistra verso destra, per cui bit[0] dovrebbe essere il bit più significativo. Il nome della funzione non l'ho dato io, ma un mio collega, che mi ha mostrato il suo codice (ci aiutiamo a vicenda in pratica).
aaa
25/08/18 17:20
TheDarkJuster
Bit0 è il segno, poi un uno (costante) è sottinteso, poi c'è la mantissa e l'esponente è eccesso 127.

Chiamare fa funzione di conversione mantissa conversione esponente non è d'aiuto...
aaa
26/08/18 10:02
comtel
Postato originariamente da TheDarkJuster:

Bit0 è il segno, poi un uno (costante) è sottinteso, poi c'è la mantissa e l'esponente è eccesso 127.

Chiamare fa funzione di conversione mantissa conversione esponente non è d'aiuto...


Grazie mille per la risposta. Si, in effetti il nome della funzione è fuorviante..
aaa
26/08/18 10:25
nessuno
Bit 0 non è il segno state facendo confusione. Rispettate lo standard
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
26/08/18 10:26
nessuno
...
Ultima modifica effettuata da nessuno 26/08/18 10:28
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
26/08/18 11:22
comtel
Postato originariamente da nessuno:

Bit 0 non è il segno state facendo confusione. Rispettate lo standard


Lo so, la notazione non è quella standard, però è un esercizio basilare. Dal punto di vista della teoria è abbastanza chiara la cosa (per me).
aaa