Nel programma dato perché ho ottenuto risultati diversi per ciascuna delle printfs?
#include <stdio.h>
int main()
{
float c = 4.4e10;
printf("%f\n", c);
printf("%f\n", 4.4e10);
return 0;
}
E mostra il seguente output:
44000002048.000000
44000000000.000000
doublea floatverifica nel linguaggio C? Oppure vuoi sapere quali valori derivano dalla conversione, ovvero quali effetti ha la conversione? O qualcos'altro?
Cabbiamo usato printf("%f",x)per un floate printf("%lf",x)per un double. Quando sono cambiate le cose? E come si potrebbe esplicitamente stampare un (singolo) float- printf("%hf",x)??
%lfin printf è la stessa cosa di %f. A floatin un argomento variabile viene convertito in a doubledal compilatore, proprio come un shortviene convertito in un int.
4.4e10è unadoublecostante che viene convertitafloatnell'inizializzazionecma mantenuta come unadoublevolta passata aprintf. Tuttavia, potresti anche sapere che l'aggiunta di unfsuffisso lo rende unafloatcostante: la stampa4.4e10fmostrerà lo stesso valore che risulta dall'inizializzazioneca4.4e10f. Distinguere lefloatcostanti dalledoublecostanti può essere importante per svolgere un lavoro di qualità con l'aritmetica in virgola mobile.