未初始化的浮点(C++)

Uninitialized float (C++)

本文关键字:C++ 初始化      更新时间:2023-10-16

如果您想用"未初始化"状态初始化浮点,您会选择什么值?(易于测试且最不可能与实际值混淆的值)

浮动最小值=-9999999。;

可能会出现问题,可能与实际值混淆,甚至由于模糊浮点舍入而被测试(看起来很天真:-)

如果您想避免使用float的有效值,可以使用NAN:

#include <limits>
....
float min = std::numeric_limits<float>::quiet_NaN();

然后可以使用std::isnan检查:

#include <cmath>
....
bool not_cool = std::isnan(min);

您可以使用NAN。然而

问题是使用了未初始化的浮点变量。与整数不同,并非所有的位模式都可用作浮点点值。存在一类被称为信号NaNs的值,或简称SNaN,它们是特殊的"非数字"值。如果你问处理器,它将密切关注这些信号NaN和遇到"无效操作数"异常时引发该异常。(这,毕竟,这就是它被称为信号NaN的全部原因。)

此外,我建议您使用Boost。可选,如下所示:

boost::optional<float> minValue;  // initially unset

根据变量名min判断,您希望它尽可能大。这样,与该值的任何比较都将是一个较小的值,并更新您的minValue

float minValue = std::numeric_limits<float>::max();

附言:不要将您的变量命名为min,否则您将面临名称隐藏问题的风险。