¿Cuál es la diferencia entre% gy% f en C?

Estaba pasando por el lenguaje de programación The C de K&R. Aquí en una declaración para imprimir una variable doble se escribe

printf("\t%g\n", sum += atof(line));

where sum se declara como doble. ¿Alguien puede ayudarme cuando use% g en caso de doble o en caso de flotación y cuál es la diferencia entre% gy% f.