.\" Copyright 2001 Andries Brouwer <aeb@cwi.nl>.
.\" and Copyright 2008, Linux Foundation, written by Michael Kerrisk
.\"     <mtk.manpages@gmail.com>
.\"
.\" 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.
.\"
.TH FLOOR 3  2010-09-20 "" "Linux Programmer's Manual"
.SH NAME
floor, floorf, floorl \- largest integral value not greater than argument
.SH SYNOPSIS
.nf
.B #include <math.h>
.sp
.BI "double floor(double " x );
.br
.BI "float floorf(float " x );
.br
.BI "long double floorl(long double " x );
.fi
.sp
Link with \fI\-lm\fP.
.sp
.in -4n
Feature Test Macro Requirements for glibc (see
.BR feature_test_macros (7)):
.in
.sp
.ad l
.BR floorf (),
.BR floorl ():
.RS 4
_BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE\ >=\ 600 || _ISOC99_SOURCE ||
_POSIX_C_SOURCE\ >=\ 200112L;
.br
or
.I cc\ -std=c99
.RE
.ad
.SH DESCRIPTION
These functions return the largest integral value that is not greater than
.IR x .

For example,
.IR floor(0.5)
is 0.0, and
.IR floor(\-0.5)
is \-1.0.
.SH "RETURN VALUE"
These functions return the floor of
.IR x .

If \fIx\fP is integral, +0, \-0, NaN, or an infinity,
\fIx\fP itself is returned.
.SH ERRORS
No errors occur.
POSIX.1-2001 documents a range error for overflows, but see NOTES.
.SH "CONFORMING TO"
C99, POSIX.1-2001.
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).)
.SH "SEE ALSO"
.BR ceil (3),
.BR lrint (3),
.BR nearbyint (3),
.BR rint (3),
.BR round (3),
.BR trunc (3)
