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 :
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!