Da dove viene il C++ standard di definire il valore gamma di tipi float?
-
08-07-2019 - |
Domanda
Per quanto ne so i valori in virgola mobile sono di forma n * 2^e, con
- float intervallo n = -(2^23-1) - (2^23-1), e e = -126 - 127,
- doppio range di essere n = -(2^52-1) - (2^52-1), e e = -1022 - 1023
Stavo guardando attraverso il C++ standard, ma non è riuscito a trovare il luogo in cui la norma specifica questo, o mandati associazione dei float, double e long double tipi di intervalli definiti in altri (IEEE) standard.L'unica correlati cosa che ho trovato in 3.9.1.8 è:
Ci sono tre tipi in virgola mobile:float, double e long double.Il tipo double fornisce almeno più precisione float, e il tipo long double fornisce almeno più precisione doppia.Il set di valori di tipo float è un sottoinsieme del set di valori di tipo double;il set di valori di tipo double è un sottoinsieme del set di valori di tipo long double.La rappresentazione del valore di tipi a virgola mobile è definito dall'implementazione.
E non c'è menzione dell'intervallo minimo previsto dal tipo.
Dove/come si fa la norma specifica (minimo?) intervallo di valori di tipi in virgola mobile?Oppure si può compilatore di scegliere liberamente qualsiasi intervallo di valori e di essere ancora compatibile con gli standard?
Soluzione
Proprio come intero numerico limiti, i limiti per float
, double
e long double
sono importati dal C standard.Il valore minimo per le costanti FLT_MAX
, DBL_MAX
e LDBL_MAX
è 1E+37
.Per loro *_MIN
varianti il valore massimo è 1E-37
.
Altri suggerimenti
Quello che hai citato è garantita su floating point tipi in C++.Come si dice, la loro rappresentazione è definito dall'implementazione.
Si può, anche se, query per informazioni sui limiti e se i tipi sono IEC 559 (IEEE 754) tipi specificati utilizzando il std::numeric_limits
i modelli in <limits>
.
La norma non specifica queste cose, perché sono spesso dipendente dall'hardware e cambiare nel tempo.Mentre oggi a 32 bit sono considerati uno standard, in 10 anni a fare le cose in meno di 64 bit può forse sembrare di cattivo gusto.