Questa è una domanda molto semplice, ma importante poiché influisce enormemente su tutto il mio progetto.Troncare un doppio in un float in C
Supponiamo che io ho il seguente codice snipet:
unsigned int x = 0xffffffff;
float f = (float)((double)x * (double)2.328306436538696e-010); // x/2^32
Mi aspetterei che f
essere qualcosa di simile a 0,99999, ma, invece, si arrotonda a 1, dal momento che è la più vicina float
approssimazione. Non va bene dato che ho bisogno dei valori di float
nell'intervallo di [0,1), non di [0,1]. Sono sicuro che sia qualcosa di semplice, ma apprezzerei un po 'di aiuto.
Questa non è una risposta utile. Come hanno mostrato altre risposte (e hanno mostrato come), ci sono cose che puoi fare. –
@EricPostpischil, come non è utile? Fornisce una soluzione operativa al problema, senza lasciare una modalità di arrotondamento in vigore che cambierà tutti i calcoli intermedi e successivi. –
L'affermazione "Non c'è molto che puoi fare" è fuorviante e inutilmente scoraggiante. L'affermazione sui bit in un 'int' e a' float' è irrilevante; l'OP non si aspetta una mappa esatta. Non chiedono di evitare l'arrotondamento, ma solo di controllarlo. –