gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:19:49 27 4
gpt4 key购买 nike

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com