如何知道双变量中NAN值的存在?

时间:2010-08-19 10:52:06

标签: c++

我在比较C ++,Visualstudio中的NAN值时遇到了问题。 我需要在我的代码中处理除零。 如果我得到除零,我想将NAN分配给结果。 稍后检查,结果是否有NAN。 但是NAN比较在稍后的时间点失败,即使我分配了如下的quiet_Nan()。

double d = std::numeric_limits<double>::quiet_NaN();
if( d == std::numeric_limits<double>::quiet_NaN())
{
    cout<<" NAN ";
}
else
{
    cout<<" Number";
}

我知道无法比较浮动值是否相等。我尝试在d和quiet_Nan()之间进行差异,并尝试将其与浮点数进行比较,并使用&lt;运营商。 我看到很少的帖子,但无法得到如何比较双倍价值。

如何知道双变量中NAN值的存在?

3 个答案:

答案 0 :(得分:3)

我认为当前的标准库不提供任何is_nan实现,您需要使用第三方库或自己动手

可以比较浮点值的相等性,它很少有用,但这是一个有用的地方,你想要的是:

template <T>
bool is_nan(T d)
{
  return std::numeric_limits<T>::has_quiet_NaN && d != d;
}

检查您的计算机上是否有适当的NaN值,然后使用NaN!= NaN为真的事实!

可能提升应该在某个地方提供?

答案 1 :(得分:2)

没有任何C ++经验,而是代替:

if(d == std :: numeric_limits :: quiet_NaN())

你应该致电:

如果(标准:: numeric_limits :: quiet_isNaN(d))

如果存在这样的方法。

请记住,如果'd'是NaN,则d == d的计算结果为FALSE

答案 2 :(得分:0)

我在Microsoft的文档页面上找到了您的信息:

http://msdn.microsoft.com/en-us/library/w22adx1s.aspx

尝试类似

的内容
if(myDouble != myDouble)
{
   // myDouble is NaN
}
else
{
   // myDouble is NOT NaN
}

这应该可以解决问题。