我有 double (或浮点)变量,它们可能是“空的”,因为没有有效值。我如何使用内置类型 float 和 double 表示这种情况?
一个选项是包含一个 float 和一个 bool 值的包装器,但这行不通,因为我的库有存储 double 值的容器,而不是表现为 double 值的对象。另一个是使用 NaN (std::numeric_limits)。但我看不出有什么办法可以检查变量是否为 NaN。
如何解决需要“特殊”浮点值来表示数字以外的其他含义的问题?
最佳答案
我们已经通过使用 NaN 做到了这一点:
double d = std::numeric_limits<double>::signaling_NaN();
bool isNaN = (d != d);
与自身比较是否相等的 NaN 值将产生 false。这就是您测试 NaN 的方式,但似乎只有在 std::numeric_limits<double>::is_iec559
时才有效是真的(如果是这样,它也符合 ieee754)。
在C99 中有一个名为isnan
的宏。为此在 math.h
,它也会检查 float 的 NaN 值。
关于c++ - Float 或 Double 特殊值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/332705/