Flotteur et double précision en C

En C, double a plus de précision que float, et selon le livre “C primerplus sixième édition” (page 80), un float peut représenter au moins 6 chiffres significatifs et un double peut en représenter au moins 13. J’ai donc essayé de vérifier cela avec cet exemple simple:

#include int main(void){ float a = 3.3333333; // 7 significant digits double b = 3.33333333333333;// 14 significant digits printf("\nFloat: %f\n", a); printf("Double: %f\n", b); return 0; } 

Et voici le résultat de ce programme:

 Float : 3.333333 Double: 3.333333 

Pourquoi la valeur double a-t-elle la même précision que la valeur flottante au lieu d’afficher des chiffres plus significatifs?

La plupart des questions de ce type peuvent être résolues en consultant le standard C:

Chaque spécification de conversion est introduite par le caractère ‘%’ … après quoi les éléments suivants apparaissent en séquence:

  • Une précision facultative qui donne … le nombre de chiffres devant apparaître après le caractère de base pour les spécificateurs de conversion a, A, e, E, f et F.

Décrivant le spécificateur f :

Le double argument doit être converti en notation décimale dans le style “[-] ddd.ddd”, où le nombre de chiffres après le caractère de base est égal à la spécification de précision. Si la précision est manquante, elle sera prise comme 6 .

Donc, en utilisant simplement %f , vous demandez à printf d’imprimer six chiffres après le . . Si vous souhaitez voir plus de chiffres, vous devez spécifier la précision: %.15f , par exemple.

Vous devez afficher plus de chiffres significatifs. Si tu fais ça:

 printf("\nFloat: %.20f\n", a); printf("Double: %.20f\n", b); 

Vous aurez ceci:

 Float: 3.33333325386047363281 Double: 3.33333333333332992865