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