Il formato in virgola mobile IEEE 754 è ben definito su tutte le piattaforme? In termini sia di formato bit che di endianness?IEEE 754/iec 559
Sono disposto a aggiungere il seguente al mio codice (per una versione iniziale):
static_assert(std::numeric_limits<float>::is_iec559, "Only support IEC 559 (IEEE 754) float");
static_assert(sizeof(float) * CHAR_BIT == 32, "Only support float => Single Precision IEC 559 (IEEE 754)");
static_assert(std::numeric_limits<double>::is_iec559, "Only support IEC 559 (IEEE 754) double");
static_assert(sizeof(float) * CHAR_BIT == 64, "Only support double => Double Precision IEC 559 (IEEE 754)");
static_assert(std::numeric_limits<long double>::is_iec559, "Only support IEC 559 (IEEE 754) long double");
static_assert(sizeof(float) * CHAR_BIT == 128, "Only support long double => Exteneded Precision IEC 559 (IEEE 754)");
// More asserts if required.
// I noticed my current system has a sizeof(long double) => 128
// But numeric_limits<long double>::digits => 63
// So we are not storing quad precision floats only extended.
Se scrivo il mio float/double/long double in formato binario possono queste essere trasportati tra i sistemi senza ulteriori interpretazioni . cioè ...
void write(std::ostream& stream, double value)
{
stream.write(reinterpret_cast<char const*>(&value), 8);
}
....
double read(std::istream& stream)
{
double value;
stream.read(reinterpret_cast<char*>(&value), 8);
return value;
}
O ho bisogno di rompere il raddoppio in componenti interi per il trasporto (come suggerito da this answer):
La differenza qui è che io sono disposto a limitare la mia rappresentazione supportato per IEEE -754 questo fondamentalmente risolverà la mia memorizzazione binaria di valori in virgola mobile o devo fare ulteriori passi?
Nota: per piattaforme non conformi (quando le trovo) sono disposto a specificare il codice in modo che leggano/scrivano IEEE-754 nella rappresentazione locale. Ma voglio sapere se il bit/endian è abbastanza definito come multipiattaforma per supportare lo storage/il trasporto.
Endianness non specificato. Quindi vorrai convertire tutto in big o little-endian. – tmyklebu
@tmyklebu: hai un riferimento che posso leggere che dice questo? Tutti gli altri con cui parlo dicono (anche se non mi hanno mostrato nemmeno lo standard). –
Sono confuso. Vuoi un riferimento che dice che un altro riferimento non dice qualcosa? – tmyklebu