[英]Uninitialized float (C++)
如果要初始化具有“未初始化”状态的浮点数,您会选择什么值? (值很容易测试,最不可能与实际值混淆)
float min = -999999。;
可能有问题可能要么与实际值混淆,要么甚至因为模糊的浮动舍入而被测试(它看起来很幼稚:-)
如果你想避免使用float
有效值,你可以使用NAN:
#include <limits>
....
float min = std::numeric_limits<float>::quiet_NaN();
然后,您可以使用std::isnan
来检查:
#include <cmath>
....
bool not_cool = std::isnan(min);
你可以使用NAN 。 然而
问题是使用未初始化的浮点变量。 与整数不同,并非所有位模式都可用作浮点值。 存在一类称为信令NaN或简称SNaN的值,它们是特殊的“非数字”值。 如果您要求处理器,它将密切注意这些信令NaN并在遇到一个时引发“无效操作数”异常。 (毕竟,这就是它被称为信号NaN的全部原因。)
另外我建议你使用Boost.Optional像这样:
boost::optional<float> minValue; // initially unset
根据变量名min
判断,您希望它尽可能大。 这样,与此值的任何比较都将是一个较小的值,并更新您的minValue
。
float minValue = std::numeric_limits<float>::max();
PS没有命名你的变量min
或冒着名字阴影问题的风险。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.