我在比较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值的存在?
答案 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
}
这应该可以解决问题。