29

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

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

4

1 回答 1

53

因为整数类型不一定具有与 afloat或相同的整数值double

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
于 2013-03-11T20:40:51.493 回答