.\" Copyright 2001 Andries Brouwer <aeb@cwi.nl>.
.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
.\"     <mtk.manpages@gmail.com>
.\"
.\" %%%LICENSE_START(VERBATIM)
.\" Permission is granted to make and distribute verbatim copies of this
.\" manual provided the copyright notice and this permission notice are
.\" preserved on all copies.
.\"
.\" Permission is granted to copy and distribute modified versions of this
.\" manual under the conditions for verbatim copying, provided that the
.\" entire resulting derived work is distributed under the terms of a
.\" permission notice identical to this one.
.\"
.\" Since the Linux kernel and libraries are constantly changing, this
.\" manual page may be incorrect or out-of-date.  The author(s) assume no
.\" responsibility for errors or omissions, or for damages resulting from
.\" the use of the information contained herein.  The author(s) may not
.\" have taken the same level of care in the production of this manual,
.\" which is licensed free of charge, as they might when working
.\" professionally.
.\"
.\" Formatted or processed versions of this manual, if unaccompanied by
.\" the source, must acknowledge the copyright and authors of this work.
.\" %%%LICENSE_END
.\"
.TH CEIL 3  2021-03-22 "" "Linux Programmer's Manual"
.SH NAME
ceil, ceilf, ceill \- ceiling function: smallest integral value not
less than argument
.SH SYNOPSIS
.nf
.B #include <math.h>
.PP
.BI "double ceil(double " x );
.BI "float ceilf(float " x );
.BI "long double ceill(long double " x );
.fi
.PP
Link with \fI\-lm\fP.
.PP
.RS -4
Feature Test Macro Requirements for glibc (see
.BR feature_test_macros (7)):
.RE
.PP
.BR ceilf (),
.BR ceill ():
.nf
    _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
        || /* Since glibc 2.19: */ _DEFAULT_SOURCE
        || /* Glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
.fi
.SH DESCRIPTION
These functions return the smallest integral value that is not less than
.IR x .
.PP
For example,
.IR ceil(0.5)
is 1.0, and
.IR ceil(\-0.5)
is 0.0.
.SH RETURN VALUE
These functions return the ceiling of
.IR x .
.PP
If
.I x
is integral, +0, \-0, NaN, or infinite,
.I x
itself is returned.
.SH ERRORS
No errors occur.
POSIX.1-2001 documents a range error for overflows, but see NOTES.
.SH ATTRIBUTES
For an explanation of the terms used in this section, see
.BR attributes (7).
.ad l
.nh
.TS
allbox;
lbx lb lb
l l l.
Interface	Attribute	Value
T{
.BR ceil (),
.BR ceilf (),
.BR ceill ()
T}	Thread safety	MT-Safe
.TE
.hy
.ad
.sp 1
.SH CONFORMING TO
C99, POSIX.1-2001, POSIX.1-2008.
.PP
The variant returning
.I double
also conforms to
SVr4, 4.3BSD, C89.
.SH NOTES
SUSv2 and POSIX.1-2001 contain text about overflow (which might set
.I errno
to
.BR ERANGE ,
or raise an
.B FE_OVERFLOW
exception).
In practice, the result cannot overflow on any current machine,
so this error-handling stuff is just nonsense.
.\" The POSIX.1-2001 APPLICATION USAGE SECTION discusses this point.
(More precisely, overflow can happen only when the maximum value
of the exponent is smaller than the number of mantissa bits.
For the IEEE-754 standard 32-bit and 64-bit floating-point numbers
the maximum value of the exponent is 128 (respectively, 1024),
and the number of mantissa bits is 24 (respectively, 53).)
.PP
The integral value returned by these functions may be too large
to store in an integer type
.RI ( int ,
.IR long ,
etc.).
To avoid an overflow, which will produce undefined results,
an application should perform a range check on the returned value
before assigning it to an integer type.
.SH SEE ALSO
.BR floor (3),
.BR lrint (3),
.BR nearbyint (3),
.BR rint (3),
.BR round (3),
.BR trunc (3)
