Duplicata possible:
double long vs double
Je suis nouveau dans la programmation et je n'arrive pas à comprendre la différence entre long double et double en C et C++. J'ai essayé de le rechercher sur Google, mais je n'ai pas pu le comprendre et je me suis trompé. Quelqu'un peut-il aider s'il vous plait.?
Pour citer la norme C++, §3.9.1 ¶8:
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 des 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 de valeurs du type long double. La représentation des valeurs des types à virgule flottante est définie par l'implémentation. Les types intégraux et flottants sont collectivement appelés types arithmétiques. Les spécialisations du modèle standard std :: numeric_limits (18.3) doivent spécifier les valeurs maximale et minimale de chaque type arithmétique pour une implémentation.
C'est-à-dire que double
prend au moins autant de mémoire pour sa représentation que float
et long double
au moins autant que double
. Cette mémoire supplémentaire est utilisée pour une représentation plus précise d'un nombre.
Sur les systèmes x86, float
est généralement de 4 octets et peut stocker des nombres aussi grands qu'environ 3 × 10³⁸ et environ aussi petits que 1,4 × 10⁻⁴⁵. Il s'agit d'un nombre simple précision IEEE 754 qui stocke environ 7 chiffres décimaux d'un nombre fractionnaire.
Également sur les systèmes x86, double
fait 8 octets de long et peut stocker des nombres au format double précision IEEE 754 , qui a beaucoup plus grande plage et stocke les nombres avec plus de précision, environ 15 chiffres décimaux. Sur certaines autres plates-formes, double
peut ne pas être long de 8 octets et peut en effet être identique à un float
simple précision.
La norme exige seulement que long double
est au moins aussi précis que double
, donc certains compilateurs traiteront simplement long double
comme si c'était la même chose que double
. Mais, sur la plupart des puces x86, le format de précision étendue de 10 octets 80 bits est disponible via l'unité à virgule flottante du processeur, qui fournit encore plus précision que 64 bits double
, avec environ 21 chiffres décimaux de précision.
Certains compilateurs prennent plutôt en charge un format de nombre quadruple de précision IEEE 754 16 octets (128 bits) avec des représentations encore plus précises et une plage plus étendue.
Cela dépend de votre compilateur mais le code suivant peut vous montrer le nombre d'octets dont chaque type a besoin:
int main() {
printf("%d\n", sizeof(double)); // some compilers print 8
printf("%d\n", sizeof(long double)); // some compilers print 16
return 0;
}
UNE long <type>
type de données peut contenir des valeurs plus grandes que _ <type>
type de données, selon le compilateur.