No programa fornecido, por que obtive resultados diferentes para cada um dos printfs?
#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
doublepara floatocorre 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?
Cque usamos printf("%f",x)para um floate printf("%lf",x)para um double. Quando as coisas mudaram? E como imprimir explicitamente um (único) float- printf("%hf",x)??
%lfem printf é a mesma coisa que %f. A floatem um argumento variável é convertido em a doublepelo compilador, assim como a shorté convertido em uma int.
4.4e10é umadoubleconstante que é convertidafloatna inicialização de,cmas mantida comodoublequando passada paraprintf. No entanto, você também pode querer saber que adicionar umfsufixo o torna umafloatconstante: a impressão4.4e10fmostrará o mesmo valor resultante da inicializaçãocpara4.4e10f. Distinguirfloatconstantes dedoubleconstantes pode ser importante para realizar um trabalho de qualidade com aritmética de ponto flutuante.