为什么floor不返回整数?

时间:2013-03-11 20:39:33

标签: c++ c

刚才我偶然发现,C ++函数floor返回的是您传递给它的相同类型,无论是floatdouble还是等等。

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

1 个答案:

答案 0 :(得分:49)

因为整数类型不一定能保持与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