# std::ceil, std::ceilf, std::ceill

< cpp‎ | numeric‎ | math

定义于头文件 `<cmath>` |  |
| (1) |
float ceil ( float arg ); |  |
float ceilf( float arg ); |  | (C++11 起)
double ceil ( double arg ); | (2) |
| (3) |
long double ceil ( long double arg ); |  |
long double ceill( float arg ); |  | (C++11 起)
double ceil ( IntegralType arg ); | (4) | (C++11 起)

1-3) 计算不小于 `arg` 的最小整数值。
4) 接受任何整数类型参数的重载集或函数模板。等价于 2) （将参数转型为 double ）。

### 参数

arg | - | 浮点值

### 返回值

若不出现错误，则返回不小于 `arg` 的最小整数值，即 ⌈arg⌉ 。

返回值
参数

### 错误处理

报告 math_errhandling 中指定的错误。

若实现支持 IEEE 浮点算术（ IEC 60559 ），则

- 当前舍入模式无效。
- 若 `arg` 为 ±∞ ，则返回不修改的参数
- 若 `arg` 为 ±0 ，则返回不修改的参数
- 若 arg 为 NaN ，则返回 NaN

### 注意

舍入非整数有限值时，可以（但不要求）引发 FE_INEXACT 。

所有标准浮点格式中的最大可表示浮点值都是准确的整数，故此函数自身决不上溢；然而存储于整数对象时，结果可以溢出任何整数类型（包括 std::intmax_t ）。

（ `double` 参数的）此函数表现如同（除了不引发 FE_INEXACT 的自由）以下列代码实现

    #include <cmath>
    #include <cfenv>
    #pragma STDC FENV_ACCESS ON
    double ceil(double x)
    {
        double result;
        int save_round = std::fegetround();
        std::fesetround(FE_UPWARD);
        result = std::rint(x); // 或 std::nearbyint
        std::fesetround(save_round);
        return result;
    }

### 示例

    #include <cmath>
    #include <iostream>
    int main()
    {
        std::cout << std::fixed
                  << "ceil(+2.4) = " << std::ceil(+2.4) << '\n'
                  << "ceil(-2.4) = " << std::ceil(-2.4) << '\n'
                  << "ceil(-0.0) = " << std::ceil(-0.0) << '\n'
                  << "ceil(-Inf) = " << std::ceil(-INFINITY) << '\n';
    }

输出：

    ceil(+2.4) = 3.000000
    ceil(-2.4) = -2.000000
    ceil(-0.0) = -0.000000
    ceil(-Inf) = -INF

### 参阅

floor floorf floorl (C++11)(C++11) | 不大于给定值的最接近整数 (函数)
trunc truncf truncl (C++11)(C++11)(C++11) | 绝对值不大于给定值的最接近整数 (函数)
round roundf roundl lround lroundf lroundl llround llroundf llroundl (C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11) | 最接近整数，中间情况下向远离零舍入 (函数)
nearbyint nearbyintf nearbyintl (C++11)(C++11)(C++11) | 使用当前舍入模式的最接近整数 (函数)
rint rintf rintl lrint lrintf lrintl llrint llrintf llrintl (C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11) | 使用当前舍入模式的最接近整数 若结果有别则有异常 (函数)