.\" -*- 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::erfi 3" .TH build::libcerf::src::libcerf::man::erfi 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 cerfi, erfi \- imaginary error function .SH SYNOPSIS .IX Header "SYNOPSIS" \&\fB#include .PP \&\fBdouble complex cerfi ( double complex z );\fR .PP \&\fBdouble erfi ( double x );\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 \fBcerfi\fR returns an error function rotated in the complex plane, erfi(z) = \-i erf(iz). .PP The function \fBerfi\fR takes a real argument and returns a real result. .SH ACCURACY .IX Header "ACCURACY" Errors are given in units of eps = 2^\-53 = 1.1e\-16, as relative deviations from high\-precision reference values; for complex results, of the modulus. .PP \&\fBerfi\fR(x) = exp(x^2) Im w(x) is computed from \fBim_w_of_x\fR(3). The exponent x^2 is carried as an unevaluated sum of two doubles, so that the relative error no longer grows with x: it was found below 4.7 eps at 2000 random points with 0.2 < x < 26.3. Before libcerf\-3.7 the square was rounded into a single double, and the error grew like x^2 eps, reaching 510 eps at x = 26.1. The exponential alone overflows from |x| = 26.6417 on; since Im w(x) < 1/(sqrt(pi) x) brings the product back into range, a constant is split off the exponent there, so that the full range of erfi is available and +\-Inf is returned only from |x| = 26.7140 on, where erfi itself exceeds the double format. .PP \&\fBcerfi\fR(z) = \-i erf(iz) inherits the accuracy of \fBcerf\fR(3), the rotation by a right angle being exact: the relative error of the modulus stays below 5.5 eps, except near the zeros of erfi, the first of which lie at z = +\-1.8809 +\- 1.4506i, where it is amplified without bound, and close to the origin, for 0.01 < |z| < 0.1 off the coordinate axes, where up to about 120 eps were found. .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 implementation of \fBcerfi\fR and \fBerfi\fR is trivially based on the functions \&\fBcerf\fR(3) and \fBim_w_of_x\fR(3). .PP Other complex error functions in libcerf: \&\fBdawson\fR(3), \fBerfcx\fR(3), \fBvoigt\fR(3), \fBw_of_z\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.