|  | /* | 
|  | This Software is provided under the Zope Public License (ZPL) Version 2.1. | 
|  |  | 
|  | Copyright (c) 2009, 2010 by the mingw-w64 project | 
|  |  | 
|  | See the AUTHORS file for the list of contributors to the mingw-w64 project. | 
|  |  | 
|  | This license has been certified as open source. It has also been designated | 
|  | as GPL compatible by the Free Software Foundation (FSF). | 
|  |  | 
|  | Redistribution and use in source and binary forms, with or without | 
|  | modification, are permitted provided that the following conditions are met: | 
|  |  | 
|  | 1. Redistributions in source code must retain the accompanying copyright | 
|  | notice, this list of conditions, and the following disclaimer. | 
|  | 2. Redistributions in binary form must reproduce the accompanying | 
|  | copyright notice, this list of conditions, and the following disclaimer | 
|  | in the documentation and/or other materials provided with the | 
|  | distribution. | 
|  | 3. Names of the copyright holders must not be used to endorse or promote | 
|  | products derived from this software without prior written permission | 
|  | from the copyright holders. | 
|  | 4. The right to distribute this software or to use it for any purpose does | 
|  | not give you the right to use Servicemarks (sm) or Trademarks (tm) of | 
|  | the copyright holders.  Use of them is covered by separate agreement | 
|  | with the copyright holders. | 
|  | 5. If any files are modified, you must cause the modified files to carry | 
|  | prominent notices stating that you changed the files and the date of | 
|  | any change. | 
|  |  | 
|  | Disclaimer | 
|  |  | 
|  | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY EXPRESSED | 
|  | OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | 
|  | OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO | 
|  | EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT, | 
|  | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | 
|  | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, | 
|  | OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | 
|  | LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | 
|  | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, | 
|  | EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 
|  | */ | 
|  |  | 
|  | #include <math.h> | 
|  | #include <complex.h> | 
|  |  | 
|  | /* Define some PI constants for long double, as they are not defined in math.h  */ | 
|  | #ifndef M_PI_4l | 
|  | #define M_PI_4l 0.7853981633974483096156608458198757L | 
|  | #define M_PI_2l 1.5707963267948966192313216916397514L | 
|  | #define M_PIl   3.1415926535897932384626433832795029L | 
|  | #endif | 
|  |  | 
|  | /* NAN builtins for gcc, as they are not part of math.h  */ | 
|  | #ifndef NANF | 
|  | #define NANF __builtin_nanf ("") | 
|  | #endif | 
|  | #ifndef NANL | 
|  | #define NANL __builtin_nanl ("") | 
|  | #endif | 
|  |  | 
|  | /* Some more helpers.  */ | 
|  | #define M_PI_3_4  (M_PI - M_PI_4) | 
|  | #define M_PI_3_4l (M_PIl - M_PI_4l) | 
|  |  | 
|  | #if defined(_NEW_COMPLEX_FLOAT) | 
|  | # define __FLT_TYPE	float | 
|  | # define __FLT_ABI(N)	N##f | 
|  | # define __FLT_CST(N)	N##F | 
|  | # define __FLT_EPSILON  __FLT_EPSILON__ | 
|  | # define __FLT_NAN	NANF | 
|  | # define __FLT_HUGE_VAL	HUGE_VALF | 
|  | # define __FLT_PI	M_PI | 
|  | # define __FLT_PI_2	M_PI_2 | 
|  | # define __FLT_PI_4	M_PI_4 | 
|  | # define __FLT_PI_3_4	M_PI_3_4 | 
|  | # define __FLT_MAXLOG	88.72283905206835F | 
|  | # define __FLT_MINLOG	-103.278929903431851103F | 
|  | # define __FLT_LOGE2	0.693147180559945309F | 
|  | # define __FLT_LOG10E   0.434294481903251828F | 
|  | # define __FLT_REPORT(NAME) NAME "f" | 
|  | #elif defined(_NEW_COMPLEX_DOUBLE) | 
|  | # define __FLT_TYPE	double | 
|  | # define __FLT_ABI(N)	N | 
|  | # define __FLT_EPSILON  __DBL_EPSILON__ | 
|  | # define __FLT_CST(N)	N | 
|  | # define __FLT_NAN	NAN | 
|  | # define __FLT_HUGE_VAL	HUGE_VAL | 
|  | # define __FLT_PI	M_PI | 
|  | # define __FLT_PI_2	M_PI_2 | 
|  | # define __FLT_PI_4	M_PI_4 | 
|  | # define __FLT_PI_3_4	M_PI_3_4 | 
|  | # define __FLT_MAXLOG	7.09782712893383996843E2 | 
|  | # define __FLT_MINLOG	-7.45133219101941108420E2 | 
|  | # define __FLT_LOGE2	6.93147180559945309417E-1 | 
|  | # define __FLT_LOG10E   4.34294481903251827651E-1 | 
|  | # define __FLT_REPORT(NAME)	NAME | 
|  | #elif defined(_NEW_COMPLEX_LDOUBLE) | 
|  | # define __FLT_TYPE	long double | 
|  | # define __FLT_ABI(N)	N##l | 
|  | # define __FLT_CST(N)	N##L | 
|  | # define __FLT_EPSILON  __LDBL_EPSILON__ | 
|  | # define __FLT_NAN	NANL | 
|  | # define __FLT_HUGE_VAL	HUGE_VALL | 
|  | # define __FLT_PI	M_PIl | 
|  | # define __FLT_PI_2	M_PI_2l | 
|  | # define __FLT_PI_4	M_PI_4l | 
|  | # define __FLT_PI_3_4	M_PI_3_4l | 
|  | # define __FLT_MAXLOG	1.1356523406294143949492E4L | 
|  | # define __FLT_MINLOG	-1.1355137111933024058873E4L | 
|  | # define __FLT_LOGE2	6.9314718055994530941723E-1L | 
|  | # define __FLT_LOG10E   4.3429448190325182765113E-1L | 
|  | # define __FLT_REPORT(NAME) NAME "l" | 
|  | #else | 
|  | # error "Unknown complex number type" | 
|  | #endif | 
|  |  | 
|  | #define __FLT_RPT_DOMAIN(NAME, ARG1, ARG2, RSLT) \ | 
|  | errno = EDOM, \ | 
|  | __mingw_raise_matherr (_DOMAIN, __FLT_REPORT(NAME), (double) (ARG1), \ | 
|  | (double) (ARG2), (double) (RSLT)) | 
|  | #define __FLT_RPT_ERANGE(NAME, ARG1, ARG2, RSLT, OVL) \ | 
|  | errno = ERANGE, \ | 
|  | __mingw_raise_matherr (((OVL) ? _OVERFLOW : _UNDERFLOW), \ | 
|  | __FLT_REPORT(NAME), (double) (ARG1), \ | 
|  | (double) (ARG2), (double) (RSLT)) | 
|  |  |