Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510

    [C]Puntatore a uint32_t per cambiare il valore di un float

    Ho bisogno di manipolare direttamente la bitmask di un float.Per cui sapendo che i float in genere hanno 32 bit (mi interessano quelli a singola precisione), sto provando ad ottenere e a cambiare il valore di un float bit per bit.
    Però mi sono accorto che deferenziando il puntatore la modifica non ha effetto.
    Ecco un esempio di cosa faccio:

    codice:
        float value=0.0;
        uint32_t* ptr;
        ptr=(uint32_t*)&value;
        *ptr=4;
        printf("%f",value);
    Sorprendentemente mi stampa 0.Invece dovrebbe stampare il valore che ha un float a singola precisione che ha il terzo bit della mentissa meno significativo a 1 (va vicino a zero).
    Ho pensato che il problema era un arrotondamento, ma non funziona neanche con valori più grandi.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    printf("%g",value);
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    Si però il problema non è solo stampare il float, è anche utilizzare il float per passarlo a funzioni di altri framework, che trattano quel float in una maniera che non posso decidere.
    Per cui io ho usato int32_t sapendo che sulla mia macchina il float è a 32 bit.
    Io non capisco perché se stampato con %g stampa il suo valore reale, mi serve un modo per cambiare il valore del float che sia indipendente.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Ma il float è cambiato ... è solo un problema di visualizzazione della printf perché il valore è troppo piccolo e la notazione scientifica è il modo opportuno per vederlo ... se preferisci

    printf("%.50f",value);
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    Ecco cosa mi sfuggiva, mi pareva assurdo.Grazie.

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.