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