Visualizzazione dei risultati da 1 a 1 su 1
  1. #1
    Utente di HTML.it L'avatar di tonyzz
    Registrato dal
    Sep 2006
    Messaggi
    82

    Problema conversione C++ da unsigned short a float

    Ciao a tutti,
    ho una conoscenza veramente basica di C++, e l'altro giorno, ad una job interview, mi è stato chiesto di risolvere un problema in questo linguaggio (uso solo ADA a lavoro e purtroppo non sono un informatico), che però non ho capito e quindi mi è rimasto il dubbio.
    Ho chiesto all'intervistatore di girarmi il pdf, che ho allegato qui, con la descrizione della word da convertire in float, perchè vorrei porvi i miei dubbi e chiedere una mano nella risoluzione postuma.

    Il problema può essere posto all'incirca così, se ricordo bene le parole dell'intervistatore:

    "On this pages, a "high SNR" number format is described.
    Please write a converter function in C/C++ that take an unsigned short as input (in the format described) and returns a float."

    Il formato è costituito da 11 bit per la mantissa (da 0 a 10), uno per il segno (bit 11) e 4 bit per l'esponent (da 12 a 15)

    Ecco, il primo ostacolo è che non capisco come funziona questo formato, perchè dice che per ottenere la decodifica devo prendere, nel caso di esponente non nullo 13 bit (mantissa più davanti 01 o 10) e moltiplicarli per 2**(esponente-25); se l'esponente è nullo, trattarlo come intero 12 bit con segno + mantissa e moltiplicarlo per 2**-24.

    Quindi per convertire in float dovrei prima calcolare il valore della word "high SNR" tramite la discriminante dell'esponente e poi metterlo su 32 bit?
    Il problema è che non capisco come viene formato il numero.

    Es. mettimano che la word sia popolata come:

    1000 1 10100000000

    Che numero dovrei ottenere?
    Da come suggerisce nella codifica, sembrerebbe:

    l'esponente non è zero, quindi sono nel primo caso, quindi ho

    - l'intero 13 bit (S è 1, negativo) 10 10100000000
    - l'esponente 1000

    Convertendo l'intero 13 bit in complemento a due (tolgo uno e inverto i bit), dovrei ottenere: -0101100000000 = -2816

    Secondo l'algoritmo dovrei decodificare come: (intero 13 bit) * 2**(exp -25),
    quindi -2816* 2**(8-25) = -0,021484375

    A me sembra un valore senza senso, quindi penso di sbagliare qualcosa nel ragionamento.

    Il secondo massaggio sarebbe poi rendere il numero ottenuto in float (che io ho inteso come float standard 754 a 32 bit, quindi con 8 bit per esponente e 23 per la mantissa.

    Altra cosa: come potrei strutturare in C++ la word "High-SNR" da dare in ingresso alla funzione, così da poter estrarre i 3 campi con lo shift dei bit?


    Grazie mille per l'aiuto,
    Anto
    File allegati File allegati
    Ultima modifica di tonyzz; 04-12-2015 a 10:16

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.