xref: /freebsd/share/man/man3/tgmath.3 (revision e4c7bde816975c36e7fc82d933a6217f82021a8b)
1fd51ce66SStefan Farfeleder.\" Copyright (c) 2004 Stefan Farfeleder
2fd51ce66SStefan Farfeleder.\" All rights reserved.
3fd51ce66SStefan Farfeleder.\"
4fd51ce66SStefan Farfeleder.\" Redistribution and use in source and binary forms, with or without
5fd51ce66SStefan Farfeleder.\" modification, are permitted provided that the following conditions
6fd51ce66SStefan Farfeleder.\" are met:
7fd51ce66SStefan Farfeleder.\" 1. Redistributions of source code must retain the above copyright
8fd51ce66SStefan Farfeleder.\"    notice, this list of conditions and the following disclaimer.
9fd51ce66SStefan Farfeleder.\" 2. Redistributions in binary form must reproduce the above copyright
10fd51ce66SStefan Farfeleder.\"    notice, this list of conditions and the following disclaimer in the
11fd51ce66SStefan Farfeleder.\"    documentation and/or other materials provided with the distribution.
12fd51ce66SStefan Farfeleder.\"
13fd51ce66SStefan Farfeleder.\" THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
14fd51ce66SStefan Farfeleder.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15fd51ce66SStefan Farfeleder.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16fd51ce66SStefan Farfeleder.\" ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
17fd51ce66SStefan Farfeleder.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18fd51ce66SStefan Farfeleder.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19fd51ce66SStefan Farfeleder.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20fd51ce66SStefan Farfeleder.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21fd51ce66SStefan Farfeleder.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22fd51ce66SStefan Farfeleder.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23fd51ce66SStefan Farfeleder.\" SUCH DAMAGE.
24fd51ce66SStefan Farfeleder.\"
25fd51ce66SStefan Farfeleder.\" $FreeBSD$
26fd51ce66SStefan Farfeleder.\"
27069a4317SEd Schouten.Dd January 4, 2012
28fd51ce66SStefan Farfeleder.Dt TGMATH 3
29aa12cea2SUlrich Spörlein.Os
30fd51ce66SStefan Farfeleder.Sh NAME
31fd51ce66SStefan Farfeleder.Nm tgmath
32e93572deSRuslan Ermilov.Nd "type-generic macros"
33fd51ce66SStefan Farfeleder.Sh SYNOPSIS
34fd51ce66SStefan Farfeleder.In tgmath.h
35fd51ce66SStefan Farfeleder.Sh DESCRIPTION
36fd51ce66SStefan FarfelederThe header
37fd51ce66SStefan Farfeleder.In tgmath.h
38fd51ce66SStefan Farfelederprovides type-generic macros
39fd51ce66SStefan Farfelederfor
40fd51ce66SStefan Farfeleder.In math.h
41fd51ce66SStefan Farfelederand
42fd51ce66SStefan Farfeleder.In complex.h
43fd51ce66SStefan Farfelederfunctions that have
44fd51ce66SStefan Farfeleder.Vt float
45fd51ce66SStefan Farfeleder(suffixed with
46e93572deSRuslan Ermilov.Sy f ) ,
47fd51ce66SStefan Farfeleder.Vt double
48fd51ce66SStefan Farfelederand
49e93572deSRuslan Ermilov.Vt "long double"
50fd51ce66SStefan Farfeleder(suffixed with
51fd51ce66SStefan Farfeleder.Sy l )
52fd51ce66SStefan Farfelederversions.
53fd51ce66SStefan FarfelederThe arguments that vary across the three functions and have type
54e93572deSRuslan Ermilov.Vt float , double
55fd51ce66SStefan Farfelederand
56fd51ce66SStefan Farfeleder.Vt "long double" ,
57fd51ce66SStefan Farfelederrespectively, are called
58e93572deSRuslan Ermilov.Em "generic arguments" .
59fd51ce66SStefan Farfeleder.Pp
60fd51ce66SStefan FarfelederThe following rules describe which function is actually called if a
61e93572deSRuslan Ermilovtype-generic macro is invoked.
62e93572deSRuslan ErmilovIf any generic argument has type
63fd51ce66SStefan Farfeleder.Vt "long double"
64fd51ce66SStefan Farfelederor
65fd51ce66SStefan Farfeleder.Vt "long double complex" ,
66fd51ce66SStefan Farfelederthe
67fd51ce66SStefan Farfeleder.Vt "long double"
68e93572deSRuslan Ermilovfunction is called.
69e93572deSRuslan ErmilovElse, if any generic argument has type
70e93572deSRuslan Ermilov.Vt double , "double complex"
71fd51ce66SStefan Farfelederor an integer type, the
72fd51ce66SStefan Farfeleder.Vt double
73e93572deSRuslan Ermilovversion is invoked.
74e93572deSRuslan ErmilovOtherwise, the macro expands to the
75fd51ce66SStefan Farfeleder.Vt float
76fd51ce66SStefan Farfelederimplementation.
77fd51ce66SStefan Farfeleder.Pp
78fd51ce66SStefan FarfelederFor the macros in the following table, both real and complex functions
79fd51ce66SStefan Farfelederexist.
80fd51ce66SStefan FarfelederThe real functions are prototyped in
81fd51ce66SStefan Farfeleder.In math.h
82fd51ce66SStefan Farfelederand the complex equivalents in
83fd51ce66SStefan Farfeleder.In complex.h .
84fd51ce66SStefan FarfelederThe complex function is called if any of the generic arguments is a
85fd51ce66SStefan Farfeledercomplex value.
86e93572deSRuslan ErmilovOtherwise, the real equivalent is called.
87e93572deSRuslan Ermilov.Bl -column -offset indent ".Fn acosh" "Sy real function" ".Sy complex function"
88fd51ce66SStefan Farfeleder.It Sy Macro Ta Sy real function Ta Sy complex function
89e93572deSRuslan Ermilov.It Fn acos Ta Fn acos Ta Fn cacos
90e93572deSRuslan Ermilov.It Fn asin Ta Fn asin Ta Fn casin
91e93572deSRuslan Ermilov.It Fn atan Ta Fn atan Ta Fn catan
92e93572deSRuslan Ermilov.It Fn acosh Ta Fn acosh Ta Fn cacosh
93e93572deSRuslan Ermilov.It Fn asinh Ta Fn asinh Ta Fn casinh
94e93572deSRuslan Ermilov.It Fn atanh Ta Fn atanh Ta Fn catanh
95e93572deSRuslan Ermilov.It Fn cos Ta Fn cos Ta Fn ccos
96e93572deSRuslan Ermilov.It Fn sin Ta Fn sin Ta Fn csin
97e93572deSRuslan Ermilov.It Fn tan  Ta Fn tan Ta Fn ctan
98e93572deSRuslan Ermilov.It Fn cosh Ta Fn cosh Ta Fn ccosh
99e93572deSRuslan Ermilov.It Fn sinh Ta Fn sinh Ta Fn csinh
100e93572deSRuslan Ermilov.It Fn tanh Ta Fn tanh Ta Fn ctanh
101e93572deSRuslan Ermilov.It Fn exp Ta Fn exp Ta Fn cexp
102e93572deSRuslan Ermilov.It Fn log Ta Fn log Ta Fn clog
103e93572deSRuslan Ermilov.It Fn pow Ta Fn pow Ta Fn cpow
1043eb5f519SDavid Schultz.It Fn sqrt Ta Fn sqrt Ta Fn csqrt
105e93572deSRuslan Ermilov.It Fn fabs Ta Fn fabs Ta Fn cabs
106fd51ce66SStefan Farfeleder.El
107fd51ce66SStefan Farfeleder.Pp
108fd51ce66SStefan FarfelederNo complex functions exist for the following macros, so passing a
109fd51ce66SStefan Farfeledercomplex value to a generic argument invokes undefined behaviour:
110e93572deSRuslan Ermilov.Bl -column -offset indent ".Fn nexttoward" ".Fn nexttoward" ".Fn nexttoward" ".Fn nexttoward"
111e93572deSRuslan Ermilov.It Fn atan2 Ta Fn fma Ta Fn llround Ta Fn remainder
112e93572deSRuslan Ermilov.It Fn cbrt Ta Fn fmax Ta Fn log10 Ta Fn remquo
113e93572deSRuslan Ermilov.It Fn ceil Ta Fn fmin Ta Fn log1p Ta Fn rint
114e93572deSRuslan Ermilov.It Fn copysign Ta Fn fmod Ta Fn log2 Ta Fn round
115e93572deSRuslan Ermilov.It Fn erf Ta Fn frexp Ta Fn logb Ta Fn scalbn
116e93572deSRuslan Ermilov.It Fn erfc Ta Fn hypot Ta Fn lrint Ta Fn scalbln
117e93572deSRuslan Ermilov.It Fn exp2 Ta Fn ilogb Ta Fn lround Ta Fn tgamma
118*e4c7bde8SSteve Kargl.It Fn expm1 Ta Fn ldexp Ta Fn nearbyint Ta Fn trunc
119748611c9SJoel Dahl.It Fn fdim Ta Fn lgamma Ta Fn nextafter Ta \&
120748611c9SJoel Dahl.It Fn floor Ta Fn llrint Ta Fn nexttoward Ta \&
121fd51ce66SStefan Farfeleder.El
122fd51ce66SStefan Farfeleder.Pp
123fd51ce66SStefan FarfelederThe following macros always expand to a complex function:
124e93572deSRuslan Ermilov.Bl -column -offset indent ".Fn cimag" ".Fn cimag" ".Fn cimag" ".Fn cimag" ".Fn cimag"
125e93572deSRuslan Ermilov.It Fn carg Ta Fn cimag Ta Fn conj Ta Fn cproj Ta Fn creal
126fd51ce66SStefan Farfeleder.El
127fd51ce66SStefan Farfeleder.Pp
128fd51ce66SStefan FarfelederThis header includes
129fd51ce66SStefan Farfeleder.In complex.h
130fd51ce66SStefan Farfelederand
131fd51ce66SStefan Farfeleder.In math.h .
132fd51ce66SStefan Farfeleder.Sh STANDARDS
133e93572deSRuslan ErmilovThe header
134fd51ce66SStefan Farfeleder.In tgmath.h
135fd51ce66SStefan Farfelederconforms to
136fd51ce66SStefan Farfeleder.St -isoC-99 .
137fd51ce66SStefan Farfeleder.Sh HISTORY
138fd51ce66SStefan FarfelederThe header
139fd51ce66SStefan Farfeleder.In tgmath.h
140fd51ce66SStefan Farfelederfirst appeared in
141fd51ce66SStefan Farfeleder.Fx 5.3 .
142069a4317SEd Schouten.Sh COMPILER SUPPORT
143069a4317SEd SchoutenBefore
144cabdddaeSUlrich Spörlein.St -isoC-2011 ,
145069a4317SEd Schoutenthe header
146fd51ce66SStefan Farfeleder.In tgmath.h
147069a4317SEd Schoutencould not be implemented with strictly conforming C code and needed
148e93572deSRuslan Ermilovspecial compiler support.
149069a4317SEd SchoutenAs of
150cabdddaeSUlrich Spörlein.St -isoC-2011 ,
151069a4317SEd Schoutenthis header file can be implemented using the
152069a4317SEd Schouten.Fn _Generic
153069a4317SEd Schoutenlanguage keyword.
154069a4317SEd SchoutenIn addition to compilers that support this keyword, this header file
155069a4317SEd Schoutenworks with GCC.
156069a4317SEd Schouten.Sh BUGS
157fd51ce66SStefan FarfelederMany of the functions mentioned here are not prototyped in
158fd51ce66SStefan Farfeleder.In math.h
159fd51ce66SStefan Farfelederor
160fd51ce66SStefan Farfeleder.In complex.h
161fd51ce66SStefan Farfelederas they are not yet implemented.
162069a4317SEd SchoutenThis prevents the corresponding type-generic macro from working at all.
163