首页 > 解决方案 > 为什么将 1 添加到 numeric_limits::min() 返回 1?

问题描述

为什么从 float max 中减去 1 会返回一个合理的值,但将 float min 加 1 会返回 1?

我认为如果你添加或减去一个小于那个特定量级的 epsilon 的值,那么什么都不会发生,也不会增加或减少。

这是我用 g++ 编译的没有标志并在 x86_64 上运行的代码。

#include <limits>
#include <iostream>

int main() {
    float min = std::numeric_limits<float>::min() + 1;
    float max = std::numeric_limits<float>::max() - 1;

    std::cout << min << std::endl << max << std::endl;
    return 0;
}

输出这个:

1
3.40282e+38

我希望它输出这个:

-3.40282e+38
 3.40282e+38

标签: c++gccfloating-pointx86-64floating-accuracy

解决方案


std::numeric_limits<float>::min()返回最小的标准化正值。要获取没有低于它的值的值,请使用std::numeric_limits<float>::lowest().

https://en.cppreference.com/w/cpp/types/numeric_limits/min


推荐阅读