【问题标题】:c++ numeric_limits<double>::epsilon() for values other than 1c++ numeric_limits<double>::epsilon() 对于 1 以外的值
【发布时间】:2020-08-26 19:15:29
【问题描述】:

numeric_limits&lt;double&gt;::epsilon() 被定义为 1.0 和下一个可以用 double 表示的值之间的差,但我想查找/计算除 1.0 以外的值的numeric_limits&lt;double&gt;::epsilon()?有没有办法做到这一点?

【问题讨论】:

  • 听起来你可能正在寻找std::nextafter
  • @FrançoisAndrieux 也许那里有答案? (或者可能是骗子?)
  • 任何 double 值的 epsilon 将是 1.0 的 epsilon 乘以 double 值的指数的二进制表示。
  • 是你想要的缩放 epsilon 吗?然后在cppreference 有一个almost_equal 函数的示例

标签: c++ numeric-limits


【解决方案1】:

正如 cmets 中所指出的,您可以使用 std::nextafter:

float       nextafter ( float from, float to );

返回从 t​​o 方向的下一个可表示值。

float f = /* ... */
float next_after_f = std::nextafter(f, std::numeric_limits<float>::infinity());

【讨论】:

    猜你喜欢
    • 2018-06-16
    • 2021-04-02
    • 1970-01-01
    • 2012-06-24
    • 2021-10-31
    • 2019-05-06
    • 2015-08-06
    • 2012-04-26
    • 1970-01-01
    相关资源
    最近更新 更多