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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top