.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
.\" 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
.\"
.\" References consulted:
.\"     Linux libc source code
.\"     Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
.\"     386BSD man pages
.\" Modified 1993-07-24 by Rik Faith (faith@cs.unc.edu)
.\" Modified 2002-07-27 by Walter Harms
.\" 	(walter.harms@informatik.uni-oldenburg.de)
.\"
.TH ERF 3  2017-09-15 "GNU" "Linux Programmer's Manual"
.SH NAME
erf, erff, erfl \- error function
.SH SYNOPSIS
.nf
.B #include <math.h>
.PP
.BI "double erf(double " x );
.BI "float erff(float " x );
.BI "long double erfl(long double " x );
.PP
.fi
Link with \fI\-lm\fP.
.PP
.in -4n
Feature Test Macro Requirements for glibc (see
.BR feature_test_macros (7)):
.in
.PP
.ad l
.BR erf ():
.RS 4
_ISOC99_SOURCE || _POSIX_C_SOURCE\ >=\ 200112L || _XOPEN_SOURCE
    || /* Since glibc 2.19: */ _DEFAULT_SOURCE
    || /* Glibc versions <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
.RE
.br
.BR erff (),
.BR erfl ():
.RS 4
_ISOC99_SOURCE || _POSIX_C_SOURCE\ >=\ 200112L
    || /* Since glibc 2.19: */ _DEFAULT_SOURCE
    || /* Glibc versions <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
.RE
.ad b
.SH DESCRIPTION
These functions return the error function of
.IR x ,
defined as
.TP
    erf(x) = 2/sqrt(pi) * integral from 0 to x of exp(\-t*t) dt
.SH RETURN VALUE
On success, these functions return the value of the error function of
.IR x ,
a value in the range [\-1,\ 1].
.PP
If
.I x
is a NaN, a NaN is returned.
.PP
If
.I x
is +0 (\-0), +0 (\-0) is returned.
.PP
If
.I x
is positive infinity (negative infinity),
+1 (\-1) is returned.
.PP
If
.I x
is subnormal,
a range error occurs,
and the return value is 2*x/sqrt(pi).
.SH ERRORS
See
.BR math_error (7)
for information on how to determine whether an error has occurred
when calling these functions.
.PP
The following errors can occur:
.TP
Range error: result underflow (\fIx\fP is subnormal)
.\" .I errno
.\" is set to
.\" .BR ERANGE .
An underflow floating-point exception
.RB ( FE_UNDERFLOW )
is raised.
.PP
These functions do not set
.IR errno .
.\" It is intentional that these functions do not set errno for this case
.\" see http://sources.redhat.com/bugzilla/show_bug.cgi?id=6785
.SH ATTRIBUTES
For an explanation of the terms used in this section, see
.BR attributes (7).
.TS
allbox;
lbw21 lb lb
l l l.
Interface	Attribute	Value
T{
.BR erf (),
.BR erff (),
.BR erfl ()
T}	Thread safety	MT-Safe
.TE
.SH CONFORMING TO
C99, POSIX.1-2001, POSIX.1-2008.
.PP
The variant returning
.I double
also conforms to
SVr4, 4.3BSD.
.SH SEE ALSO
.BR cerf (3),
.BR erfc (3),
.BR exp (3)
