HUGE_VAL est-il vraiment grand ?

Le
Arnaud Giersch
Bonjour,

Une question à propos de HUGE_VAL (math.h).

Est-ce qu'on est certain que, pour x fini, les expressions suivantes
sont toujours vraies ?

HUGE_VAL >= x
-HUGE_VAL <= x

J'ai beau chercher, je ne trouve pas de référence qui le dit
explicitement.

En fait, dans un code, je voudrais changer un
#define MIN_VALUE -10000
par
#define MIN_VALUE -HUGE_VAL

Arnaud
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Antoine Leca
Le #24434751
Arnaud Giersch écrivit :
Une question à propos de HUGE_VAL (math.h).



HUGE_VAL est une valeur d'erreur renvoyée par certaines fonctions de la
bibliothèque pour signaler normalement des cas de débordement.

Si tu cherches une constante qui exprime une grande valeur finie, il
vaut mieux utiliser DBL_MAX (ou FLT_MAX, LDBL_MAX).


En fait, dans un code, je voudrais changer un
#define MIN_VALUE -10000
par
#define MIN_VALUE -HUGE_VAL



Euh, tu passes d'un type entier à un type flottant... Je pense que tu
vas avoir des problèmes de concordance de types à court terme ;-)

Sinon je penses que tu peux essayer
#define MIN_VALUE INT_MIN


Antoine
Arnaud Giersch
Le #24434961
Vendredi 27 avril 2012, vers 17:28:11 (+0200), Antoine Leca a écrit:

Arnaud Giersch écrivit :
Une question à propos de HUGE_VAL (math.h).



HUGE_VAL est une valeur d'erreur renvoyée par certaines fonctions de la
bibliothèque pour signaler normalement des cas de débordement.



C'est bien ce que j'ai cru comprendre.

Si tu cherches une constante qui exprime une grande valeur finie, il
vaut mieux utiliser DBL_MAX (ou FLT_MAX, LDBL_MAX).



Ok. Merci pour ta réponse. Je vais utiliser ça.

J'étais d'abord parti sur INFINITY, mais c'est restreint à C99, d'où
ma question.

#define MIN_VALUE -10000
par
#define MIN_VALUE -HUGE_VAL



Euh, tu passes d'un type entier à un type flottant... Je pense que tu
vas avoir des problèmes de concordance de types à court terme ;-)



J'ai copié l'existant tel quel, mais ça devrait effectivement être
-10000.0. MIN_VALUE est en fait toujours comparé à un double, j'avais
oublié de le préciser.

Arnaud
espie
Le #24435081
In article Arnaud Giersch
Vendredi 27 avril 2012, vers 17:28:11 (+0200), Antoine Leca a écrit:

Arnaud Giersch écrivit :
Une question à propos de HUGE_VAL (math.h).



HUGE_VAL est une valeur d'erreur renvoyée par certaines fonctions de la
bibliothèque pour signaler normalement des cas de débordement.



C'est bien ce que j'ai cru comprendre.

Si tu cherches une constante qui exprime une grande valeur finie, il
vaut mieux utiliser DBL_MAX (ou FLT_MAX, LDBL_MAX).



Ok. Merci pour ta réponse. Je vais utiliser ça.

J'étais d'abord parti sur INFINITY, mais c'est restreint à C99, d'où
ma question.



un INFINITY utilisable n'est meme pas C99.

Il faut C99 + IEEE754, et il existe quelques plateformes (rares, par exemple
du vax) ou IEEE754 ne fait pas de sens / coute trop cher.

C99 reclame pour INFINITY:
- soit une vraie valeur infinie
- soit un float qui va deborder, ce qui reclame un diagnostic et pose
quelques petits problemes avec d'autres bouts de la norme.

Le truc "previsible", c'est NAN, qui lui est carrement non defini s'il
n'y a pas sur la plateforme...

De l'interet de rester dans des valeurs normalisees, DBL_MAX, FLT_MAX
et consorts...
Arnaud Giersch
Le #24460121
Vendredi 27 avril 2012, vers 19:50:13 (+0200), Marc Espie a écrit:

un INFINITY utilisable n'est meme pas C99.

Il faut C99 + IEEE754, et il existe quelques plateformes (rares, par exemple
du vax) ou IEEE754 ne fait pas de sens / coute trop cher.


[...]

Merci pour ces précisions.

Arnaud
Publicité
Poster une réponse
Anonyme