Stranezza conversione float/uint

di
Anonimizzato16018
il
4 risposte

Stranezza conversione float/uint

Ciao a tutti, vi scrivo riguardo una stranezza in fase di debug che ho notato nel passaggio da float a uint:

a = (UINT16)( 100.0F * 2.55F)

Risultato 254 e non 255. Perchè?

Ho provato a studiarmi come avviene la conversione int/float e viceversa ma non riesco a capire dove si possa perdere di precisione in questo passaggio. Potete aiutarmi?

4 Risposte

  • Re: Stranezza conversione float/uint

    Il problema è nella rappresentazione binaria di alcuni numeri.
    Ad esempio, 2.55 viene rappresentato come +2.5499999523162841e+0002

    Puoi fare delle correzioni aggiungendo un piccolo valore come

    a = (UINT16)( 100.0f * 2.55f + 0.05f)
  • Re: Stranezza conversione float/uint

    Perfetto, ma come mai 2.55 viene rappresentato come 2.5499999523162841? Scusa ma voglio capire come ragiona
  • Re: Stranezza conversione float/uint

    Perché 2.55 è un valore non perfettamente rappresentabile in binario con il numero di bit a disposizione del sistema.

    Per dettagli leggi

    http://it.wikipedia.org/wiki/Numero_in_virgola_mobil

    Anche in decimale esistono valori simili ... ad esempio 1/3 è un valore che non puoi rappresentare in decimale ...
  • Re: Stranezza conversione float/uint

    Grazie mille ho capito
Devi accedere o registrarti per scrivere nel forum
4 risposte