web-dev-qa-db-fra.com

Quelle est la différence entre% g et% f en C?

Je passais par le langage de programmation C par K&R. Ici, dans une instruction pour imprimer une double variable, il est écrit

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

où sum est déclaré double. Quelqu'un peut-il m'aider quand utiliser% g en cas de double ou en cas de flotteur et quelle est la différence entre% g et% f.

25
Shashi Bhushan

Voir tout manuel de référence, tel que page de manuel :

f, F

Le double argument est arrondi et converti en notation décimale dans le style [-] ddd.ddd, où le nombre de chiffres après le caractère décimal est égal à la spécification de précision. Si la précision manque, elle est prise comme 6; si la précision est explicitement nulle, aucun caractère décimal n'apparaît. Si un point décimal apparaît, au moins un chiffre apparaît devant lui. (Le SUSv2 ne connaît pas F et dit que des représentations de chaînes de caractères pour l'infini et NaN peuvent être disponibles. La norme C99 spécifie '[-] inf' ou '[-] infini' pour l'infini, et une chaîne commençant par 'nan 'pour NaN, dans le cas de la conversion f, et' [-] INF 'ou' [-] INFINITY 'ou' NAN * 'dans le cas de la conversion F.)

g, G

Le double argument est converti dans le style f ou e (ou F ou E pour les conversions G). La précision spécifie le nombre de chiffres significatifs. Si la précision manque, 6 chiffres sont donnés; si la précision est nulle, elle est traitée comme 1. Le style e est utilisé si l'exposant de sa conversion est inférieur à -4 ou supérieur ou égal à la précision. Les zéros de fin sont supprimés de la partie fractionnaire du résultat; un point décimal n'apparaît que s'il est suivi d'au moins un chiffre.

26
unwind

Ce sont deux exemples d'entrées/sorties à virgule flottante.

% g et% G sont des simplificateurs des flotteurs de notation scientifique% e et% E.

% g prendra un nombre qui pourrait être représenté comme% f (un flottant simple ou double) ou% e (notation scientifique) et le renverra comme le plus court des deux.

La sortie de votre instruction d'impression dépendra de la valeur de sum.

35
Daniel Nill

Comme l'indique Unwind, f et g fournissent différentes sorties par défaut.

En gros, si vous vous souciez plus des détails de ce qui vient après le point décimal, je ferais avec f et si vous voulez mettre à l'échelle pour les grands nombres, allez avec g. Dans certains souvenirs poussiéreux, f est très agréable avec de petites valeurs si vos tableaux de chiffres sont imprimés car tout reste aligné, mais quelque chose comme g est nécessaire si vous changez de volume et que votre mise en page compte. e est plus utile lorsque vos nombres ont tendance à être très petits ou très grands mais jamais proches de dix.

Une alternative consiste à spécifier le format de sortie afin que vous obteniez le même nombre de caractères représentant votre numéro à chaque fois.

Désolé pour la réponse laineuse mais c'est une chose subjective qui n'obtient des réponses dures que si le nombre de caractères générés est important ou la précision de la valeur représentée.

3
TafT