【问题标题】:Obtain minimum NEGATIVE float value in C++在 C++ 中获取最小 NEGATIVE 浮点值
【发布时间】:2010-09-05 20:16:47
【问题描述】:

我在查看std::numeric_limits<float>::min/max(),但似乎'min()' 返回最小的绝对值,而不是最低 值。使用安全吗

-std::numeric_limits<float>::max(),即在最小/最大限制中浮动对称?

【问题讨论】:

  • 是最小负值还是最大负值?
  • 浮点数可以容纳的最小数。我认为这技术上是明确的,因为 -1 小于 0,但我的意思是“最大的负值”
  • 如果您的编译器保证您获得 IEEE 754 浮点数或足够好的近似值,那么可表示的浮点数集是对称的,您可以使用 -std::numeric_limits<float>::max()

标签: c++ stl floating-point


【解决方案1】:

IEEE 754 浮点数使用符号位来表示有符号性(而不是像二进制补码之类的东西),因此如果您确定您的编译器/平台使用该表示(非常常见),那么您可以使用 -std::numeric_limits<float>::max()正如你所怀疑的那样。

【讨论】:

  • 谷歌把我带到了这里。谢谢! :P
【解决方案2】:

使用 std::numeric_limits::lowest()

static _Ty __CRTDECL lowest() _THROW0()
    {   // return most negative value
    return (-(max)());
    }

【讨论】:

  • cplusplus.com/reference/std/limits/numeric_limits - 它没有提到lowest,它是标准的吗?
  • @John:在 C++0x 上是,在 C++98 上不行。
  • @KennyTM:谢谢。我对其中的 C++0x 部分一无所知。
  • @chusbad:我没有,但你的回答(部分)是正确的,因为问题中没有提到标准的版本:)
【解决方案3】:

是的,float 在最小值/最大值上是对称的。

如果您使用最低可表示值作为初始值来搜索列表的最大值,请考虑改用无穷大。

std::numeric_limits<T>::has_infinity() 将为具有它的任何数字类型返回 truestd::numeric_limits<T>::infinity() 将返回一个始终大于该类型的任何其他非 NaN 值的值。这个值可以被否定,并且会比其他任何东西都少。

【讨论】:

    猜你喜欢
    • 2011-12-29
    • 1970-01-01
    • 2021-10-28
    • 2013-05-17
    • 2023-03-16
    • 2011-03-30
    • 1970-01-01
    • 2015-05-30
    • 1970-01-01
    相关资源
    最近更新 更多