Maison >développement back-end >C++ >Pourquoi les nombres en double précision semblent-ils plus précis que 15 décimales ?

Pourquoi les nombres en double précision semblent-ils plus précis que 15 décimales ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-30 18:04:16631parcourir

Why Do Double-Precision Numbers Seem More Precise Than 15 Decimal Places?

Places décimales à double précision

Question :

Malgré la documentation suggérant que les valeurs à double précision ont Avec une précision de 15 décimales, les valeurs internes présentent souvent plus de précision. Pourquoi cet écart est-il observé ?

Réponse :

Les doubles IEEE ont 53 bits significatifs, fournissant environ 15,95 chiffres décimaux de précision (basés sur la formule log10(253)). Cette précision théorique est légèrement supérieure aux 15 chiffres décimaux indiqués par la constante DBL_DIG. La précision supplémentaire est expliquée par le bit extra significatif.

La fonction nextafter() démontre la véritable précision d'un double donné. En calculant les nombres représentables les plus proches d'une valeur donnée, il révèle que les valeurs en double précision ont généralement 16 chiffres significatifs.

Voici un programme qui illustre cela :

#include <cstdio>
#include <cfloat>
#include <cmath>

int main() {
    double x = 1.0/7.0;
    printf("FLT_RADIX = %d\n", FLT_RADIX);
    printf("DBL_DIG = %d\n", DBL_DIG);
    printf("DBL_MANT_DIG = %d\n", DBL_MANT_DIG);
    printf("%.17g\n%.17g\n%.17g\n", nextafter(x, 0.0), x, nextafter(x, 1.0));
}

Le résultat montre généralement que :

  • 1.0/7.0 est représenté avec environ 16 chiffres significatifs.
  • Le le dernier bit hexadécimal alterne entre 0 et 1 pour les valeurs consécutives.
  • La valeur mathématique de 1.0/7.0 (0.142857142857142857) n'est représentée qu'approximativement en double précision.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn