我知道有些值无法在 float 中轻松定义,并且只是“近似值”,因此直接“等于”比较通常不起作用。
std::numeric_limits::max 能否准确地存储在 float 中,这段代码能否按预期运行?
float myFloat = std::numeric_limits<float>::max();
//...later...
if(myFloat == std::numeric_limits<float>::max())
{
//...myFloat hasn't changed...
}
最佳答案
对于给定的(非 NaN)float
变量,f
, 保证f == f
总是正确的。自 myFloat
设置为一些 float
值,当然它会比较等于相同的值。
您显然正在考虑以下情况:
float f1 = 0.1;
float f2 = 1.0/10;
assert( f1 == f2 );
这可能会失败,但这不会失败:
float f1 = 0.1;
float f2 = 0.1;
assert( f1 == f2 );
虽然存储在变量中的值可能不完全等于0.1
但可能有不同的值,您将获得两个变量的相同值,因此它们比较相等。
任何值numeric_limits<float>::max()
恰好返回,它是一个固定值,将与自身进行比较。
关于c++ - C++ std::numeric_limits<float>::max() 能否准确地存储在一个 float 中,然后进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15058086/