Ho bisogno di utilizzare un file di testo esistente per memorizzare alcuni valori molto precisi. Quando vengono letti di nuovo, i numeri devono essenzialmente essere esattamente equivalenti a quelli che sono stati originariamente scritti. Ora, una persona normale userebbe un file binario ... per una serie di ragioni, non è possibile in questo caso.il modo migliore per generare una doppia precisione completa in un file di testo
Quindi ... qualcuno di voi ha un buon modo di codificare un doppio come una stringa di caratteri (oltre ad aumentare la precisione). Il mio primo pensiero è stato quello di assegnare il doppio a un carattere [] e scrivere i caratteri. Non penso che funzionerà perché alcuni dei personaggi non sono visibili, producono suoni e terminano anche le stringhe ('\ 0' ... Ti sto parlando!)
Pensieri?
[Modifica] - una volta individuata quale delle soluzioni proposte funziona meglio per me, ne contrassegnerò una come "la" soluzione.
Se si vuole essere portatile si può assumere nulla circa la rappresentazione del numero in virgola mobile (non v'è alcuna definizione nella standard del rappresentato). Quindi il ** SOLO ** modo di fare questo portatile è stampare semplicemente il numero con la massima precisione possibile. Ora se vuoi buttare via la portabilità allora puoi avere un formato binario (codificato in Base64 se vuoi). Ma poi perderai precisione quando convertirai nel formato float specifico della piattaforma (a meno che non sia esattamente lo stesso del sistema sorgente). Ma poi non hai guadagnato nulla sulla stampa con precisione assoluta. –
Scrivi i caratteri come testo, cioè converti 'c/16' e' c% 16' in un carattere (0-9 o A-F) e stampali. – user168715
Una cosa da considerare è che il compilatore può assegnare i doppi ai registri della CPU con più di 64 bit di precisione. Quando questi valori vengono scritti in memoria in preparazione della scrittura su disco, verranno troncati a 64 bit. Quindi, anche se si salva il doppio in binario e lo si legge, il valore letto non è garantito == l'originale. – user168715