INFITINY et double
Le
JKB
Bonjour à tous,
Je viens de tomber sur un problème amusant dans un bout de code et
je me demande si ce n'est pas un problème d'utilisation de la
constante INFINITY (code C99).
INFINITY est de type float. Comment retourner proprement une valeur
de type double ? Je pensais bêtement faire :
double x;
x = (double) INFINITY;
Ça fonctionne avec gcc et d'autres compilos C, mais le DEC C renacle
et renvoie une valeur absconse. D'où la question : est-ce que le fait
de caster INFINITY en double est portable ou non ?
Cordialement,
JKB
--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse
=> http://grincheux.de-charybde-en-scylla.fr
Je viens de tomber sur un problème amusant dans un bout de code et
je me demande si ce n'est pas un problème d'utilisation de la
constante INFINITY (code C99).
INFINITY est de type float. Comment retourner proprement une valeur
de type double ? Je pensais bêtement faire :
double x;
x = (double) INFINITY;
Ça fonctionne avec gcc et d'autres compilos C, mais le DEC C renacle
et renvoie une valeur absconse. D'où la question : est-ce que le fait
de caster INFINITY en double est portable ou non ?
Cordialement,
JKB
--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse
=> http://grincheux.de-charybde-en-scylla.fr

Poser une question


HUGE_VAL ?
(je ne connais pas avec certitude la réponse à l'autre question)
Marc
Non, je ne crois pas. Dans ma doc, il est marqué que HUGE_VAL peut
renvoyer autre chose que inf, par exemple la valeur maximale représentable
pour un certain type...
Cordialement,
JKB
--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
Il me semble que l'intention est que HUGE_VAL soit l'infini s'il existe et
autre chose (DBL_MAX ?) sinon. Mais je reconnais que la doc n'inspire pas
confiance.
J'espère que quelqu'un d'autre passera dans le coin avec une meilleure réponse :-/
Toutes les FPU ne peuvent pas représenter l'infini, que ce soit pour
float ou double. Ainsi, même en ayant recours à l'assembleur, on est pas
sûr de pouvoir l'obtenir. La norme ne peut donc rien garantir (gageons
que dans la majorité des cas, cela fonctionne).
Avant C89, il y avait bien atof("infinity"), mais c'est, au mieux, aussi
peu fiable que HUGE_VAL. Ca n'a au final que le mérite d'être plus clair
sur l'intention du programmeur. En bref, pas de solution portable à 100%.
En fait, même INFINITY ne garantit pas que la valeur est la
représentation de l'infini pour un float :
================================================================== The macro INFINITY expands to a constant expression of type float
representing positive or unsigned infinity, if available; else to a
positive constant of type float that overflows at translation time.
In this case, using INFINITY will violate the constraint in 6.4.4 and
thus require a diagnostic.
==================================================================
HUGE_VAL semble hélas être le meilleur compromis.
On peut cependant déterminer si l'infini est représentable avec :
#ifndef FP_INFINITE
// pas d'infini
#endif
D'après le rationale :
================================================================== What is INFINITY on machines that do not support infinity? It should be
defined along the lines of: #define INFINITY 9e99999f, where there are
enough 9s in the exponent so that the value is too large to represent as
a float, hence, violates the constraint of 6.4.4 Constants.
In addition, the number classification macro FP_INFINITE should not be
defined. That allows an application to test for the existance of
FP_INFINITE as a safe way to determine if infinity is supported; this is
the feature test macro for support for infinity.
==================================================================
<HS>
En C++, même combat, en plus expressif grâce à :
numeric_limits et
numeric_limits </HS>
--
Alexandre
Alexandre Bacquart
Merci pour ces informations, je vais essayer de me débrouiller avec
cela...
JKB
--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr