c++ - 如何知道 double 变量中是否存在 NAN 值?

标签 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";
}

我知道无法比较 float 值是否相等。我尝试在 d 和 quiet_Nan() 之间进行比较,并尝试使用 < 运算符将其与 float 进行比较。 我看到的帖子很少,但不知道如何比较双倍值。

如何知道double变量中是否存在NAN值?

最佳答案

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

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

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

它会检查您的机器上是否有合适的 NaN 值,然后使用 NaN != NaN 为真这一事实!

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

关于c++ - 如何知道 double 变量中是否存在 NAN 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3521006/

相关文章:

c++ - C++ boost 的滚动最小值和滚动最大值?

c++ - "Multiple Definition Of"错误。我究竟做错了什么?

c++ - QTabWidget 中的 QScrollBar + QScrollAera

c++ - 为什么 GCC --gc-sections 和 -ffunction-sections 不起作用? (构建)

c++ - 获取优先于提升进程的互斥量

c++ - 这个并行循环会导致数据竞争吗?

c++ - 在虚拟机之间分布单元测试

c++ - 如何在 C++(无 .NET)中将 PDF 转换为位图(栅格化)

c++ - g++ 使用自定义头文件编译

c++ - cout << i << "\n"[ i == n ] 术语在做什么?