Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Conversione SEGNO-ESPONENTE-MANTISSA in FLOAT
Forum - C/C++ - Conversione SEGNO-ESPONENTE-MANTISSA in FLOAT

Avatar
comtel (Member)
Pro


Messaggi: 145
Iscritto: 08/04/2011

Segnala al moderatore
Postato alle 17:01
Venerdì, 24/08/2018
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:

Codice sorgente - presumibilmente C++

  1. float Calc_Esp(char array[], int inizio, int fine) {
  2.     int i;
  3.     float numero=0.0f,peso=1.0f;
  4.     for (i=inizio; i<=fine;i ++) {
  5.         if(array[i]=='1')
  6.         numero = numero+peso;
  7.         peso = peso/2;
  8.     }
  9.  
  10.     return numero;
  11. }



Perchè il peso ad ogni passo viene diviso per 2 ?

Ultima modifica effettuata da comtel il 24/08/2018 alle 17:09
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 20:38
Venerdì, 24/08/2018
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 il 24/08/2018 alle 20: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à.
PM Quote
Avatar
comtel (Member)
Pro


Messaggi: 145
Iscritto: 08/04/2011

Segnala al moderatore
Postato alle 11:43
Sabato, 25/08/2018
Testo quotato

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

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 19:20
Sabato, 25/08/2018
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...

PM Quote
Avatar
comtel (Member)
Pro


Messaggi: 145
Iscritto: 08/04/2011

Segnala al moderatore
Postato alle 12:02
Domenica, 26/08/2018
Testo quotato

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

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 12:25
Domenica, 26/08/2018
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à.
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 12:26
Domenica, 26/08/2018
...

Ultima modifica effettuata da nessuno il 26/08/2018 alle 12: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à.
PM Quote
Avatar
comtel (Member)
Pro


Messaggi: 145
Iscritto: 08/04/2011

Segnala al moderatore
Postato alle 13:22
Domenica, 26/08/2018
Testo quotato

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

PM Quote