xref: /freebsd/share/man/man3/tgmath.3 (revision fa9896e082a1046ff4fbc75fcba4d18d1f2efc19)
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.\"
25069a4317SEd Schouten.Dd January 4, 2012
26fd51ce66SStefan Farfeleder.Dt TGMATH 3
27aa12cea2SUlrich Spörlein.Os
28fd51ce66SStefan Farfeleder.Sh NAME
29fd51ce66SStefan Farfeleder.Nm tgmath
30e93572deSRuslan Ermilov.Nd "type-generic macros"
31fd51ce66SStefan Farfeleder.Sh SYNOPSIS
32fd51ce66SStefan Farfeleder.In tgmath.h
33fd51ce66SStefan Farfeleder.Sh DESCRIPTION
34fd51ce66SStefan FarfelederThe header
35fd51ce66SStefan Farfeleder.In tgmath.h
36fd51ce66SStefan Farfelederprovides type-generic macros
37fd51ce66SStefan Farfelederfor
38fd51ce66SStefan Farfeleder.In math.h
39fd51ce66SStefan Farfelederand
40fd51ce66SStefan Farfeleder.In complex.h
41fd51ce66SStefan Farfelederfunctions that have
42fd51ce66SStefan Farfeleder.Vt float
43fd51ce66SStefan Farfeleder(suffixed with
44e93572deSRuslan Ermilov.Sy f ) ,
45fd51ce66SStefan Farfeleder.Vt double
46fd51ce66SStefan Farfelederand
47e93572deSRuslan Ermilov.Vt "long double"
48fd51ce66SStefan Farfeleder(suffixed with
49fd51ce66SStefan Farfeleder.Sy l )
50fd51ce66SStefan Farfelederversions.
51fd51ce66SStefan FarfelederThe arguments that vary across the three functions and have type
52e93572deSRuslan Ermilov.Vt float , double
53fd51ce66SStefan Farfelederand
54fd51ce66SStefan Farfeleder.Vt "long double" ,
55fd51ce66SStefan Farfelederrespectively, are called
56e93572deSRuslan Ermilov.Em "generic arguments" .
57fd51ce66SStefan Farfeleder.Pp
58fd51ce66SStefan FarfelederThe following rules describe which function is actually called if a
59e93572deSRuslan Ermilovtype-generic macro is invoked.
60e93572deSRuslan ErmilovIf any generic argument has type
61fd51ce66SStefan Farfeleder.Vt "long double"
62fd51ce66SStefan Farfelederor
63fd51ce66SStefan Farfeleder.Vt "long double complex" ,
64fd51ce66SStefan Farfelederthe
65fd51ce66SStefan Farfeleder.Vt "long double"
66e93572deSRuslan Ermilovfunction is called.
67e93572deSRuslan ErmilovElse, if any generic argument has type
68e93572deSRuslan Ermilov.Vt double , "double complex"
69fd51ce66SStefan Farfelederor an integer type, the
70fd51ce66SStefan Farfeleder.Vt double
71e93572deSRuslan Ermilovversion is invoked.
72e93572deSRuslan ErmilovOtherwise, the macro expands to the
73fd51ce66SStefan Farfeleder.Vt float
74fd51ce66SStefan Farfelederimplementation.
75fd51ce66SStefan Farfeleder.Pp
76fd51ce66SStefan FarfelederFor the macros in the following table, both real and complex functions
77fd51ce66SStefan Farfelederexist.
78fd51ce66SStefan FarfelederThe real functions are prototyped in
79fd51ce66SStefan Farfeleder.In math.h
80fd51ce66SStefan Farfelederand the complex equivalents in
81fd51ce66SStefan Farfeleder.In complex.h .
82fd51ce66SStefan FarfelederThe complex function is called if any of the generic arguments is a
83fd51ce66SStefan Farfeledercomplex value.
84e93572deSRuslan ErmilovOtherwise, the real equivalent is called.
85e93572deSRuslan Ermilov.Bl -column -offset indent ".Fn acosh" "Sy real function" ".Sy complex function"
86fd51ce66SStefan Farfeleder.It Sy Macro Ta Sy real function Ta Sy complex function
87e93572deSRuslan Ermilov.It Fn acos Ta Fn acos Ta Fn cacos
88e93572deSRuslan Ermilov.It Fn asin Ta Fn asin Ta Fn casin
89e93572deSRuslan Ermilov.It Fn atan Ta Fn atan Ta Fn catan
90e93572deSRuslan Ermilov.It Fn acosh Ta Fn acosh Ta Fn cacosh
91e93572deSRuslan Ermilov.It Fn asinh Ta Fn asinh Ta Fn casinh
92e93572deSRuslan Ermilov.It Fn atanh Ta Fn atanh Ta Fn catanh
93e93572deSRuslan Ermilov.It Fn cos Ta Fn cos Ta Fn ccos
94e93572deSRuslan Ermilov.It Fn sin Ta Fn sin Ta Fn csin
95e93572deSRuslan Ermilov.It Fn tan  Ta Fn tan Ta Fn ctan
96e93572deSRuslan Ermilov.It Fn cosh Ta Fn cosh Ta Fn ccosh
97e93572deSRuslan Ermilov.It Fn sinh Ta Fn sinh Ta Fn csinh
98e93572deSRuslan Ermilov.It Fn tanh Ta Fn tanh Ta Fn ctanh
99e93572deSRuslan Ermilov.It Fn exp Ta Fn exp Ta Fn cexp
100e93572deSRuslan Ermilov.It Fn log Ta Fn log Ta Fn clog
101e93572deSRuslan Ermilov.It Fn pow Ta Fn pow Ta Fn cpow
1023eb5f519SDavid Schultz.It Fn sqrt Ta Fn sqrt Ta Fn csqrt
103e93572deSRuslan Ermilov.It Fn fabs Ta Fn fabs Ta Fn cabs
104fd51ce66SStefan Farfeleder.El
105fd51ce66SStefan Farfeleder.Pp
106fd51ce66SStefan FarfelederNo complex functions exist for the following macros, so passing a
107fd51ce66SStefan Farfeledercomplex value to a generic argument invokes undefined behaviour:
108e93572deSRuslan Ermilov.Bl -column -offset indent ".Fn nexttoward" ".Fn nexttoward" ".Fn nexttoward" ".Fn nexttoward"
109e93572deSRuslan Ermilov.It Fn atan2 Ta Fn fma Ta Fn llround Ta Fn remainder
110e93572deSRuslan Ermilov.It Fn cbrt Ta Fn fmax Ta Fn log10 Ta Fn remquo
111e93572deSRuslan Ermilov.It Fn ceil Ta Fn fmin Ta Fn log1p Ta Fn rint
112e93572deSRuslan Ermilov.It Fn copysign Ta Fn fmod Ta Fn log2 Ta Fn round
113e93572deSRuslan Ermilov.It Fn erf Ta Fn frexp Ta Fn logb Ta Fn scalbn
114e93572deSRuslan Ermilov.It Fn erfc Ta Fn hypot Ta Fn lrint Ta Fn scalbln
115e93572deSRuslan Ermilov.It Fn exp2 Ta Fn ilogb Ta Fn lround Ta Fn tgamma
116*e4c7bde8SSteve Kargl.It Fn expm1 Ta Fn ldexp Ta Fn nearbyint Ta Fn trunc
117748611c9SJoel Dahl.It Fn fdim Ta Fn lgamma Ta Fn nextafter Ta \&
118748611c9SJoel Dahl.It Fn floor Ta Fn llrint Ta Fn nexttoward Ta \&
119fd51ce66SStefan Farfeleder.El
120fd51ce66SStefan Farfeleder.Pp
121fd51ce66SStefan FarfelederThe following macros always expand to a complex function:
122e93572deSRuslan Ermilov.Bl -column -offset indent ".Fn cimag" ".Fn cimag" ".Fn cimag" ".Fn cimag" ".Fn cimag"
123e93572deSRuslan Ermilov.It Fn carg Ta Fn cimag Ta Fn conj Ta Fn cproj Ta Fn creal
124fd51ce66SStefan Farfeleder.El
125fd51ce66SStefan Farfeleder.Pp
126fd51ce66SStefan FarfelederThis header includes
127fd51ce66SStefan Farfeleder.In complex.h
128fd51ce66SStefan Farfelederand
129fd51ce66SStefan Farfeleder.In math.h .
130fd51ce66SStefan Farfeleder.Sh STANDARDS
131e93572deSRuslan ErmilovThe header
132fd51ce66SStefan Farfeleder.In tgmath.h
133fd51ce66SStefan Farfelederconforms to
134fd51ce66SStefan Farfeleder.St -isoC-99 .
135fd51ce66SStefan Farfeleder.Sh HISTORY
136fd51ce66SStefan FarfelederThe header
137fd51ce66SStefan Farfeleder.In tgmath.h
138fd51ce66SStefan Farfelederfirst appeared in
139fd51ce66SStefan Farfeleder.Fx 5.3 .
140069a4317SEd Schouten.Sh COMPILER SUPPORT
141069a4317SEd SchoutenBefore
142cabdddaeSUlrich Spörlein.St -isoC-2011 ,
143069a4317SEd Schoutenthe header
144fd51ce66SStefan Farfeleder.In tgmath.h
145069a4317SEd Schoutencould not be implemented with strictly conforming C code and needed
146e93572deSRuslan Ermilovspecial compiler support.
147069a4317SEd SchoutenAs of
148cabdddaeSUlrich Spörlein.St -isoC-2011 ,
149069a4317SEd Schoutenthis header file can be implemented using the
150069a4317SEd Schouten.Fn _Generic
151069a4317SEd Schoutenlanguage keyword.
152069a4317SEd SchoutenIn addition to compilers that support this keyword, this header file
153069a4317SEd Schoutenworks with GCC.
154069a4317SEd Schouten.Sh BUGS
155fd51ce66SStefan FarfelederMany of the functions mentioned here are not prototyped in
156fd51ce66SStefan Farfeleder.In math.h
157fd51ce66SStefan Farfelederor
158fd51ce66SStefan Farfeleder.In complex.h
159fd51ce66SStefan Farfelederas they are not yet implemented.
160069a4317SEd SchoutenThis prevents the corresponding type-generic macro from working at all.
161