我有可能为“空”的双精度(或浮点)变量,如不持有有效值。如何使用内置类型 float 和 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
,它也检查浮点数是否为 NaN 值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)