Czy ktoś może mi wyjaśnić, jak działa [.precision]
w printf ze specyfikatorem "% g"? Jestem zupełnie zdezorientowany następujący wynik:precyzja printf ze specyfikatorem "% g"
double value = 3122.55;
printf("%.16g\n", value); //output: 3122.55
printf("%.17g\n", value); //output: 3122.5500000000002
Nauczyłem się, że %g
wykorzystuje najkrótszą reprezentacji.
Ale następujące wyjścia nadal mi mylić
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
Moje pytanie brzmi: dlaczego %.16g
daje dokładną liczbę natomiast %.17g
nie może?
Wygląda na to, że 16 cyfr znaczących może być dokładnych. Czy ktoś mógłby mi podać powód?
Nigdy nie jest tak w liczbach zmiennoprzecinkowych IEEE. – user35443