web-dev-qa-db-fra.com

Comment puis-je obtenir DOUBLE_MAX?

Autant que je sache, C ne prend en charge que quelques types de données:

int, float, double, char, void enum.

J'ai besoin de stocker un nombre pouvant aller dans les 10 chiffres les plus élevés. Depuis que je reçois un numéro à 10 chiffres faible de

INT_MAX

Je suppose que j’ai besoin d’un double.

<limits.h> n'a pas de DOUBLE_MAX. J'ai trouvé un DBL_MAX sur Internet qui dit que c'est LEGACY et semble également être en C++. Est le double de ce dont j'ai besoin? Pourquoi n'y a-t-il pas DOUBLE_MAX?

52
P.Brian.Mackey

DBL_MAX est défini dans <float.h> . Sa disponibilité en <limits.h> sous Unix correspond à "(LEGACY)".

(lien vers le standard unix bien que vous n’ayez pas de balise unix puisque c’est probablement là que vous avez trouvé la notation "LEGACY", mais une grande partie de ce qui est montré ici pour float.h est également dans le standard C et C89)

68
Random832

Vous obtenez les limites entier dans <limits.h> Ou <climits>. Les caractéristiques en virgule flottante sont définies dans <float.h> Pour C. En C++, la version préférée est généralement std::numeric_limits<double>::max() (pour laquelle vous #include <limits>).

Pour ce qui est de votre question initiale, si vous voulez un type entier plus grand que long, vous devriez probablement envisager long long. Ceci n'est pas officiellement inclus dans C++ 98 ou C++ 03, mais fait partie de C99 et C++ 11, donc tous les compilateurs raisonnablement récents le prennent en charge.

24
Jerry Coffin

C'est dans le fichier standard float.h include. Tu veux DBL_MAX

6
Sodved

Utiliser double pour stocker de grands entiers est douteux; le plus grand entier pouvant être stocké de manière fiable dans double est beaucoup plus petit que DBL_MAX. Tu devrais utiliser long long, et si cela ne suffit pas, vous avez besoin de votre propre code à précision arbitraire ou d'une bibliothèque existante.

6
R..

Vous recherchez le float.h entête.

1
Femaref

INT_MAX n'est qu'une définition entre limits.h . Vous ne précisez pas si vous devez stocker un nombre entier ou une valeur à virgule flottante. S'il s'agit d'un entier et que vous utilisez un compilateur 64 bits, utilisez un LONG (LLONG pour 32 bits).

1
entropo