Dans le programme donné, pourquoi ai-je obtenu des résultats différents pour chacun des printf
s?
#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
à float
se 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?
C
nous utilisions printf("%f",x)
pour un float
et printf("%lf",x)
pour un double
. Quand les choses ont-elles changé? Et comment imprimer explicitement un (simple) float
- printf("%hf",x)
??
%lf
dans printf est la même chose que %f
. Un float
dans un argument variable est converti en un double
par le compilateur, tout comme un short
est converti en un int
.
4.4e10
s'agit d'unedouble
constante qui est convertie enfloat
lors de l'initialisation dec
mais conservée comme unedouble
fois passée àprintf
. Cependant, vous voudrez peut-être aussi savoir que l'ajout d'unf
suffixe en fait unefloat
constante: l'impression4.4e10f
affichera la même valeur que celle résultant de l'initialisationc
à4.4e10f
. Il peut être important de distinguer lesfloat
constantes desdouble
constantes pour effectuer un travail de qualité avec l'arithmétique à virgule flottante.