繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM