C: Combien de temps un double peut-il être lorsqu'il est imprimé avec printf ()

StackOverflow https://stackoverflow.com/questions/1012747

  •  06-07-2019
  •  | 
  •  

Question

Je dois spécifier la longueur exacte d'une chaîne à imprimer à partir d'une valeur double, mais je ne souhaite pas limiter la sortie plus que nécessaire.

Quelle est la longueur maximale qu'un double de précision à 6 chiffres aura lorsqu'il est formaté par printf ()?

Plus précisément, quelle valeur dois-je attribuer à X dans printf("%X.6lg",doubleValue); pour garantir qu'aucune valeur ne soit tronquée?

La raison pour laquelle je dois préciser la longueur, c’est que je définis un type de données dérivé de MPI, constitué de nombreuses représentations de chaîne de valeurs doubles, et que je dois connaître leur longueur exacte pour diviser les régions du fichier entre les processus MPI. .

J'espère que c'est clair. Merci d’avance de votre réponse.

Était-ce utile?

La solution

utilisez printf("%.6g", doubleValue) ou printf("%.6Lg", doubleValue)

Notez que laisser les chiffres premiers (la " largeur ") dans le spécificateur de précision n'indique pas la longueur de la partie intégrale de la valeur.

Notez également que la sous-couche " l " spécifiera que votre valeur est un long int. La majuscule & Quot; L & Quot; spécifie une double valeur longue.

Notez également que si vous ne voulez pas que cela soit potentiellement remplacé par une notation scientifique (s'il s'agit d'une représentation plus courte), vous devez utiliser " f quot; au lieu de " g " ;.

Afficher un référence printf ici .

Autres conseils

L’exposant maximal d’un double IEEE est 1023; le double le plus grand sera donc 1 + 1/2 + 1/4 + 1/8 + ... etc * 2 ^ 1023. Ce qui comptera environ 318 caractères, en notation décimale.

Pourquoi ne pas utiliser le " e " spécificateur de format?

Il y a < float.h > contenant beaucoup de valeurs utiles, parmi lesquelles DECIMAL_DIG, qui est cependant pour un long double .

Le même fichier vous indiquera probablement qu'un double sur votre plate-forme a plus de 6 chiffres de précision ...

PS: Notez également la réponse de Demi ci-dessus. Il signale diverses failles dans votre printf () qui m’ont échappé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top