c++ - C++ std::numeric_limits<float>::max() 能否准确地存储在一个 float 中,然后进行比较?

标签 c++ floating-accuracy

我知道有些值无法在 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/

相关文章:

c++ - 出现随机 ascii 字符

c++ - 如果硬编码 float 可以用 IEEE 754 中的二进制格式表示,它是否精确?

floating-point - 用于数论应用的扩展精度浮点的快速计算

floating-accuracy - 为什么 +0.0 > -0.0 不适用于 IEEE754 float ?

c++ - 当boost线程被回收时,在其中创建的临时变量会从内存中删除吗?

c++ - std::decay 并删除 const 限定符

c++ - 整数类型,就像没有隐式转换的本地类型

c++ - 使用 WebGL 展开的 .OBJ 的曲率图

javascript - 在 AngularJS 中格式化 float 而不损失精度

math - float 学有问题吗?