No programa fornecido, por que obtive resultados diferentes para cada um dos printf
s?
#include <stdio.h>
int main()
{
float c = 4.4e10;
printf("%f\n", c);
printf("%f\n", 4.4e10);
return 0;
}
E mostra a seguinte saída:
44000002048.000000
44000000000.000000
double
para float
ocorre no idioma C? Ou você deseja saber quais valores resultam da conversão, ou seja, quais efeitos a conversão tem? Ou alguma outra coisa?
C
que usamos printf("%f",x)
para um float
e printf("%lf",x)
para um double
. Quando as coisas mudaram? E como imprimir explicitamente um (único) float
- printf("%hf",x)
??
%lf
em printf é a mesma coisa que %f
. A float
em um argumento variável é convertido em a double
pelo compilador, assim como a short
é convertido em uma int
.
4.4e10
é umadouble
constante que é convertidafloat
na inicialização de,c
mas mantida comodouble
quando passada paraprintf
. No entanto, você também pode querer saber que adicionar umf
sufixo o torna umafloat
constante: a impressão4.4e10f
mostrará o mesmo valor resultante da inicializaçãoc
para4.4e10f
. Distinguirfloat
constantes dedouble
constantes pode ser importante para realizar um trabalho de qualidade com aritmética de ponto flutuante.