C: Quanto tempo può durare un doppio quando viene stampato tramite printf ()
Domanda
Devo specificare la lunghezza esatta di una stringa da stampare da un doppio valore, ma non voglio limitare l'output più del necessario.
Qual è la lunghezza massima che avrà un doppio di precisione a 6 cifre se formattato da printf ()?
In particolare, quale valore devo dare a X in printf("%X.6lg",doubleValue);
per garantire che nessun valore venga troncato?
Il motivo per cui devo essere specifico sulla lunghezza è che sto definendo un tipo di dati derivato MPI composto da molte rappresentazioni di stringhe di valori doppi e che devo conoscere la loro lunghezza esatta per dividere le regioni del file tra i processi MPI .
Spero sia chiaro. Grazie in anticipo per aver risposto.
Soluzione
usa printf("%.6g", doubleValue)
o printf("%.6Lg", doubleValue)
Notare che tralasciando le cifre iniziali (" larghezza ") nello specificatore di precisione non si richiede la lunghezza della parte integrale del valore.
Notare anche che " l " specificherà che il tuo valore è un int lungo. Il maiuscolo & Quot; L & Quot; specifica un lungo valore doppio.
Nota anche che se non vuoi che questo sia potenzialmente cambiato in notazione scientifica (se è una rappresentazione più breve), allora dovresti usare " f quot; anziché " g " ;.
Vedi a printf reference qui .
Altri suggerimenti
L'esponente massimo di un doppio IEEE è 1023, quindi il doppio più grande sarà 1 + 1/2 + 1/4 + 1/8 + ... etc * 2 ^ 1023. Che avrà una lunghezza di circa 318 caratteri, in notazione decimale.
Perché non usare " e " identificatore di formato?
C'è < float.h > contenente molti valori utili, tra cui DECIMAL_DIG, che è comunque per un long double .
Lo stesso file molto probabilmente ti dirà che un doppio sulla tua piattaforma ha più di 6 cifre di precisione ...
PS: nota anche la risposta di Demi sopra. Indica vari difetti nel tuo printf () che mi sono sfuggiti.