web-dev-qa-db-fra.com

Différence entre long double et double en C et C ++

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.?

17
user1543957

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.

29
greyfade

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;
}
9
hmatar

UNE long <type> type de données peut contenir des valeurs plus grandes que _ <type> type de données, selon le compilateur.

5
alk