首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >isnan奇怪的错误

isnan奇怪的错误
EN

Stack Overflow用户
提问于 2011-12-14 08:08:11
回答 2查看 774关注 0票数 1

我的代码中有一个简单的isnan测试,这让我很头疼。我有一个3d向量类,它包含double类型的变量xyz,以及头文件中的以下函数:

代码语言:javascript
复制
#ifdef WIN32
bool IsValid() const {return !_isnan(x) && _finite(x) && !_isnan(y) && _finite(y) && !_isnan(z) && _finite(z);} //is a valid vector? (funky windows _ versions...) 
#else
bool IsValid() const {return !isnan(x) && finite(x) && !isnan(y) && finite(y) && !isnan(z) && finite(z);} //is a valid vector? 
#endif    

我在Eclipse CDT上构建了一个Linux的GCC环境,并得到了以下错误:

代码语言:javascript
复制
Function '__isnanl' could not be resolved

以及

代码语言:javascript
复制
Function '__isnanf' could not be resolved

用于isnan的所有实例。使用std::isnan并包含float.hmath.h并不能解决这个问题。有人知道这是怎么回事吗?

EN

回答 2

Stack Overflow用户

发布于 2011-12-14 08:10:44

1)尝试包含<math.h> 2)编写自己的isnan(x)函数

代码语言:javascript
复制
bool isnan(x)
{
   if (x==x)
   {
      return false;
   }
   else
   {
      return true;
   }
}

3)这可能是一个愚蠢的命名问题吗?也许应该将isnanl定义为isnan?请参阅:Checking if a double (or float) is NaN in C++

票数 1
EN

Stack Overflow用户

发布于 2015-02-20 21:30:21

我遇到了同样的问题。isnan()在命令行上工作,但令人恼火的是,Eclipse将其报告为一个错误。这个问题是由于Eclipse CDT对gcc编译器的使用稍有不同造成的。更深入地看,isnan()似乎是一个宏,根据某些标志被转换为__isnan()或其他一些函数。当您从Eclipse编译时,这些标志可能会有所不同。

我通过使用函数修复了它

代码语言:javascript
复制
__isnan(double x)

它也可以在math.h上找到,可以在cmdline编译器上正常工作,Eclipse对此没有任何抱怨。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8498039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档