我一直在 Linux 平台上使用 isinf、isnan 函数,效果很好.但这在 OS-X 上不起作用,所以我决定使用 std::isinf std::isnan,它适用于 Linux 和 OS-X.>
但英特尔编译器无法识别它,根据 http://software.intel.com/en-us/forums/showthread.php?t=64188
所以现在我只想避免麻烦并定义我自己的isinf、isnan 实现.
有谁知道如何做到这一点?
为了使 isinf/isnan 工作
#include #include <cmath>#ifdef __INTEL_COMPILER#include #万一int isnan_local(双x){#ifdef __INTEL_COMPILER返回 isnan(x);#别的返回 std::isnan(x);#万一}int isinf_local(双x){#ifdef __INTEL_COMPILER返回 isinf(x);#别的返回 std::isinf(x);#万一}int myChk(double a){std::cerr<<"val 是:"<<a <<" ";如果(isnan_local(a))std::cerr<<"程序说 isnan";如果(isinf_local(a))std::cerr<<"程序说 isinf";std::cerr<<"
";返回0;}int main(){双 a = 0;myChk(a);myChk(log(a));myChk(-log(a));myChk(0/log(a));myChk(log(a)/log(a));返回0;} 你也可以使用 boost 来完成这个任务:
#include //伊斯南if( boost::math::isnan( ... ) .... ) I've been using isinf, isnan functions on Linux platforms which worked perfectly.
But this didn't work on OS-X, so I decided to use std::isinf std::isnan which works on both Linux and OS-X.
But the Intel compiler doesn't recognize it, and I guess its a bug in the intel compiler according to http://software.intel.com/en-us/forums/showthread.php?t=64188
So now I just want to avoid the hassle and define my own isinf, isnan implementation.
Does anyone know how this could be done?
edit:
I ended up doing this in my source code for making isinf/isnan working
#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 <<" ";
if(isnan_local(a))
std::cerr<<"program says isnan";
if(isinf_local(a))
std::cerr<<"program says isinf";
std::cerr<<"
";
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;
}
You could also use boost for this task:
#include <boost/math/special_functions/fpclassify.hpp> // isnan
if( boost::math::isnan( ... ) .... )
这篇关于如何制作可移植的 isnan/isinf 函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!
如何在 C++ 中读取和操作 CSV 文件数据?How can I read and manipulate CSV file data in C++?(如何在 C++ 中读取和操作 CSV 文件数据?)
在 C++ 中,为什么我不能像这样编写 for() 循环:In C++ why can#39;t I write a for() loop like this: for( int i = 1, double i2 = 0; (在 C++ 中,为什么我不能像这样编写 for() 循环: for(
OpenMP 如何处理嵌套循环?How does OpenMP handle nested loops?(OpenMP 如何处理嵌套循环?)
在循环 C++ 中重用线程Reusing thread in loop c++(在循环 C++ 中重用线程)
需要精确的线程睡眠.最大 1ms 误差Precise thread sleep needed. Max 1ms error(需要精确的线程睡眠.最大 1ms 误差)
是否需要“do {...} while ()"?环形?Is there ever a need for a quot;do {...} while ( )quot; loop?(是否需要“do {...} while ()?环形?)