He estado usando isinf
, isnan
funciones en plataformas Linux que funcionó a la perfección. Pero esto no funcionó en OS-X, así que decidí usar std::isinf
std::isnan
que funciona tanto en Linux como en OS-X.cómo puedo hacer una función isnan/isinf portátil
Pero el compilador Intel no lo reconoce, y supongo que es un error en el compilador Intel acuerdo con http://software.intel.com/en-us/forums/showthread.php?t=64188
Así que ahora sólo quiero evitar la molestia y definir mi propia isinf
, isnan
aplicación.
¿Alguien sabe cómo esto podría hacerse?
edición:
que terminé haciendo esto en mi código fuente para hacer isinf
/isnan
trabajo
#include <iostream>
#include <cmath>
#ifdef __INTEL_COMPILER
#include <mathimf.h>
#endif
int isnan_local(double x) {
#ifdef __INTEL_COMPILER
return isnan(x);
#else
return std::isnan(x);
#endif
}
int isinf_local(double x) {
#ifdef __INTEL_COMPILER
return isinf(x);
#else
return std::isinf(x);
#endif
}
int myChk(double a){
std::cerr<<"val is: "<<a <<"\t";
if(isnan_local(a))
std::cerr<<"program says isnan";
if(isinf_local(a))
std::cerr<<"program says isinf";
std::cerr<<"\n";
return 0;
}
int main(){
double a = 0;
myChk(a);
myChk(log(a));
myChk(-log(a));
myChk(0/log(a));
myChk(log(a)/log(a));
return 0;
}
Estrechamente relacionada: [__Checking si un doble (o flotación) es NaN en C++ __] (http: // stackoverflow. com/questions/570669/checking-if-a-double-or-float-is-nan-in-c) – bobobobo