xref: /freebsd/share/man/man3/tgmath.3 (revision fd51ce66aa149cc4c0546c0e5b84201535ac35b8)
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.\"
27fd51ce66SStefan Farfeleder.Dd Aug 14, 2004
28fd51ce66SStefan Farfeleder.Os
29fd51ce66SStefan Farfeleder.Dt TGMATH 3
30fd51ce66SStefan Farfeleder.Sh NAME
31fd51ce66SStefan Farfeleder.Nm tgmath
32fd51ce66SStefan Farfeleder.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
46fd51ce66SStefan Farfeleder.Sm off
47fd51ce66SStefan Farfeleder.Sy f )
48fd51ce66SStefan Farfeleder,
49fd51ce66SStefan Farfeleder.Sm on
50fd51ce66SStefan Farfeleder.Vt double
51fd51ce66SStefan Farfelederand
52fd51ce66SStefan Farfeleder.Vt long double
53fd51ce66SStefan Farfeleder(suffixed with
54fd51ce66SStefan Farfeleder.Sy l )
55fd51ce66SStefan Farfelederversions.
56fd51ce66SStefan FarfelederThe arguments that vary across the three functions and have type
57fd51ce66SStefan Farfeleder.Vt float ,
58fd51ce66SStefan Farfeleder.Vt double
59fd51ce66SStefan Farfelederand
60fd51ce66SStefan Farfeleder.Vt "long double" ,
61fd51ce66SStefan Farfelederrespectively, are called
62fd51ce66SStefan Farfeleder.Em generic arguments .
63fd51ce66SStefan Farfeleder.Pp
64fd51ce66SStefan FarfelederThe following rules describe which function is actually called if a
65fd51ce66SStefan Farfeledertype-generic macro is invoked.  If any generic argument has type
66fd51ce66SStefan Farfeleder.Vt "long double"
67fd51ce66SStefan Farfelederor
68fd51ce66SStefan Farfeleder.Vt "long double complex" ,
69fd51ce66SStefan Farfelederthe
70fd51ce66SStefan Farfeleder.Vt "long double"
71fd51ce66SStefan Farfelederfunction is called.  Else if any generic argument has type
72fd51ce66SStefan Farfeleder.Vt double ,
73fd51ce66SStefan Farfeleder.Vt "double complex"
74fd51ce66SStefan Farfelederor an integer type, the
75fd51ce66SStefan Farfeleder.Vt double
76fd51ce66SStefan Farfelederversion is invoked.  Otherwise the macro expands to the
77fd51ce66SStefan Farfeleder.Vt float
78fd51ce66SStefan Farfelederimplementation.
79fd51ce66SStefan Farfeleder.Pp
80fd51ce66SStefan FarfelederFor the macros in the following table, both real and complex functions
81fd51ce66SStefan Farfelederexist.
82fd51ce66SStefan FarfelederThe real functions are prototyped in
83fd51ce66SStefan Farfeleder.In math.h
84fd51ce66SStefan Farfelederand the complex equivalents in
85fd51ce66SStefan Farfeleder.In complex.h .
86fd51ce66SStefan FarfelederThe complex function is called if any of the generic arguments is a
87fd51ce66SStefan Farfeledercomplex value.
88fd51ce66SStefan FarfelederOtherwise the real equivalent is called.
89fd51ce66SStefan Farfeleder.Bl -column -offset indent ".Sy Macro" "Sy real function" ".Sy complex function"
90fd51ce66SStefan Farfeleder.It Sy Macro Ta Sy real function Ta Sy complex function
91fd51ce66SStefan Farfeleder.It Li acos Ta acos Ta cacos
92fd51ce66SStefan Farfeleder.It Li asin Ta asin Ta casin
93fd51ce66SStefan Farfeleder.It Li atan Ta atan Ta catan
94fd51ce66SStefan Farfeleder.It Li acosh Ta acosh Ta cacosh
95fd51ce66SStefan Farfeleder.It Li asinh Ta asinh Ta casinh
96fd51ce66SStefan Farfeleder.It Li atanh Ta atanh Ta catanh
97fd51ce66SStefan Farfeleder.It Li cos Ta cos Ta ccos
98fd51ce66SStefan Farfeleder.It Li sin Ta sin Ta csin
99fd51ce66SStefan Farfeleder.It Li tan  Ta tan Ta ctan
100fd51ce66SStefan Farfeleder.It Li cosh Ta cosh Ta ccosh
101fd51ce66SStefan Farfeleder.It Li sinh Ta sinh Ta csinh
102fd51ce66SStefan Farfeleder.It Li tanh Ta tanh Ta ctanh
103fd51ce66SStefan Farfeleder.It Li exp Ta exp Ta cexp
104fd51ce66SStefan Farfeleder.It Li log Ta log Ta clog
105fd51ce66SStefan Farfeleder.It Li pow Ta pow Ta cpow
106fd51ce66SStefan Farfeleder.It Li fabs Ta fabs Ta cabs
107fd51ce66SStefan Farfeleder.El
108fd51ce66SStefan Farfeleder.Pp
109fd51ce66SStefan FarfelederNo complex functions exist for the following macros, so passing a
110fd51ce66SStefan Farfeledercomplex value to a generic argument invokes undefined behaviour:
111fd51ce66SStefan Farfeleder.Bl -column -offset indent nexttoward nexttoward nexttoward nexttoward
112fd51ce66SStefan Farfeleder.It Li atan2 Ta fma Ta llround Ta remainder
113fd51ce66SStefan Farfeleder.It Li cbrt Ta fmax Ta log10 Ta remquo
114fd51ce66SStefan Farfeleder.It Li ceil Ta fmin Ta log1p Ta rint
115fd51ce66SStefan Farfeleder.It Li copysign Ta fmod Ta log2 Ta round
116fd51ce66SStefan Farfeleder.It Li erf Ta frexp Ta logb Ta scalbn
117fd51ce66SStefan Farfeleder.It Li erfc Ta hypot Ta lrint Ta scalbln
118fd51ce66SStefan Farfeleder.It Li exp2 Ta ilogb Ta lround Ta tgamma
119fd51ce66SStefan Farfeleder.It Li expm1 Ta ldexp Ta nextbyint Ta trunc
120fd51ce66SStefan Farfeleder.It Li fdim Ta lgamma Ta nextafter
121fd51ce66SStefan Farfeleder.It Li floor Ta llrint Ta nexttoward
122fd51ce66SStefan Farfeleder.El
123fd51ce66SStefan Farfeleder.Pp
124fd51ce66SStefan FarfelederThe following macros always expand to a complex function:
125fd51ce66SStefan Farfeleder.Bl -column -offset indent cimag cimag cimag cimag cimag
126fd51ce66SStefan Farfeleder.It Li carg Ta cimag Ta conj Ta cproj Ta creal
127fd51ce66SStefan Farfeleder.El
128fd51ce66SStefan Farfeleder.Pp
129fd51ce66SStefan FarfelederThis header includes
130fd51ce66SStefan Farfeleder.In complex.h
131fd51ce66SStefan Farfelederand
132fd51ce66SStefan Farfeleder.In math.h .
133fd51ce66SStefan Farfeleder.Sh STANDARDS
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 .
142fd51ce66SStefan Farfeleder.Sh BUGS
143fd51ce66SStefan Farfeleder.In tgmath.h
144fd51ce66SStefan Farfeledercannot be implemented with strictly conforming C code and needs
145fd51ce66SStefan Farfelederspecial compiler support.  The current implementation only works for GCC.
146fd51ce66SStefan Farfeleder.Pp
147fd51ce66SStefan FarfelederMany of the functions mentioned here are not prototyped in
148fd51ce66SStefan Farfeleder.In math.h
149fd51ce66SStefan Farfelederor
150fd51ce66SStefan Farfeleder.In complex.h
151fd51ce66SStefan Farfelederas they are not yet implemented.
152