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

C++ 未初始化浮点(C+;+;),c++,initialization,C++,Initialization,如果您想用“未初始化”状态初始化浮点,您会选择什么值?(易于测试的值,最不可能与实际值混淆) 浮动最小值=-999999 可能存在与实际值混淆甚至由于模糊浮点舍入而被测试的问题(看起来很幼稚:-)如果要避免使用有效的浮点值,可以使用NAN: #include <limits> .... float min = std::numeric_limits<float>::quiet_NaN(); 从变量名min判断,您希望它尽可能大。这样,与该值的任何比较都将是较小的值,并

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

浮动最小值=-999999


可能存在与实际值混淆甚至由于模糊浮点舍入而被测试的问题(看起来很幼稚:-)

如果要避免使用有效的
浮点值,可以使用NAN:

#include <limits>

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

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

float minValue = std::numeric_limits<float>::max();
float minValue=std::numeric_limits::max();
请注意,不要命名变量
min
,否则可能会出现名称隐藏问题。

您可以使用。然而

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

另外,我建议您像这样使用

boost::optional<float> minValue;  // initially unset
boost::可选的最小值;//最初未设置

Boost.Optional也是我针对此类“问题”的选择,特别是它很快将成为
std::Optional
这段引语从何而来?引用你的资料。@LightnessRacesinOrbit:-我在
boost::optional
中引用了该网站的内容。当你实际上在
std::
中预先添加内容时,名称隐藏问题并不是一个真正的问题。我只是指潜在的不必要行为。尤其是因为每个人都喜欢使用名称空间std做
,这与bad@Cyber:好的,所以,不要那样做。很好,谢谢。C99中的isnan似乎不可用,但将浮点值与std::numeric_limits::quiet_NaN()进行比较似乎是可行的work@Juan在比较可能是NaN的值时要非常小心。因此,运行if(myVal==std::numeric_limits::quiet_NaN())将始终为false,即使myVal设置为std::numeric_limits::quiet_NaN()。你需要一个isnan等价物。[编辑:谢谢你,迈克,看来我们正处于不确定的境地:-)更新:在VStudio 2008中有_isnan()
boost::optional<float> minValue;  // initially unset