La risposta per C++ è qui: How to check if C++ compiler uses IEEE 754 floating point standard
Per C, allegato F della corrente C standard specifica che il preprocessore costante __STDC_IEC_559__
sarà pre-definito per il valore 1
se la piattaforma è conforme alle specifiche IEEE 754 per aritmetica in virgola mobile. Ma i compilatori C meno recenti potrebbero non pre-definirlo anche se i float sono effettivamente IEEE 754.
Tuttavia, questo non è sufficiente per entrambe le lingue: questa conformità garantisce solo la semantica di IEEE 754, non la rappresentazione binaria, e dal momento che sei scaricando la rappresentazione binaria in un file, è necessario anche gestire il problema dell'endianness. Diventa ancora più complicato in quanto l'endianità degli interi può differire dall'endianità per i float.
Alla fine, è molto meglio utilizzare una rappresentazione testuale per memorizzare i valori in virgola mobile se si desidera ottenere la portabilità tra varie piattaforme, presenti e futuri. Ovviamente, dovrai usare la massima precisione per questa rappresentazione.
Un'altra soluzione è fornita da http://hdfgroup.org che gestisce questo problema in modo efficiente per grandi quantità di dati.
A meno che i set di dati non siano enormi, prendere in considerazione la possibilità di archiviare i dati come testo - molto più utile, portatile e compatibile con le versioni precedenti. –
Prima di tutto: è un problema in C o C++? Le soluzioni sono diverse. – LPs
In teoria c'è '__STDC_IEC_559__' da verificare, ma in pratica quasi nessun compilatore che io conosca lo definisce; Mi accontenterei di controllare la rappresentazione binaria di un caso ad angolo di coppia. Comunque, più che non avere IEEE754 (che è relativamente raro) vorrei ricontrollare l'endianness. –