Может ли кто-нибудь объяснить мне, как [.precision]
в printf работает со спецификатором "% g"? Я довольно смущен следующим выходом:
double value = 3122.55;
printf("%.16g\n", value); //output: 3122.55
printf("%.17g\n", value); //output: 3122.5500000000002
Я узнал, что %g
использует кратчайшее представление.
Но следующие результаты все еще путают меня
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
Мой вопрос: почему %.16g
дает точное число, а %.17g
не может?
Кажется, что 16 значащих цифр могут быть точными. Может ли кто-нибудь сказать мне причину?