Namespaces
Variants

ceil, ceilf, ceill

From cppreference.net
< c ‎ | numeric ‎ | math
Common mathematical functions
Functions
Basic operations
(C99)
(C99)
(C99)
(C99) (C99) (C99) (C23)
Maximum/minimum operations
Exponential functions
Power functions
Trigonometric and hyperbolic functions
Nearest integer floating-point
ceil
(C99) (C99) (C99)
(C99)

(C99) (C99) (C99)
(C23) (C23) (C23) (C23)
Floating-point manipulation
Narrowing operations
(C23)
(C23)
(C23)
(C23)
(C23)
(C23)
Quantum and quantum exponent
Decimal re-encoding functions
Total order and payload functions
Classification
Error and gamma functions
(C99)
(C99)
(C99)
(C99)
Types
Macro constants
Special floating-point values
Arguments and return values
Error handling
Fast operation indicators
定义于头文件 <math.h>
float ceilf ( float arg ) ;
(1) (C99 起)
double ceil ( double arg ) ;
(2)
long double ceill ( long double arg ) ;
(3) (C99 起)
定义于头文件 <tgmath.h>
#define ceil( arg )
(4) (C99 起)
1-3) 计算不小于 arg 的最小整数值。
4) 类型泛型宏:若 arg 具有 long double 类型,则调用 ceill 。否则,若 arg 具有整数类型或 double 类型,则调用 ceil 。否则调用 ceilf

目录

参数

arg - 浮点数值

返回值

如果未发生错误,则返回不小于 arg 的最小整数值,即 ⌈arg⌉

返回值
math-ceil.svg
参数

错误处理

错误报告方式遵循 math_errhandling 中的规范。

如果实现支持 IEEE 浮点算术 (IEC 60559):

  • 当前 舍入模式 不产生任何影响。
  • arg 为±∞,则直接返回该值(不作修改)。
  • arg 为±0,则直接返回该值(不作修改)。
  • arg 为NaN,则返回NaN。

注释

FE_INEXACT 可能在舍入非整数有限值时被引发(但不是必须被引发)。

在所有标准浮点格式中,最大可表示的浮点值都是精确整数,因此该函数本身永远不会溢出;然而当结果存储在整数变量中时,可能会溢出任何整数类型(包括 intmax_t )。

此函数(针对 double 参数)的行为表现如同(除了可以不引发 FE_INEXACT 的自由外)通过以下方式实现

#include <fenv.h>
#include <math.h>
#pragma STDC FENV_ACCESS ON
double ceil(double x)
{
    double result;
    int save_round = fegetround();
    fesetround(FE_UPWARD);
    result = rint(x); // 或 nearbyint
    fesetround(save_round);
    return result;
}

示例

#include <math.h>
#include <stdio.h>
int main(void)
{
    printf("ceil(+2.4) = %+.1f\n", ceil(2.4));
    printf("ceil(-2.4) = %+.1f\n", ceil(-2.4));
    printf("ceil(-0.0) = %+.1f\n", ceil(-0.0));
    printf("ceil(-Inf) = %+f\n",   ceil(-INFINITY));
}

可能的输出:

ceil(+2.4) = +3.0
ceil(-2.4) = -2.0
ceil(-0.0) = -0.0
ceil(-Inf) = -inf

参考文献

  • C23 标准 (ISO/IEC 9899:2024):
  • 7.12.9.1 ceil 函数集 (p: TBD)
  • 7.25 泛型数学 <tgmath.h> (p: TBD)
  • F.10.6.1 ceil 函数集 (p: TBD)
  • C17 标准 (ISO/IEC 9899:2018):
  • 7.12.9.1 ceil 函数集 (p: TBD)
  • 7.25 泛型数学 <tgmath.h> (p: TBD)
  • F.10.6.1 ceil 函数集 (p: TBD)
  • C11 标准 (ISO/IEC 9899:2011):
  • 7.12.9.1 ceil 函数 (p: 251)
  • 7.25 泛型数学 <tgmath.h> (p: 373-375)
  • F.10.6.1 ceil 函数 (p: 526)
  • C99标准(ISO/IEC 9899:1999):
  • 7.12.9.1 ceil函数(页码:231-232)
  • 7.22 泛型数学 <tgmath.h>(页码:335-337)
  • F.9.6.1 ceil函数(页码:462-463)
  • C89/C90 标准 (ISO/IEC 9899:1990):
  • 4.5.6.1 ceil 函数

参见

计算不大于给定值的最大整数
(函数)
(C99) (C99) (C99)
向绝对值不大于给定值的最接近整数舍入
(函数)
(C99) (C99) (C99) (C99) (C99) (C99) (C99) (C99) (C99)
向最接近的整数舍入,中间情况向远离零的方向舍入
(函数)
使用当前舍入模式向整数舍入
(函数)
(C99) (C99) (C99) (C99) (C99) (C99) (C99) (C99) (C99)
使用当前舍入模式向整数舍入,
若结果不同则产生异常
(函数)
C++ 文档 关于 ceil