大神们,C语言%g(%G)是怎么选择%f或者%e(%E)进行输出的…

大神们,求救!C语言%g(%G)是如何选择%f或者%e(%E)进行输出的……
《C Primer Plus》(5th)中是这样描述的:
%g      根据数值不同自动选择 %f 或 %e ,%e 格式在指数小于-4或者大于等于精度时使用。
%G    (基本上同上)
《C程序设计》(谭浩强 4th)上是这样描述的:
g格式符。用来输出浮点数,系统自动选f格式或e格式输出,选择其中长度较短的格式,不输出无意义的0.如
double a = 12345678954321;
printf("%f\t%e\t%g\n",a,a,a);

输出结果为:
12345678954321.000000     1.234568e+013      1.23457e+013
可以从以上看到用%f格式输出占20列,用%e输出占13列,故%g采用%e格式输出。

好了,这就是我在书上抄下来的一些东西,大神们,到底怎么理解这个问题?两本书,两个说法,又看不出来什么联系……求救!
------解决思路----------------------
你既然能看C primer plus了,还看老谭的书作甚。
老谭的书就是一本改错习题集
------解决思路----------------------
http://www.cplusplus.com/reference/cstdio/printf/
------解决思路----------------------
double输入时必须%lf,但输出时可以%f
按我的理解,
%g      根据数值不同自动选择 %f 或 %e ,%e 格式在指数小于-4或者大于等于精度时使用。

这里的%f指的是浮点数,已经大于精度了,所以这本其实也没错大神们,C语言%g(%G)是怎么选择%f或者%e(%E)进行输出的…