.\" 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 ERFC 3  2021-03-22 "GNU" "Linux Programmer's Manual"
.SH NAME
erfc, erfcf, erfcl \- complementary error function
.SH SYNOPSIS
.nf
.B #include <math.h>
.PP
.BI "double erfc(double " x );
.BI "float erfcf(float " x );
.BI "long double erfcl(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 erfc ():
.nf
    _ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE
        || /* Since glibc 2.19: */ _DEFAULT_SOURCE
        || /* Glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
.fi
.PP
.BR erfcf (),
.BR erfcl ():
.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 complementary error function of
.IR x ,
that is, 1.0 \- erf(x).
.SH RETURN VALUE
On success, these functions return the complementary error function of
.IR x ,
a value in the range [0,2].
.PP
If
.I x
is a NaN, a NaN is returned.
.PP
If
.I x
is +0 or \-0, 1 is returned.
.PP
If
.I x
is positive infinity,
+0 is returned.
.PP
If
.I x
is negative infinity,
+2 is returned.
.PP
If the function result underflows and produces an unrepresentable value,
the return value is 0.0.
.PP
If the function result underflows but produces a representable
(i.e., subnormal) value,
.\" e.g., erfc(27) on x86-32
that value is returned, and
a range error occurs.
.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 (result 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).
.ad l
.nh
.TS
allbox;
lbx lb lb
l l l.
Interface	Attribute	Value
T{
.BR erfc (),
.BR erfcf (),
.BR erfcl ()
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.
.SH NOTES
The
.BR erfc (),
.BR erfcf (),
and
.BR erfcl ()
functions are provided to avoid the loss accuracy that
would occur for the calculation 1-erf(x) for large values of
.IR x
(for which the value of erf(x) approaches 1).
.SH SEE ALSO
.BR cerf (3),
.BR erf (3),
.BR exp (3)
