为什么 floor 不返回整数?

Why doesn't floor return an integer?

本文关键字:整数 返回 floor 为什么      更新时间:2023-10-16

刚才我偶然发现了一个事实,c++函数floor返回与您传递给它的相同类型,无论是float, double还是其他类型。

根据该引用,该函数返回一个向下舍入的整数值。为什么这不是整数?

因为整型不能保存与floatdouble相同的整型值

int main(int argc, char *argv[]) {
    std::cout << floor(std::numeric_limits<float>::max()) << std::endl;
    std::cout << static_cast<long>(floor(std::numeric_limits<float>::max())) << ::endl;
}

输出(在我的x86_64架构上)

3.40282e+38
-9223372036854775808

此外,浮点数可以保存NaN, +Inf和-Inf,所有这些都是由floor()操作保留的。这些值都不能用整型表示。

int main(int argc, char *argv[]) {
    std::cout << floor(std::numeric_limits<float>::quiet_NaN()) << std::endl;
    std::cout << floor(std::numeric_limits<float>::infinity()) << std::endl;
    std::cout << floor(-std::numeric_limits<float>::infinity()) << std::endl;
}

输出
nan
inf
-inf