任何人都可以解释一下[.precision]printf 如何使用说明符"%g"吗?我对以下输出感到困惑:
double value = 3122.55;
printf("%.16g\n", value); //output: 3122.55
printf("%.17g\n", value); //output: 3122.5500000000002
Run Code Online (Sandbox Code Playgroud)
我已经知道%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
Run Code Online (Sandbox Code Playgroud)
我的问题是:为什么%.16g给出确切的数字而%.17g不能?
似乎16位有效数字可以准确.谁能告诉我原因?