Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

HUGE_VAL est-il vraiment grand ?

4 réponses
Avatar
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

4 réponses

Avatar
Antoine Leca
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
Avatar
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.

#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
Avatar
espie
In article ,
Arnaud Giersch wrote:
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...
Avatar
Arnaud Giersch
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