.\" -*- mode: troff; coding: utf-8 -*- .\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.45) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. .ie n \{\ . ds C` "" . ds C' "" 'br\} .el\{\ . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Required to disable full justification in groff 1.23.0. .if n .ds AD l .\" ======================================================================== .\" .IX Title "build::libcerf::src::libcerf::man::cerf 3" .TH build::libcerf::src::libcerf::man::cerf 3 2026-09-05 "perl v5.42.2" "libcerf manual" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH NAME cerf, cerfc \- complex error functions .SH SYNOPSIS .IX Header "SYNOPSIS" \&\fB#include .PP \&\fBdouble complex cerf ( double complex z );\fR .PP \&\fBdouble complex cerfc ( double complex z );\fR .PP The data type \fBdouble complex\fR is defined in the header , which C99 introduced. Since C11 it is optional: an implementation may define _\|_STDC_NO_COMPLEX_\|_ and then provide neither the header nor the type, and Microsoft\*(Aqs C compiler does not support the arithmetic operators for it. As a fallback, use the C++ variant of this library, libcerfcpp, in which \fBdouble complex\fR is replaced by \&\fBstd::complex\fR from the header . .SH DESCRIPTION .IX Header "DESCRIPTION" The function \fBcerf\fR is the complex version of the error function: erf(z) = 2/sqrt(pi) * integral from 0 to z of exp(\-t*t) dt. .PP The complementary complex error function \fBcerfc\fR is defined as erfc(z) = 1\-cerf(z). .SH ACCURACY .IX Header "ACCURACY" Errors are given in units of eps = 2^\-53 = 1.1e\-16, as relative deviations of the modulus from high\-precision reference values. .PP Both functions are computed from Faddeeva\*(Aqs function \fBw_of_z\fR(3) through the factor exp(\-z^2), as erfc(z) = exp(\-z^2) w(iz) and erf(z) = 1 \- erfc(z). The exponent \-z^2 = (y\-x)(x+y) \- 2ixy is carried as an unevaluated sum of two doubles, so that the factor is obtained to about 4 eps whatever |z| (Wuttke, see REFERENCES). At 20000 random points where the exponential neither over\- nor underflows, |z| reaching 1e8, the relative error of \&\fBcerfc\fR stays below 5.5 eps. Before libcerf\-3.7 the exponent was rounded into a single double, and the relative error grew in proportion to |z|^2, reaching 1080 eps at |z| = 26 and leaving no correct digit at all where x^2\-y^2 stays small up to |z| = 1e8. .PP Where exp(\-z^2) overflows although the product with w does not, |w| <= 1 leaving room of a factor sqrt(pi) |z|, the modulus of the factor is taken in scaled form and the scale applied to the product. Both functions therefore cover their full range, and return an infinity only where the value itself exceeds the double format. .PP \&\fBcerf\fR shares this error in absolute terms; where |erf(z)| is small, it is amplified accordingly: without bound near the zeros of erf, the first of which lie at z = +\-1.4506 +\- 1.8809i, and up to about 120 eps close to the origin, for 0.01 < |z| < 0.1 off the coordinate axes, where the Maclaurin series is not used. Likewise, \fBcerfc\fR loses accuracy without bound near its zeros, the first of which lie at z = \-1.3548 +\- 1.9915i. .PP For Im z >= 0 and |z| < 7, generated tests at 37670 points, up to 20 per tile of the disc, hold the relative error of \fBcerf\fR below 129 eps and that of \fBcerfc\fR below 86 eps; the largest deviations found are 126 eps, next to a zero of erf, and 82 eps. .SH REFERENCES .IX Header "REFERENCES" Joachim Wuttke, "libcerf, complex error function and related functions reimplemented with relative accuracy guarantees" (unpublished manuscript, available upon request) documents the algorithms of this library and derives their error bounds. .SH "SEE ALSO" .IX Header "SEE ALSO" The computations are based on Faddeeva\*(Aqs function \fBw_of_z\|(3)\fR. .PP Other complex error functions in libcerf: \&\fBw_of_z\fR(3), \fBdawson\fR(3), \fBvoigt\fR(3), \fBerfcx\fR(3), \fBerfi\fR(3). .PP The real error function comes with recent versions of glibc, as requested by the C99 standard: \&\fBerf\fR(3) .PP Homepage: https://jugit.fz\-juelich.de/mlz/lib/cerf .SH AUTHORS .IX Header "AUTHORS" Steven G. Johnson, Massachusetts Institute of Technology, wrote this function as part of the MIT Faddeeva package. .PP Joachim Wuttke, Forschungszentrum Juelich, reorganized the code into a library, and wrote this man page. .SH CONTACT .IX Header "CONTACT" Please report bugs to the maintainer: .PP Joachim Wuttke .SH COPYING .IX Header "COPYING" Copyright (c) 2012 Massachusetts Institute of Technology .PP Copyright (c) 2013 Forschungszentrum Juelich GmbH .PP Software: MIT License. .PP This documentation: Creative Commons Attribution Share Alike.