Question

Pour autant que je sache, les valeurs en virgule flottante sont de la forme n * 2 ^ e, avec

.
  • l'intervalle de flottement étant n = - (2 ^ 23-1) - (2 ^ 23-1) et e = -126 - 127,
  • la plage double étant n = - (2 ^ 52-1) - (2 ^ 52-1) et e = -1022 - 1023

Je regardais à travers la norme C ++, mais je n’ai pas trouvé l’endroit où la norme le spécifie ou exige l’association des types double float, double et long avec des plages définies dans d’autres normes (IEEE). La seule chose que j'ai trouvée dans la version 3.9.1.8 est la suivante:

  

Il existe trois types de virgule flottante: float, double et long double. Le type double fournit au moins autant de précision que float, et le type long double fournit au moins autant de précision que double. L'ensemble de valeurs du type float est un sous-ensemble de l'ensemble des valeurs du type double; l'ensemble de valeurs du type double est un sous-ensemble de l'ensemble des valeurs du type long double. La représentation des valeurs des types à virgule flottante est définie par l'implémentation.

Et aucune mention de la plage minimale fournie par le type.

Où / comment la norme spécifie-t-elle la plage de valeurs (minimale?) des types à virgule flottante? Ou un compilateur peut-il choisir librement une plage de valeurs tout en restant conforme à la norme?

Était-ce utile?

La solution

Tout comme les limites numériques, les limites pour float, double et long double sont importées du standard C. La valeur minimale pour les constantes FLT_MAX, DBL_MAX et LDBL_MAX est 1E+37. Pour leurs *_MIN variantes, la valeur maximale est 1E-37.

Autres conseils

Ce que vous avez cité est tout ce qui est garanti concernant les types à virgule flottante en C ++. Comme il est dit, leur représentation est définie par la mise en œuvre.

Cependant, vous pouvez demander des informations sur les limites et indiquer si les types sont des types spécifiés CEI 559 (IEEE 754) à l'aide des std::numeric_limits modèles entre <limits>.

La norme ne spécifie pas de telles choses car elles dépendent souvent du matériel et changent avec le temps. Aujourd'hui, 32 bits sont considérés comme une norme, mais dans 10 ans, faire des choses en moins de 64 bits peut sembler désagréable.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top