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

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

4 réponses

Avatar
Michael DOUBEZ
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

Avatar
MacMac
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



Avatar
Sylvain
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.

Avatar
Michael DOUBEZ
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