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
Libérer: 2024-11-30 18:04:16
original
633 Les gens l'ont consulté

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));
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal