Le
MacMac
Bonjour,
J'utilise sous gcc finitef pour vérifier qu'un flottant est valide.
Maintenant sous visual c++ la bibliothèque math.h ne connaît
apparemment pas ca . Qu'est ce qu'il faudrait donc utiliser ?
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
Michael DOUBEZ
Le #304309
Bonjour,
J'utilise sous gcc finitef pour vérifier qu'un flottant est valide.
Maintenant sous visual c++ la bibliothèque math.h ne connaît
apparemment pas ca . Qu'est ce qu'il faudrait donc utiliser ?



finitef est une fonction BSD et a été remplacé par isfinite(double) en
C99.

Ce n'est pas du C++ standard car post C++98.
Maintenant, il est probable que gcc le fournisse pour la compatibilité.

//Inclure cmath et pas math.h
#include <cmath>

...
double x;
if(!isfinite(x))
{ // x est nan, +inf ou -inf

}

A noter que C99 fourni aussi isnormal(x) qui teste en plus si le nombre
est "trop petit pour être représenté en format normalisé." (d'après mon
man).

Michael

MacMac
Le #304308
sous gcc 3.3 , mathc est inconnu ( mais isfinite est connu par math.h)
sous visual c++ mathc est effectivement connu mais isfinite n'est pas
connu.

Le Mon, 19 Mar 2007 15:09:30 +0100, Michael DOUBEZ a écrit :

Bonjour,
J'utilise sous gcc finitef pour vérifier qu'un flottant est valide.
Maintenant sous visual c++ la bibliothèque math.h ne connaît
apparemment pas ca . Qu'est ce qu'il faudrait donc utiliser ?


finitef est une fonction BSD et a été remplacé par isfinite(double) en

C99.

Ce n'est pas du C++ standard car post C++98. Maintenant, il est probable
que gcc le fournisse pour la compatibilité.

//Inclure cmath et pas math.h
#include <cmath>

...
double x;
if(!isfinite(x))
{ // x est nan, +inf ou -inf


}
A noter que C99 fourni aussi isnormal(x) qui teste en plus si le nombre
est "trop petit pour être représenté en format normalisé." (d'après
mon man).

Michael



Sylvain
Le #304304
MacMac wrote on 19/03/2007 16:49:
sous gcc 3.3 , mathc est inconnu ( mais isfinite est connu par math.h)
sous visual c++ mathc est effectivement connu mais isfinite n'est pas
connu.


ces fct là sont, sous VC, dans float.h

VC98 utilise les "IEEE recommended functions", soit par exemple
int _finite(double)

je n'ai pas vérifié si VC03, VC05 introduisent d'autres noms, si c'était
le cas, les déf. de 98 sont certainement tjrs présentes.

Sylvain.

Michael DOUBEZ
Le #304303
sous gcc 3.3 , mathc est inconnu ( mais isfinite est connu par math.h)
sous visual c++ mathc est effectivement connu mais isfinite n'est pas
connu.


Bonjour,
J'utilise sous gcc finitef pour vérifier qu'un flottant est valide.
Maintenant sous visual c++ la bibliothèque math.h ne connaît
apparemment pas ca . Qu'est ce qu'il faudrait donc utiliser ?


finitef est une fonction BSD et a été remplacé par isfinite(double) en

C99.

Ce n'est pas du C++ standard car post C++98. Maintenant, il est probable
que gcc le fournisse pour la compatibilité.

//Inclure cmath et pas math.h
#include <cmath>

...
double x;
if(!isfinite(x))
{ // x est nan, +inf ou -inf


}
A noter que C99 fourni aussi isnormal(x) qui teste en plus si le nombre
est "trop petit pour être représenté en format normalisé." (d'après
mon man).



Je ne sais pas quel est ton environnement mais ce n'est pas une question
de gcc mais de libstdc++ utilisée. Et avec un peu de google, j'ai vu des
packages libstdc++-5.0 compilés sous gcc3.3 (qui contiennent cmath).

Maintenant, de toutes façon tu n'aura pas de solution standard mais rien
ne t'empêche de faire une fonction

namespace myspace
{
inline bool isfinite(double x){return std::isnan(x) && std::isinf(x);}
}

Ce sera peut être un poil plus portable; je n'en sais rien.

Michael



Publicité
Poster une réponse
Anonyme