Dans le programme donné, pourquoi ai-je obtenu des résultats différents pour chacun des printfs?
#include <stdio.h>
int main()
{
float c = 4.4e10;
printf("%f\n", c);
printf("%f\n", 4.4e10);
return 0;
}
Et il affiche la sortie suivante:
44000002048.000000
44000000000.000000
doubleà floatse produit en langage C? Ou voulez-vous savoir quelles valeurs résultent de la conversion, c'est-à-dire quels effets la conversion a? Ou autre chose?
Cnous utilisions printf("%f",x)pour un floatet printf("%lf",x)pour un double. Quand les choses ont-elles changé? Et comment imprimer explicitement un (simple) float- printf("%hf",x)??
%lfdans printf est la même chose que %f. Un floatdans un argument variable est converti en un doublepar le compilateur, tout comme un shortest converti en un int.
4.4e10s'agit d'unedoubleconstante qui est convertie enfloatlors de l'initialisation decmais conservée comme unedoublefois passée àprintf. Cependant, vous voudrez peut-être aussi savoir que l'ajout d'unfsuffixe en fait unefloatconstante: l'impression4.4e10faffichera la même valeur que celle résultant de l'initialisationcà4.4e10f. Il peut être important de distinguer lesfloatconstantes desdoubleconstantes pour effectuer un travail de qualité avec l'arithmétique à virgule flottante.