Qualcuno può spiegarmi come funziona lo [.precision]
in printf con l'identificatore "% g"? Sono abbastanza confuso dal seguente output:la precisione di printf con specificatore "% g"
double value = 3122.55;
printf("%.16g\n", value); //output: 3122.55
printf("%.17g\n", value); //output: 3122.5500000000002
Ho imparato che %g
utilizza la rappresentazione più breve.
Ma le seguenti uscite ancora mi confondono
printf("%.16e\n", value); //output: 3.1225500000000002e+03
printf("%.16f\n", value); //output: 3122.5500000000001819
printf("%.17e\n", value); //output: 3.12255000000000018e+03
printf("%.17f\n", value); //output: 3122.55000000000018190
La mia domanda è: perché %.16g
dà il numero esatto, mentre %.17g
non può?
Sembra che 16 cifre significative possano essere accurate. Qualcuno potrebbe dirmi il motivo?
Non è mai così nei numeri a virgola mobile IEEE. – user35443