Quelle est la longueur maximale en caractères nécessaires pour représenter le double de la valeur?

Quand je convertir un entier non signé de 8 bits int en string puis je sais que le résultat sera toujours au plus 3 caractères (pour 255) et pour une 8 bits signé int nous avons besoin de 4 caractères, par exemple "-128".

Maintenant, ce que je suis en train de me demander qui est la même chose pour les valeurs à virgule flottante. Quel est le nombre maximum de caractères requis pour représenter un "double" ou "float" valeur une chaîne de caractères?

Assumer régulièrement un C/C++ double (IEEE 754) et la normale de décimal de l'expansion (c'est à dire pas de %e printf mise en forme).

Je ne suis même pas sûr si c'est vraiment petit nombre (c'est à dire 0.234234) sera plus long que le très grand nombre (les doubles représentant des entiers)?

  • Jalf.com, pourquoi quelqu'un mentionner que? Qui a dit qu'il est demandant comment grand d'une taille fixe de la mémoire tampon devra être? Peut-être qu'il veut savoir combien de colonnes de caractères, il doit réserve sur la console pour un texte basé sur la table.
  • Sans notation scientifique, il serait long pour les valeurs extrêmes de la gamme de magnitude, mais à quoi servirait-il? Qui voudrait lire un tel nombre - un lit double (généralement) est d'environ 15 chiffres décimaux significatifs - tout le reste serait d'un grand nombre de leaders ou traiining zéros.
  • Non, vous pouvez avoir plus de 15 chiffres significatifs pour les chiffres décimaux, mais seulement 15 chiffres significatifs pour l'entier. C'est parce que tandis que vous pouvez représenter tous les entiers vous ne pouvez pas représenter toutes les décimales expansions donc moins de bits peut être utilisée pour couvrir une plus grande gamme.
  • Je ne suis pas l'impression de numéros pour les gens à lire, j'essaie de trouver le nécessaire char buffer de la taille nécessaire pour être sûr que l'inverse de strtod (j'.e "dtoa(double d, char* sortie)") peut finir en toute sécurité, sans risque de débordements de tampon.
  • J'ai essayé avec une boucle for et multiplié le nombre tant qu'il a donné 1.#INF00, le plus grand nombre était de 286 octets de long. Donc je suppose que vous êtes en sécurité avec 512 octets? (à l'aide de printf).
  • Le problème est que je ne connais pas de moyen valable de format std::string en utilisant la norme printf format. Donc, si je reçois un double, j'ai besoin de créer char[X] tampon.

InformationsquelleAutor martin | 2009-11-09