Add missing long double functions to Cygwin
This patch adds the long double functions missing in newlib to Cygwin. Apart from some self-written additions (exp10l, finite{f,l}, isinf{f,l}, isnan{f,l}, pow10l) the files are taken from the Mingw-w64 math lib. Minor changes were required, e.g. substitue _WIN64 with __x86_64__ and fixing __FLT_RPT_DOMAIN/__FLT_RPT_ERANGE for Cygwin. Cygwin: * math: New subdir with math functions. * Makefile.in (VPATH): Add math subdir. (MATH_OFILES): List of object files collected from building files in math subdir. (DLL_OFILES): Add $(MATH_OFILES). ${CURDIR}/libm.a: Add $(MATH_OFILES) to build. * common.din: Add new functions from math subdir. * i686.din: Align to new math subdir. Remove functions now commonly available. * x86_64.din: Ditto. * math.h: math.h wrapper to define mingw structs used in some files in math subdir. * include/cygwin/version.h: Bump API minor version. newlib: * libc/include/complex.h: Add prototypes for complex long double functions. Only define for Cygwin. * libc/include/math.h: Additionally enable prototypes of long double functions for Cygwin. Add Cygwin-only prototypes for dreml, sincosl, exp10l and pow10l. Explain why we don't add them to newlib. * libc/include/tgmath.h: Enable long double handling on Cygwin. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
parent
087aca6163
commit
792e51b721
|
@ -108,12 +108,10 @@ long double cimagl(long double complex);
|
|||
/* 7.3.9.3 The conj functions */
|
||||
double complex conj(double complex);
|
||||
float complex conjf(float complex);
|
||||
/*long double complex conjl(long double complex); */
|
||||
|
||||
/* 7.3.9.4 The cproj functions */
|
||||
double complex cproj(double complex);
|
||||
float complex cprojf(float complex);
|
||||
/*long double complex cprojl(long double complex); */
|
||||
|
||||
/* 7.3.9.5 The creal functions */
|
||||
double creal(double complex);
|
||||
|
@ -125,6 +123,31 @@ double complex clog10(double complex);
|
|||
float complex clog10f(float complex);
|
||||
#endif
|
||||
|
||||
#if defined(__CYGWIN__)
|
||||
long double complex cacosl(long double complex);
|
||||
long double complex casinl(long double complex);
|
||||
long double complex catanl(long double complex);
|
||||
long double complex ccosl(long double complex);
|
||||
long double complex csinl(long double complex);
|
||||
long double complex ctanl(long double complex);
|
||||
long double complex cacoshl(long double complex);
|
||||
long double complex casinhl(long double complex);
|
||||
long double complex catanhl(long double complex);
|
||||
long double complex ccoshl(long double complex);
|
||||
long double complex csinhl(long double complex);
|
||||
long double complex ctanhl(long double complex);
|
||||
long double complex cexpl(long double complex);
|
||||
long double complex clogl(long double complex);
|
||||
long double complex cpowl(long double complex, long double complex);
|
||||
long double complex csqrtl(long double complex);
|
||||
long double cargl(long double complex);
|
||||
long double complex conjl(long double complex);
|
||||
long double complex cprojl(long double complex);
|
||||
#if __GNU_VISIBLE
|
||||
long double complex clog10l(long double complex);
|
||||
#endif
|
||||
#endif /* __CYGWIN__ */
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* ! _COMPLEX_H */
|
||||
|
|
|
@ -421,8 +421,12 @@ extern float log2f _PARAMS((float));
|
|||
extern float hypotf _PARAMS((float, float));
|
||||
#endif /* ! defined (_REENT_ONLY) */
|
||||
|
||||
/* On platforms where long double equals double. */
|
||||
#ifdef _LDBL_EQ_DBL
|
||||
/* Newlib doesn't fully support long double math functions so far.
|
||||
On platforms where long double equals double the long double functions
|
||||
simply call the double functions. On Cygwin the long double functions
|
||||
are implemented independently from newlib to be able to use optimized
|
||||
assembler functions despite using the Microsoft x86_64 ABI. */
|
||||
#if defined (_LDBL_EQ_DBL) || defined (__CYGWIN__)
|
||||
/* Reentrant ANSI C functions. */
|
||||
#ifndef __math_68881
|
||||
extern long double atanl _PARAMS((long double));
|
||||
|
@ -492,7 +496,7 @@ extern long double lgammal _PARAMS((long double));
|
|||
extern long double erfl _PARAMS((long double));
|
||||
extern long double erfcl _PARAMS((long double));
|
||||
#endif /* ! defined (_REENT_ONLY) */
|
||||
#else /* !_LDBL_EQ_DBL */
|
||||
#else /* !_LDBL_EQ_DBL && !__CYGWIN__ */
|
||||
extern long double hypotl _PARAMS((long double, long double));
|
||||
extern long double sqrtl _PARAMS((long double));
|
||||
#ifdef __i386__
|
||||
|
@ -501,13 +505,16 @@ extern _LONG_DOUBLE rintl _PARAMS((_LONG_DOUBLE));
|
|||
extern long int lrintl _PARAMS((_LONG_DOUBLE));
|
||||
extern long long int llrintl _PARAMS((_LONG_DOUBLE));
|
||||
#endif /* __i386__ */
|
||||
#endif /* !_LDBL_EQ_DBL */
|
||||
#endif /* !_LDBL_EQ_DBL && !__CYGWIN__ */
|
||||
|
||||
#endif /* __ISO_C_VISIBLE >= 1999 */
|
||||
|
||||
#if __MISC_VISIBLE
|
||||
extern double drem _PARAMS((double, double));
|
||||
extern float dremf _PARAMS((float, float));
|
||||
#ifdef __CYGWIN__
|
||||
extern float dreml _PARAMS((long double, long double));
|
||||
#endif /* __CYGWIN__ */
|
||||
extern double gamma_r _PARAMS((double, int *));
|
||||
extern double lgamma_r _PARAMS((double, int *));
|
||||
extern float gammaf_r _PARAMS((float, int *));
|
||||
|
@ -536,6 +543,9 @@ extern float jnf _PARAMS((int, float));
|
|||
#if __GNU_VISIBLE
|
||||
extern void sincos _PARAMS((double, double *, double *));
|
||||
extern void sincosf _PARAMS((float, float *, float *));
|
||||
#ifdef __CYGWIN__
|
||||
extern void sincosl _PARAMS((long double, long double *, long double *));
|
||||
#endif /* __CYGWIN__ */
|
||||
# ifndef exp10
|
||||
extern double exp10 _PARAMS((double));
|
||||
# endif
|
||||
|
@ -548,6 +558,14 @@ extern float exp10f _PARAMS((float));
|
|||
# ifndef pow10f
|
||||
extern float pow10f _PARAMS((float));
|
||||
# endif
|
||||
#ifdef __CYGWIN__
|
||||
# ifndef exp10l
|
||||
extern float exp10l _PARAMS((float));
|
||||
# endif
|
||||
# ifndef pow10l
|
||||
extern float pow10l _PARAMS((float));
|
||||
# endif
|
||||
#endif /* __CYGWIN__ */
|
||||
#endif /* __GNU_VISIBLE */
|
||||
|
||||
#if __MISC_VISIBLE || __XSI_VISIBLE
|
||||
|
|
|
@ -79,7 +79,7 @@
|
|||
__tg_type3(__e1, __e2, __e3, long double _Complex) || \
|
||||
__tg_type3(__e1, __e2, __e3, __typeof__(_Complex_I)))
|
||||
|
||||
#ifdef _LDBL_EQ_DBL
|
||||
#if defined (_LDBL_EQ_DBL) || defined (__CYGWIN__)
|
||||
#define __tg_impl_simple(x, y, z, fn, fnf, fnl, ...) \
|
||||
__builtin_choose_expr(__tg_type_corr(x, y, z, long double), \
|
||||
fnl(__VA_ARGS__), __builtin_choose_expr( \
|
||||
|
@ -161,9 +161,10 @@
|
|||
#define lround(__x) __tg_simple(__x, lround)
|
||||
#define nearbyint(__x) __tg_simple(__x, nearbyint)
|
||||
#define nextafter(__x, __y) __tg_simple2(__x, __y, nextafter)
|
||||
/* not yet implemented even for _LDBL_EQ_DBL platforms
|
||||
/* not yet implemented even for _LDBL_EQ_DBL platforms */
|
||||
#ifdef __CYGWIN__
|
||||
#define nexttoward(__x, __y) __tg_simplev(__x, nexttoward, __x, __y)
|
||||
*/
|
||||
#endif
|
||||
#define remainder(__x, __y) __tg_simple2(__x, __y, remainder)
|
||||
#define remquo(__x, __y, __z) __tg_impl_simple(__x, __x, __y, remquo, remquof, \
|
||||
remquol, __x, __y, __z)
|
||||
|
|
|
@ -29,7 +29,7 @@ export CCWRAP_HEADERS:=. ${srcdir}
|
|||
export CCWRAP_SYSTEM_HEADERS:=@cygwin_headers@ @newlib_headers@
|
||||
export CCWRAP_DIRAFTER_HEADERS:=@windows_headers@
|
||||
|
||||
VPATH+=$(srcdir)/regex $(srcdir)/lib $(srcdir)/libc
|
||||
VPATH+=$(srcdir)/regex $(srcdir)/lib $(srcdir)/libc $(srcdir)/math
|
||||
|
||||
target_cpu:=@target_cpu@
|
||||
target_alias:=@target_alias@
|
||||
|
@ -153,6 +153,101 @@ DLL_IMPORTS:=${shell $(CC) -print-file-name=w32api/libkernel32.a} ${shell $(CC)
|
|||
|
||||
MT_SAFE_OBJECTS:=
|
||||
#
|
||||
MATH_OFILES:= \
|
||||
acoshl.o \
|
||||
acosl.o \
|
||||
asinhl.o \
|
||||
asinl.o \
|
||||
atan2l.o \
|
||||
atanhl.o \
|
||||
atanl.o \
|
||||
cabsl.o \
|
||||
cacosl.o \
|
||||
cargl.o \
|
||||
casinl.o \
|
||||
catanl.o \
|
||||
cbrtl.o \
|
||||
ccosl.o \
|
||||
ceill.o \
|
||||
cephes_emath.o \
|
||||
cexpl.o \
|
||||
cimagl.o \
|
||||
clog10l.o \
|
||||
clogl.o \
|
||||
conjl.o \
|
||||
copysignl.o \
|
||||
coshl.o \
|
||||
cosl.o \
|
||||
cosl_internal.o \
|
||||
cossin.o \
|
||||
cpowl.o \
|
||||
cprojl.o \
|
||||
creall.o \
|
||||
csinl.o \
|
||||
csqrtl.o \
|
||||
ctanl.o \
|
||||
erfl.o \
|
||||
exp10l.o \
|
||||
exp2l.o \
|
||||
expl.o \
|
||||
expm1l.o \
|
||||
fabsl.o \
|
||||
fdiml.o \
|
||||
finite.o \
|
||||
floorl.o \
|
||||
fmal.o \
|
||||
fmaxl.o \
|
||||
fminl.o \
|
||||
fmodl.o \
|
||||
frexpl.o \
|
||||
ilogbl.o \
|
||||
internal_logl.o \
|
||||
isinf.o \
|
||||
isnan.o \
|
||||
ldexpl.o \
|
||||
lgammal.o \
|
||||
llrint.o \
|
||||
llrintf.o \
|
||||
llrintl.o \
|
||||
llroundl.o \
|
||||
log10l.o \
|
||||
log1pl.o \
|
||||
log2l.o \
|
||||
logbl.o \
|
||||
logl.o \
|
||||
lrint.o \
|
||||
lrintf.o \
|
||||
lrintl.o \
|
||||
lroundl.o \
|
||||
modfl.o \
|
||||
nearbyint.o \
|
||||
nearbyintf.o \
|
||||
nearbyintl.o \
|
||||
nextafterl.o \
|
||||
nexttoward.o \
|
||||
nexttowardf.o \
|
||||
pow10l.o \
|
||||
powil.o \
|
||||
powl.o \
|
||||
remainder.o \
|
||||
remainderf.o \
|
||||
remainderl.o \
|
||||
remquol.o \
|
||||
rint.o \
|
||||
rintf.o \
|
||||
rintl.o \
|
||||
roundl.o \
|
||||
scalbl.o \
|
||||
scalbnl.o \
|
||||
sinhl.o \
|
||||
sinl.o \
|
||||
sinl_internal.o \
|
||||
sqrtl.o \
|
||||
tanhl.o \
|
||||
tanl.o \
|
||||
tgammal.o \
|
||||
truncl.o
|
||||
|
||||
DLL_OFILES:= \
|
||||
advapi32.o \
|
||||
arc4random_stir.o \
|
||||
|
@ -305,6 +400,7 @@ DLL_OFILES:= \
|
|||
xsique.o \
|
||||
$(EXTRA_OFILES) \
|
||||
$(MALLOC_OFILES) \
|
||||
$(MATH_OFILES) \
|
||||
$(MT_SAFE_OBJECTS)
|
||||
|
||||
EXCLUDE_STATIC_OFILES:=$(addprefix --exclude=,\
|
||||
|
@ -626,7 +722,7 @@ $(srcdir)/devices.cc: gendevices devices.in devices.h
|
|||
${CURDIR}/libc.a: ${LIB_NAME} ${CURDIR}/libm.a libpthread.a libutil.a
|
||||
${speclib} -v ${@F}
|
||||
|
||||
${CURDIR}/libm.a: ${LIB_NAME} $(LIBM)
|
||||
${CURDIR}/libm.a: ${LIB_NAME} $(LIBM) $(MATH_OFILES)
|
||||
${speclib} ${@F}
|
||||
|
||||
libpthread.a: ${LIB_NAME} pthread.o thread.o
|
||||
|
|
|
@ -64,10 +64,10 @@ __getpagesize = getpagesize SIGFE
|
|||
__getreent NOSIGFE
|
||||
__gnu_basename NOSIGFE
|
||||
__infinity NOSIGFE
|
||||
__isinfd NOSIGFE
|
||||
__isinff NOSIGFE
|
||||
__isnand NOSIGFE
|
||||
__isnanf NOSIGFE
|
||||
__isinfd = isinf NOSIGFE
|
||||
__isinff = isinff NOSIGFE
|
||||
__isnand = isnan NOSIGFE
|
||||
__isnanf = isnanf NOSIGFE
|
||||
__locale_mb_cur_max NOSIGFE
|
||||
__main NOSIGFE
|
||||
__mempcpy = mempcpy NOSIGFE
|
||||
|
@ -169,6 +169,8 @@ acos NOSIGFE
|
|||
acosf NOSIGFE
|
||||
acosh NOSIGFE
|
||||
acoshf NOSIGFE
|
||||
acoshl NOSIGFE
|
||||
acosl NOSIGFE
|
||||
alarm SIGFE
|
||||
aligned_alloc SIGFE
|
||||
alphasort NOSIGFE
|
||||
|
@ -195,14 +197,19 @@ asin NOSIGFE
|
|||
asinf NOSIGFE
|
||||
asinh NOSIGFE
|
||||
asinhf NOSIGFE
|
||||
asinhl NOSIGFE
|
||||
asinl NOSIGFE
|
||||
asnprintf SIGFE
|
||||
asprintf SIGFE
|
||||
atan NOSIGFE
|
||||
atan2 NOSIGFE
|
||||
atan2f NOSIGFE
|
||||
atan2l NOSIGFE
|
||||
atanf NOSIGFE
|
||||
atanh NOSIGFE
|
||||
atanhf NOSIGFE
|
||||
atanhl NOSIGFE
|
||||
atanl NOSIGFE
|
||||
atexit = cygwin_atexit SIGFE
|
||||
atof SIGFE
|
||||
atoff SIGFE
|
||||
|
@ -226,28 +233,40 @@ cacos NOSIGFE
|
|||
cacosf NOSIGFE
|
||||
cacosh NOSIGFE
|
||||
cacoshf NOSIGFE
|
||||
cacoshl NOSIGFE
|
||||
cacosl NOSIGFE
|
||||
calloc SIGFE
|
||||
canonicalize_file_name SIGFE
|
||||
carg NOSIGFE
|
||||
cargf NOSIGFE
|
||||
cargl NOSIGFE
|
||||
casin NOSIGFE
|
||||
casinf NOSIGFE
|
||||
casinh NOSIGFE
|
||||
casinhf NOSIGFE
|
||||
casinhl NOSIGFE
|
||||
casinl NOSIGFE
|
||||
catan NOSIGFE
|
||||
catanf NOSIGFE
|
||||
catanh NOSIGFE
|
||||
catanhf NOSIGFE
|
||||
catanhl NOSIGFE
|
||||
catanl NOSIGFE
|
||||
cbrt NOSIGFE
|
||||
cbrtf NOSIGFE
|
||||
cbrtl NOSIGFE
|
||||
ccos NOSIGFE
|
||||
ccosf NOSIGFE
|
||||
ccosh NOSIGFE
|
||||
ccoshf NOSIGFE
|
||||
ccoshl NOSIGFE
|
||||
ccosl NOSIGFE
|
||||
ceil NOSIGFE
|
||||
ceilf NOSIGFE
|
||||
ceill NOSIGFE
|
||||
cexp NOSIGFE
|
||||
cexpf NOSIGFE
|
||||
cexpl NOSIGFE
|
||||
cfgetispeed NOSIGFE
|
||||
cfgetospeed NOSIGFE
|
||||
cfmakeraw NOSIGFE
|
||||
|
@ -274,24 +293,32 @@ clock_settime SIGFE
|
|||
clog NOSIGFE
|
||||
clog10 NOSIGFE
|
||||
clog10f NOSIGFE
|
||||
clog10l NOSIGFE
|
||||
clogf NOSIGFE
|
||||
clogl NOSIGFE
|
||||
close SIGFE
|
||||
closedir SIGFE
|
||||
closelog SIGFE
|
||||
confstr NOSIGFE
|
||||
conj NOSIGFE
|
||||
conjf NOSIGFE
|
||||
conjl NOSIGFE
|
||||
connect = cygwin_connect SIGFE
|
||||
copysign NOSIGFE
|
||||
copysignf NOSIGFE
|
||||
copysignl NOSIGFE
|
||||
cos NOSIGFE
|
||||
cosf NOSIGFE
|
||||
cosh NOSIGFE
|
||||
coshf NOSIGFE
|
||||
coshl NOSIGFE
|
||||
cosl NOSIGFE
|
||||
cpow NOSIGFE
|
||||
cpowf NOSIGFE
|
||||
cpowl NOSIGFE
|
||||
cproj NOSIGFE
|
||||
cprojf NOSIGFE
|
||||
cprojl NOSIGFE
|
||||
creal NOSIGFE
|
||||
crealf NOSIGFE
|
||||
creall NOSIGFE
|
||||
|
@ -300,12 +327,17 @@ csin NOSIGFE
|
|||
csinf NOSIGFE
|
||||
csinh NOSIGFE
|
||||
csinhf NOSIGFE
|
||||
csinhl NOSIGFE
|
||||
csinl NOSIGFE
|
||||
csqrt NOSIGFE
|
||||
csqrtf NOSIGFE
|
||||
csqrtl NOSIGFE
|
||||
ctan NOSIGFE
|
||||
ctanf NOSIGFE
|
||||
ctanh NOSIGFE
|
||||
ctanhf NOSIGFE
|
||||
ctanhl NOSIGFE
|
||||
ctanl NOSIGFE
|
||||
ctermid SIGFE
|
||||
ctime SIGFE
|
||||
ctime_r SIGFE
|
||||
|
@ -342,8 +374,9 @@ dn_expand = __dn_expand SIGFE
|
|||
dn_skipname = __dn_skipname SIGFE
|
||||
dprintf SIGFE
|
||||
drand48 NOSIGFE
|
||||
drem NOSIGFE
|
||||
dremf NOSIGFE
|
||||
drem = remainder NOSIGFE
|
||||
dremf= remainderf NOSIGFE
|
||||
dreml= remainderl NOSIGFE
|
||||
dup SIGFE
|
||||
dup2 SIGFE
|
||||
dup3 SIGFE
|
||||
|
@ -370,7 +403,9 @@ erand48 NOSIGFE
|
|||
erf NOSIGFE
|
||||
erfc NOSIGFE
|
||||
erfcf NOSIGFE
|
||||
erfcl NOSIGFE
|
||||
erff NOSIGFE
|
||||
erfl NOSIGFE
|
||||
err SIGFE
|
||||
error SIGFE
|
||||
error_at_line SIGFE
|
||||
|
@ -387,13 +422,18 @@ exit = cygwin_exit SIGFE
|
|||
exp NOSIGFE
|
||||
exp10 NOSIGFE
|
||||
exp10f NOSIGFE
|
||||
exp10l NOSIGFE
|
||||
exp2 NOSIGFE
|
||||
exp2f NOSIGFE
|
||||
exp2l NOSIGFE
|
||||
expf NOSIGFE
|
||||
expl NOSIGFE
|
||||
expm1 NOSIGFE
|
||||
expm1f NOSIGFE
|
||||
expm1l NOSIGFE
|
||||
fabs NOSIGFE
|
||||
fabsf NOSIGFE
|
||||
fabsl NOSIGFE
|
||||
faccessat SIGFE
|
||||
facl SIGFE
|
||||
fchdir SIGFE
|
||||
|
@ -410,6 +450,7 @@ fcvtf SIGFE
|
|||
fdatasync SIGFE
|
||||
fdim NOSIGFE
|
||||
fdimf NOSIGFE
|
||||
fdiml NOSIGFE
|
||||
fdopen SIGFE
|
||||
fdopendir SIGFE
|
||||
feclearexcept NOSIGFE
|
||||
|
@ -459,15 +500,20 @@ flock SIGFE
|
|||
flockfile SIGFE
|
||||
floor NOSIGFE
|
||||
floorf NOSIGFE
|
||||
floorl NOSIGFE
|
||||
fma NOSIGFE
|
||||
fmaf NOSIGFE
|
||||
fmal NOSIGFE
|
||||
fmax NOSIGFE
|
||||
fmaxf NOSIGFE
|
||||
fmaxl NOSIGFE
|
||||
fmemopen SIGFE
|
||||
fmin NOSIGFE
|
||||
fminf NOSIGFE
|
||||
fminl NOSIGFE
|
||||
fmod NOSIGFE
|
||||
fmodf NOSIGFE
|
||||
fmodl NOSIGFE
|
||||
fnmatch NOSIGFE
|
||||
fopen SIGFE
|
||||
fopencookie SIGFE
|
||||
|
@ -493,6 +539,7 @@ fremovexattr SIGFE
|
|||
freopen SIGFE
|
||||
frexp NOSIGFE
|
||||
frexpf NOSIGFE
|
||||
frexpl NOSIGFE
|
||||
fscanf SIGFE
|
||||
fseek SIGFE
|
||||
fseeko SIGFE
|
||||
|
@ -650,6 +697,7 @@ if_nameindex SIGFE
|
|||
if_nametoindex SIGFE
|
||||
ilogb NOSIGFE
|
||||
ilogbf NOSIGFE
|
||||
ilogbl NOSIGFE
|
||||
imaxabs = llabs NOSIGFE
|
||||
imaxdiv = lldiv NOSIGFE
|
||||
index NOSIGFE
|
||||
|
@ -680,9 +728,11 @@ isdigit NOSIGFE
|
|||
isgraph NOSIGFE
|
||||
isinf NOSIGFE
|
||||
isinff NOSIGFE
|
||||
isinfl NOSIGFE
|
||||
islower NOSIGFE
|
||||
isnan NOSIGFE
|
||||
isnanf NOSIGFE
|
||||
isnanl NOSIGFE
|
||||
isprint NOSIGFE
|
||||
ispunct NOSIGFE
|
||||
issetugid NOSIGFE
|
||||
|
@ -717,12 +767,15 @@ lchown SIGFE
|
|||
lcong48 NOSIGFE
|
||||
ldexp NOSIGFE
|
||||
ldexpf NOSIGFE
|
||||
ldexpl NOSIGFE
|
||||
ldiv NOSIGFE
|
||||
lfind NOSIGFE
|
||||
lgamma NOSIGFE
|
||||
lgamma_r NOSIGFE
|
||||
lgammaf NOSIGFE
|
||||
lgammaf_r NOSIGFE
|
||||
lgammal NOSIGFE
|
||||
lgammal_r NOSIGFE
|
||||
lgetxattr SIGFE
|
||||
link SIGFE
|
||||
linkat SIGFE
|
||||
|
@ -731,8 +784,12 @@ listxattr SIGFE
|
|||
llabs NOSIGFE
|
||||
lldiv NOSIGFE
|
||||
llistxattr SIGFE
|
||||
llrint NOSIGFE
|
||||
llrintf NOSIGFE
|
||||
llrintl NOSIGFE
|
||||
llround NOSIGFE
|
||||
llroundf NOSIGFE
|
||||
llroundl NOSIGFE
|
||||
localeconv NOSIGFE
|
||||
localtime SIGFE
|
||||
localtime_r SIGFE
|
||||
|
@ -740,13 +797,18 @@ lockf SIGFE
|
|||
log NOSIGFE
|
||||
log10 NOSIGFE
|
||||
log10f NOSIGFE
|
||||
log10l NOSIGFE
|
||||
log1p NOSIGFE
|
||||
log1pf NOSIGFE
|
||||
log1pl NOSIGFE
|
||||
log2 NOSIGFE
|
||||
log2f NOSIGFE
|
||||
log2l NOSIGFE
|
||||
logb NOSIGFE
|
||||
logbf NOSIGFE
|
||||
logbl NOSIGFE
|
||||
logf NOSIGFE
|
||||
logl NOSIGFE
|
||||
login SIGFE
|
||||
login_tty SIGFE
|
||||
logout SIGFE
|
||||
|
@ -754,8 +816,12 @@ logwtmp SIGFE
|
|||
longjmp NOSIGFE
|
||||
lrand48 NOSIGFE
|
||||
lremovexattr SIGFE
|
||||
lrint NOSIGFE
|
||||
lrintf NOSIGFE
|
||||
lrintl NOSIGFE
|
||||
lround NOSIGFE
|
||||
lroundf NOSIGFE
|
||||
lroundl NOSIGFE
|
||||
lsearch NOSIGFE
|
||||
lseek SIGFE
|
||||
lsetxattr SIGFE
|
||||
|
@ -805,6 +871,7 @@ mlock SIGFE
|
|||
mmap SIGFE
|
||||
modf NOSIGFE
|
||||
modff NOSIGFE
|
||||
modfl NOSIGFE
|
||||
mount SIGFE
|
||||
mprotect SIGFE
|
||||
mq_close SIGFE
|
||||
|
@ -830,8 +897,13 @@ nanf NOSIGFE
|
|||
nanosleep SIGFE
|
||||
nearbyint NOSIGFE
|
||||
nearbyintf NOSIGFE
|
||||
nearbyintl NOSIGFE
|
||||
nextafter NOSIGFE
|
||||
nextafterf NOSIGFE
|
||||
nextafterl NOSIGFE
|
||||
nexttoward NOSIGFE
|
||||
nexttowardf NOSIGFE
|
||||
nexttowardl NOSIGFE
|
||||
nftw SIGFE
|
||||
nice SIGFE
|
||||
nl_langinfo SIGFE
|
||||
|
@ -883,7 +955,9 @@ posix_spawn_file_actions_addopen SIGFE
|
|||
pow NOSIGFE
|
||||
pow10 NOSIGFE
|
||||
pow10f NOSIGFE
|
||||
pow10l NOSIGFE
|
||||
powf NOSIGFE
|
||||
powl NOSIGFE
|
||||
ppoll SIGFE
|
||||
pread SIGFE
|
||||
printf SIGFE
|
||||
|
@ -1037,11 +1111,13 @@ regexec SIGFE
|
|||
regfree SIGFE
|
||||
remainder NOSIGFE
|
||||
remainderf NOSIGFE
|
||||
remainderl NOSIGFE
|
||||
remove SIGFE
|
||||
removexattr SIGFE
|
||||
remque NOSIGFE
|
||||
remquo NOSIGFE
|
||||
remquof NOSIGFE
|
||||
remquol NOSIGFE
|
||||
rename SIGFE
|
||||
renameat SIGFE
|
||||
res_close = __res_close SIGFE
|
||||
|
@ -1063,9 +1139,13 @@ rewind SIGFE
|
|||
rewinddir SIGFE
|
||||
rexec = cygwin_rexec SIGFE
|
||||
rindex NOSIGFE
|
||||
rint NOSIGFE
|
||||
rintf NOSIGFE
|
||||
rintl NOSIGFE
|
||||
rmdir SIGFE
|
||||
round NOSIGFE
|
||||
roundf NOSIGFE
|
||||
roundl NOSIGFE
|
||||
rpmatch SIGFE
|
||||
rresvport = cygwin_rresvport SIGFE
|
||||
rresvport_af = cygwin_rresvport_af SIGFE
|
||||
|
@ -1073,10 +1153,13 @@ ruserok SIGFE
|
|||
sbrk SIGFE
|
||||
scalb NOSIGFE
|
||||
scalbf NOSIGFE
|
||||
scalbl NOSIGFE
|
||||
scalbln NOSIGFE
|
||||
scalblnf NOSIGFE
|
||||
scalblnl NOSIGFE
|
||||
scalbn NOSIGFE
|
||||
scalbnf NOSIGFE
|
||||
scalbnl NOSIGFE
|
||||
scandir SIGFE
|
||||
scandirat SIGFE
|
||||
scanf SIGFE
|
||||
|
@ -1180,9 +1263,12 @@ sigwaitinfo SIGFE
|
|||
sin NOSIGFE
|
||||
sincos NOSIGFE
|
||||
sincosf NOSIGFE
|
||||
sincosl NOSIGFE
|
||||
sinf NOSIGFE
|
||||
sinh NOSIGFE
|
||||
sinhf NOSIGFE
|
||||
sinhl NOSIGFE
|
||||
sinl NOSIGFE
|
||||
siprintf SIGFE
|
||||
sleep SIGFE
|
||||
snprintf SIGFE
|
||||
|
@ -1271,6 +1357,8 @@ tan NOSIGFE
|
|||
tanf NOSIGFE
|
||||
tanh NOSIGFE
|
||||
tanhf NOSIGFE
|
||||
tanhl NOSIGFE
|
||||
tanl NOSIGFE
|
||||
tcdrain SIGFE
|
||||
tcflow SIGFE
|
||||
tcflush SIGFE
|
||||
|
@ -1287,6 +1375,7 @@ tempnam SIGFE
|
|||
tfind NOSIGFE
|
||||
tgamma NOSIGFE
|
||||
tgammaf NOSIGFE
|
||||
tgammal NOSIGFE
|
||||
time SIGFE
|
||||
timegm NOSIGFE
|
||||
timelocal SIGFE
|
||||
|
@ -1307,6 +1396,7 @@ towupper NOSIGFE
|
|||
trunc NOSIGFE
|
||||
truncate SIGFE
|
||||
truncf NOSIGFE
|
||||
truncl NOSIGFE
|
||||
tsearch SIGFE
|
||||
ttyname SIGFE
|
||||
ttyname_r SIGFE
|
||||
|
|
|
@ -164,21 +164,21 @@ _f_frexp NOSIGFE
|
|||
_f_frexpf NOSIGFE
|
||||
_f_ldexp NOSIGFE
|
||||
_f_ldexpf NOSIGFE
|
||||
_f_llrint NOSIGFE
|
||||
_f_llrintf NOSIGFE
|
||||
_f_llrintl NOSIGFE
|
||||
_f_llrint = llrint NOSIGFE
|
||||
_f_llrintf = llrintf NOSIGFE
|
||||
_f_llrintl = llrintl NOSIGFE
|
||||
_f_log NOSIGFE
|
||||
_f_log10 NOSIGFE
|
||||
_f_log10f NOSIGFE
|
||||
_f_logf NOSIGFE
|
||||
_f_lrint NOSIGFE
|
||||
_f_lrintf NOSIGFE
|
||||
_f_lrintl NOSIGFE
|
||||
_f_lrint = lrint NOSIGFE
|
||||
_f_lrintf = lrintf NOSIGFE
|
||||
_f_lrintl = lrintl NOSIGFE
|
||||
_f_pow NOSIGFE
|
||||
_f_powf NOSIGFE
|
||||
_f_rint NOSIGFE
|
||||
_f_rintf NOSIGFE
|
||||
_f_rintl NOSIGFE
|
||||
_f_rint = rint NOSIGFE
|
||||
_f_rintf = rintf NOSIGFE
|
||||
_f_rintl = rintl NOSIGFE
|
||||
_f_tan NOSIGFE
|
||||
_f_tanf NOSIGFE
|
||||
_fabs = fabs NOSIGFE
|
||||
|
@ -622,19 +622,10 @@ fscanf_r = _fscanf_r SIGFE
|
|||
get_osfhandle = _get_osfhandle SIGFE
|
||||
getpwduid NOSIGFE
|
||||
lacl SIGFE
|
||||
llrint = _f_llrint NOSIGFE
|
||||
llrintf = _f_llrintf NOSIGFE
|
||||
llrintl = _f_llrintl NOSIGFE
|
||||
lrint = _f_lrint NOSIGFE
|
||||
lrintf = _f_lrintf NOSIGFE
|
||||
lrintl = _f_lrintl NOSIGFE
|
||||
posix_regcomp = regcomp SIGFE
|
||||
posix_regerror = regerror SIGFE
|
||||
posix_regexec = regexec SIGFE
|
||||
posix_regfree = regfree SIGFE
|
||||
rint = _f_rint NOSIGFE
|
||||
rintf = _f_rintf NOSIGFE
|
||||
rintl = _f_rintl NOSIGFE
|
||||
scanf_r = _scanf_r SIGFE
|
||||
setmode = cygwin_setmode SIGFE
|
||||
setregid32 SIGFE
|
||||
|
|
|
@ -478,13 +478,24 @@ details. */
|
|||
294: Export clog10, clog10f.
|
||||
295: Export POSIX ACL functions.
|
||||
296: Export __getpagesize.
|
||||
297: Export missing math functions, acoshl, acosl, asinhl, asinl, atan2l,
|
||||
atanhl, atanl, cacoshl, cacosl, cargl, casinhl, casinl, catanhl,
|
||||
catanl, ccoshl, ccosl, ceill, cexpl, clog10l, clogl, conjl,
|
||||
copysignl, coshl, cosl, cpowl, cprojl, csinhl, csinl, csqrtl, ctanhl,
|
||||
ctanl, dreml, erfcl, erfl, exp10l, exp2l, expl, expm1l, fabsl, fdiml,
|
||||
floorl, fmal, fmaxl, fminl, fmodl, frexpl, ilogbl, isinfl, isnanl,
|
||||
ldexpl, lgammal, lgammal_r, llroundl, log10l, log1pl, log2l, logbl,
|
||||
logl, lroundl, modfl, nearbyintl, nextafterl, nexttoward,
|
||||
nexttowardf, nexttowardl, pow10l, powl, remainderl, remquol, roundl,
|
||||
scalbl, scalblnl, scalbnl, sincosl, sinhl, sinl, tanhl, tanl,
|
||||
tgammal, truncl.
|
||||
*/
|
||||
|
||||
/* Note that we forgot to bump the api for ualarm, strtoll, strtoull,
|
||||
sigaltstack, sethostname. */
|
||||
|
||||
#define CYGWIN_VERSION_API_MAJOR 0
|
||||
#define CYGWIN_VERSION_API_MINOR 296
|
||||
#define CYGWIN_VERSION_API_MINOR 297
|
||||
|
||||
/* There is also a compatibity version number associated with the
|
||||
shared memory regions. It is incremented when incompatible
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
#ifndef _LOCAL_MATH_H_
|
||||
#define _LOCAL_MATH_H_
|
||||
|
||||
/* This header is required to define the types used by some of the
|
||||
mingw-w64 based files in the math subdir. */
|
||||
|
||||
typedef union __mingw_dbl_type_t {
|
||||
double x;
|
||||
unsigned long long val;
|
||||
struct {
|
||||
unsigned int low, high;
|
||||
} lh;
|
||||
} __mingw_dbl_type_t;
|
||||
|
||||
typedef union __mingw_flt_type_t {
|
||||
float x;
|
||||
unsigned int val;
|
||||
} __mingw_flt_type_t;
|
||||
|
||||
typedef union __mingw_ldbl_type_t
|
||||
{
|
||||
long double x;
|
||||
struct {
|
||||
unsigned int low, high;
|
||||
int sign_exponent : 16;
|
||||
int res1 : 16;
|
||||
int res0 : 32;
|
||||
} lh;
|
||||
} __mingw_ldbl_type_t;
|
||||
|
||||
typedef union __mingw_fp_types_t
|
||||
{
|
||||
long double *ld;
|
||||
double *d;
|
||||
float *f;
|
||||
__mingw_ldbl_type_t *ldt;
|
||||
__mingw_dbl_type_t *dt;
|
||||
__mingw_flt_type_t *ft;
|
||||
} __mingw_fp_types_t;
|
||||
|
||||
#include_next <math.h>
|
||||
|
||||
#endif /* _LOCAL_MATH_H_ */
|
|
@ -0,0 +1,9 @@
|
|||
/**
|
||||
* DISCLAIMER
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
*
|
||||
* Its code is distributed in the hope that it will be useful but WITHOUT
|
||||
* ANY WARRANTY. ALL WARRANTIES, EXPRESSED OR IMPLIED ARE HEREBY DISCLAIMED.
|
||||
* This includes but is not limited to warranties of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*/
|
|
@ -0,0 +1,70 @@
|
|||
/*
|
||||
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 "complex_internal.h"
|
||||
#include <errno.h>
|
||||
#include "fastmath.h"
|
||||
|
||||
__FLT_TYPE
|
||||
__FLT_ABI(acosh) (__FLT_TYPE x)
|
||||
{
|
||||
int x_class = fpclassify (x);
|
||||
if (x_class == FP_NAN || x < __FLT_CST(1.0))
|
||||
{
|
||||
__FLT_RPT_DOMAIN ("acosh", x, 0.0, __FLT_NAN);
|
||||
return __FLT_NAN;
|
||||
}
|
||||
else if (x_class == FP_INFINITE)
|
||||
{
|
||||
__FLT_RPT_DOMAIN ("acosh", x, 0.0, __FLT_NAN);
|
||||
return __FLT_NAN;
|
||||
}
|
||||
|
||||
if (x > __FLT_CST(0x1p32))
|
||||
return __FLT_ABI (__fast_log) (x) + 6.9314718055994530941723E-1L;
|
||||
|
||||
return __FLT_ABI (__fast_log) (x +
|
||||
__FLT_ABI (__fast_sqrt) ((x + __FLT_CST(1.0)) * (x - __FLT_CST(1.0))));
|
||||
}
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
#define _NEW_COMPLEX_LDOUBLE 1
|
||||
#include "acosh.def.h"
|
|
@ -0,0 +1,22 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the mingw-w64 runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
|
||||
*/
|
||||
long double acosl (long double x);
|
||||
|
||||
long double acosl (long double x)
|
||||
{
|
||||
long double res = 0.0L;
|
||||
|
||||
/* acosl = atanl (sqrtl(1 - x^2) / x) */
|
||||
asm ( "fld %%st\n\t"
|
||||
"fmul %%st(0)\n\t" /* x^2 */
|
||||
"fld1\n\t"
|
||||
"fsubp\n\t" /* 1 - x^2 */
|
||||
"fsqrt\n\t" /* sqrtl (1 - x^2) */
|
||||
"fxch %%st(1)\n\t"
|
||||
"fpatan"
|
||||
: "=t" (res) : "0" (x) : "st(1)");
|
||||
return res;
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the mingw-w64 runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
|
||||
*/
|
||||
#include <math.h>
|
||||
#include <errno.h>
|
||||
#include "fastmath.h"
|
||||
|
||||
/* asinh(x) = copysign(log(fabs(x) + sqrt(x * x + 1.0)), x) */
|
||||
long double asinhl(long double x)
|
||||
{
|
||||
long double z;
|
||||
if (!isfinite (x))
|
||||
return x;
|
||||
|
||||
z = fabsl (x);
|
||||
|
||||
/* Avoid setting FPU underflow exception flag in x * x. */
|
||||
#if 0
|
||||
if ( z < 0x1p-32)
|
||||
return x;
|
||||
#endif
|
||||
|
||||
/* Use log1p to avoid cancellation with small x. Put
|
||||
x * x in denom, so overflow is harmless.
|
||||
asinh(x) = log1p (x + sqrt (x * x + 1.0) - 1.0)
|
||||
= log1p (x + x * x / (sqrt (x * x + 1.0) + 1.0)) */
|
||||
|
||||
z = __fast_log1pl (z + z * z / (__fast_sqrtl (z * z + 1.0L) + 1.0L));
|
||||
|
||||
return ( x > 0.0 ? z : -z);
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the mingw-w64 runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
|
||||
*/
|
||||
/*
|
||||
* Written by J.T. Conklin <jtc@netbsd.org>.
|
||||
* Public domain.
|
||||
* Adapted for long double type by Danny Smith <dannysmith@users.sourceforge.net>.
|
||||
*/
|
||||
|
||||
/* asin = atan (x / sqrt(1 - x^2)) */
|
||||
long double asinl (long double x);
|
||||
|
||||
long double asinl (long double x)
|
||||
{
|
||||
long double res = 0.0L;
|
||||
|
||||
asm ( "fld %%st\n\t"
|
||||
"fmul %%st(0)\n\t" /* x^2 */
|
||||
"fld1\n\t"
|
||||
"fsubp\n\t" /* 1 - x^2 */
|
||||
"fsqrt\n\t" /* sqrt (1 - x^2) */
|
||||
"fpatan"
|
||||
: "=t" (res) : "0" (x) : "st(1)");
|
||||
return res;
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the mingw-w64 runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
|
||||
*/
|
||||
long double atan2l (long double y, long double x);
|
||||
|
||||
long double
|
||||
atan2l (long double y, long double x)
|
||||
{
|
||||
long double res = 0.0L;
|
||||
asm ("fpatan" : "=t" (res) : "u" (y), "0" (x) : "st(1)");
|
||||
return res;
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the mingw-w64 runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
|
||||
*/
|
||||
#include <math.h>
|
||||
#include <errno.h>
|
||||
#include "fastmath.h"
|
||||
|
||||
/* atanh (x) = 0.5 * log ((1.0 + x)/(1.0 - x)) */
|
||||
long double atanhl (long double x)
|
||||
{
|
||||
long double z;
|
||||
if (isnan (x))
|
||||
return x;
|
||||
z = fabsl (x);
|
||||
if (z == 1.0L)
|
||||
{
|
||||
errno = ERANGE;
|
||||
return (x > 0 ? INFINITY : -INFINITY);
|
||||
}
|
||||
if ( z > 1.0L)
|
||||
{
|
||||
errno = EDOM;
|
||||
return nanl("");
|
||||
}
|
||||
/* Rearrange formula to avoid precision loss for small x.
|
||||
atanh(x) = 0.5 * log ((1.0 + x)/(1.0 - x))
|
||||
= 0.5 * log1p ((1.0 + x)/(1.0 - x) - 1.0)
|
||||
= 0.5 * log1p ((1.0 + x - 1.0 + x) /(1.0 - x))
|
||||
= 0.5 * log1p ((2.0 * x ) / (1.0 - x)) */
|
||||
z = 0.5L * __fast_log1pl ((z + z) / (1.0L - z));
|
||||
return x >= 0 ? z : -z;
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the mingw-w64 runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
|
||||
*/
|
||||
long double atanl (long double x);
|
||||
|
||||
long double
|
||||
atanl (long double x)
|
||||
{
|
||||
long double res = 0.0L;
|
||||
|
||||
asm ("fld1\n\t"
|
||||
"fpatan"
|
||||
: "=t" (res) : "0" (x));
|
||||
return res;
|
||||
}
|
|
@ -0,0 +1,49 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
__FLT_TYPE __cdecl
|
||||
__FLT_ABI(cabs) (__FLT_TYPE __complex__ z)
|
||||
{
|
||||
return __FLT_ABI(hypot) (__real__ z, __imag__ z);
|
||||
}
|
|
@ -0,0 +1,48 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
/* long double version of the functions. */
|
||||
#define _NEW_COMPLEX_LDOUBLE 1
|
||||
#include "complex_internal.h"
|
||||
#include "cabs.def.h"
|
|
@ -0,0 +1,57 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
__FLT_TYPE __complex__ __cdecl
|
||||
__FLT_ABI(cacos) (__FLT_TYPE __complex__ z)
|
||||
{
|
||||
__complex__ __FLT_TYPE x;
|
||||
__complex__ __FLT_TYPE ret;
|
||||
|
||||
x = __FLT_ABI(casin) (z);
|
||||
|
||||
__real__ ret = (__FLT_TYPE) __FLT_PI_2 - __real__ x;
|
||||
__imag__ ret = -__imag__ x;
|
||||
|
||||
return ret;
|
||||
}
|
|
@ -0,0 +1,100 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
__FLT_TYPE __complex__ __cdecl
|
||||
__FLT_ABI(cacosh) (__FLT_TYPE __complex__ z)
|
||||
{
|
||||
__complex__ __FLT_TYPE ret;
|
||||
__complex__ __FLT_TYPE x;
|
||||
int r_class = fpclassify (__real__ z);
|
||||
int i_class = fpclassify (__imag__ z);
|
||||
|
||||
if (i_class == FP_INFINITE)
|
||||
{
|
||||
__real__ ret = __FLT_HUGE_VAL;
|
||||
__imag__ ret = (r_class == FP_NAN ? __FLT_NAN : __FLT_ABI(copysign) (
|
||||
(r_class == FP_INFINITE ? (__real__ z < __FLT_CST(0.0) ? __FLT_PI_3_4 : __FLT_PI_4) : __FLT_PI_2), __imag__ z));
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (r_class == FP_INFINITE)
|
||||
{
|
||||
__real__ ret = __FLT_HUGE_VAL;
|
||||
__imag__ ret = ((i_class != FP_NAN && i_class != FP_INFINITE)
|
||||
? __FLT_ABI(copysign) (signbit (__real__ z) ? __FLT_PI : __FLT_CST(0.0), __imag__ z) : __FLT_NAN);
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (r_class == FP_NAN || i_class == FP_NAN)
|
||||
{
|
||||
__real__ ret = __FLT_NAN;
|
||||
__imag__ ret = __FLT_NAN;
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (r_class == FP_ZERO && i_class == FP_ZERO)
|
||||
{
|
||||
__real__ ret = __FLT_CST(0.0);
|
||||
__imag__ ret = __FLT_ABI(copysign) (__FLT_PI_2, __imag__ z);
|
||||
return ret;
|
||||
}
|
||||
|
||||
__real__ x = (__real__ z - __imag__ z) * (__real__ z + __imag__ z) - __FLT_CST(1.0);
|
||||
__imag__ x = __FLT_CST(2.0) * __real__ z * __imag__ z;
|
||||
|
||||
x = __FLT_ABI(csqrt) (x);
|
||||
|
||||
if (__real__ z < __FLT_CST(0.0))
|
||||
x = -x;
|
||||
|
||||
__real__ x += __real__ z;
|
||||
__imag__ x += __imag__ z;
|
||||
|
||||
ret = __FLT_ABI(clog) (x);
|
||||
|
||||
if (__real__ ret < __FLT_CST(0.0))
|
||||
ret = -ret;
|
||||
|
||||
return ret;
|
||||
}
|
|
@ -0,0 +1,50 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
/* long double version of the functions. */
|
||||
#define _NEW_COMPLEX_LDOUBLE 1
|
||||
#include "complex_internal.h"
|
||||
|
||||
#include "cacosh.def.h"
|
||||
#include "cacos.def.h"
|
|
@ -0,0 +1,49 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
__FLT_TYPE __cdecl
|
||||
__FLT_ABI(carg) (__FLT_TYPE __complex__ z)
|
||||
{
|
||||
return __FLT_ABI(atan2) (__imag__ z, __real__ z);
|
||||
}
|
|
@ -0,0 +1,48 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
/* long double version of the functions. */
|
||||
#define _NEW_COMPLEX_LDOUBLE 1
|
||||
#include "complex_internal.h"
|
||||
#include "carg.def.h"
|
|
@ -0,0 +1,61 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
__FLT_TYPE __complex__ __cdecl
|
||||
__FLT_ABI(casin) (__FLT_TYPE __complex__ z)
|
||||
{
|
||||
/* Annex G.6: casin(z) = -i casinh (iz) */
|
||||
__complex__ __FLT_TYPE ret;
|
||||
__complex__ __FLT_TYPE x;
|
||||
|
||||
__real__ x = -__imag__ z;
|
||||
__imag__ x = __real__ z;
|
||||
|
||||
x = __FLT_ABI(casinh) (x);
|
||||
|
||||
__real__ ret = __imag__ x;
|
||||
__imag__ ret = -__real__ x;
|
||||
|
||||
return ret;
|
||||
}
|
|
@ -0,0 +1,99 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
__FLT_TYPE __complex__ __cdecl
|
||||
__FLT_ABI(casinh) (__FLT_TYPE __complex__ z)
|
||||
{
|
||||
__complex__ __FLT_TYPE ret;
|
||||
__complex__ __FLT_TYPE x;
|
||||
int r_class = fpclassify (__real__ z);
|
||||
int i_class = fpclassify (__imag__ z);
|
||||
|
||||
if (i_class == FP_INFINITE)
|
||||
{
|
||||
__real__ ret = __FLT_ABI(copysign) (__FLT_HUGE_VAL, __real__ z);
|
||||
__imag__ ret = (r_class == FP_NAN
|
||||
? __FLT_NAN
|
||||
: (__FLT_ABI(copysign) ((r_class != FP_NAN && r_class != FP_INFINITE) ? __FLT_PI_2 : __FLT_PI_4, __imag__ z)));
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (r_class == FP_INFINITE)
|
||||
{
|
||||
__real__ ret = __real__ z;
|
||||
__imag__ ret = (i_class != FP_NAN
|
||||
? __FLT_ABI(copysign) (__FLT_CST(0.0), __imag__ z)
|
||||
: __FLT_NAN);
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (r_class == FP_NAN)
|
||||
{
|
||||
__real__ ret = __real__ z;
|
||||
__imag__ ret = (i_class == FP_ZERO
|
||||
? __FLT_ABI(copysign) (__FLT_CST(0.0), __imag__ z)
|
||||
: __FLT_NAN);
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (i_class == FP_NAN)
|
||||
{
|
||||
__real__ ret = __FLT_NAN;
|
||||
__imag__ ret = __FLT_NAN;
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (r_class == FP_ZERO && i_class == FP_ZERO)
|
||||
return z;
|
||||
|
||||
__real__ x = (__real__ z - __imag__ z) * (__real__ z + __imag__ z) + __FLT_CST(1.0);
|
||||
__imag__ x = __FLT_CST(2.0) * __real__ z * __imag__ z;
|
||||
|
||||
x = __FLT_ABI(csqrt) (x);
|
||||
|
||||
__real__ x += __real__ z;
|
||||
__imag__ x += __imag__ z;
|
||||
|
||||
return __FLT_ABI(clog) (x);
|
||||
}
|
|
@ -0,0 +1,50 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
/* long double version of the functions. */
|
||||
#define _NEW_COMPLEX_LDOUBLE 1
|
||||
#include "complex_internal.h"
|
||||
|
||||
#include "casinh.def.h"
|
||||
#include "casin.def.h"
|
|
@ -0,0 +1,61 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
__FLT_TYPE __complex__ __cdecl
|
||||
__FLT_ABI(catan) (__FLT_TYPE __complex__ z)
|
||||
{
|
||||
/* Annex G.6: catan(z) = -i catanh (iz) */
|
||||
__complex__ __FLT_TYPE ret;
|
||||
__complex__ __FLT_TYPE x;
|
||||
|
||||
__real__ x = -__imag__ z;
|
||||
__imag__ x = __real__ z;
|
||||
|
||||
x = __FLT_ABI(catanh) (x);
|
||||
|
||||
__real__ ret = __imag__ x;
|
||||
__imag__ ret = -__real__ x;
|
||||
|
||||
return ret;
|
||||
}
|
|
@ -0,0 +1,93 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
__FLT_TYPE __complex__ __cdecl
|
||||
__FLT_ABI(catanh) (__FLT_TYPE __complex__ z)
|
||||
{
|
||||
__complex__ __FLT_TYPE ret;
|
||||
__FLT_TYPE i2, n, d;
|
||||
int r_class = fpclassify (__real__ z);
|
||||
int i_class = fpclassify (__imag__ z);
|
||||
|
||||
if (r_class == FP_INFINITE || r_class == FP_NAN || i_class == FP_INFINITE || i_class == FP_NAN)
|
||||
{
|
||||
if (i_class == FP_INFINITE)
|
||||
{
|
||||
__real__ ret = __FLT_ABI(copysign) (__FLT_CST(0.0), __real__ z);
|
||||
__imag__ ret = __FLT_ABI(copysign) (__FLT_PI_2, __imag__ z);
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (r_class == FP_INFINITE || r_class == FP_ZERO)
|
||||
{
|
||||
__real__ ret = __FLT_ABI(copysign) (__FLT_CST(0.0), __real__ z);
|
||||
__imag__ ret = ((i_class != FP_NAN && i_class != FP_INFINITE)
|
||||
? __FLT_ABI(copysign) (__FLT_PI_2, __imag__ z) : __FLT_NAN);
|
||||
return ret;
|
||||
}
|
||||
|
||||
__real__ ret = __FLT_NAN;
|
||||
__imag__ ret = __FLT_NAN;
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (r_class == FP_ZERO && i_class == FP_ZERO)
|
||||
return z;
|
||||
|
||||
i2 = __imag__ z * __imag__ z;
|
||||
|
||||
n = __FLT_CST(1.0) + __real__ z;
|
||||
n = i2 + n * n;
|
||||
|
||||
d = __FLT_CST(1.0) - __real__ z;
|
||||
d = i2 + d * d;
|
||||
|
||||
__real__ ret = __FLT_CST(0.25) * (__FLT_ABI(log) (n) - __FLT_ABI(log) (d));
|
||||
|
||||
d = 1 - __real__ z * __real__ z - i2;
|
||||
|
||||
__imag__ ret = __FLT_CST(0.5) * __FLT_ABI(atan2) (__FLT_CST(2.0) * __imag__ z, d);
|
||||
|
||||
return ret;
|
||||
}
|
|
@ -0,0 +1,50 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
/* long double version of the functions. */
|
||||
#define _NEW_COMPLEX_LDOUBLE 1
|
||||
#include "complex_internal.h"
|
||||
|
||||
#include "catanh.def.h"
|
||||
#include "catan.def.h"
|
|
@ -0,0 +1,80 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the mingw-w64 runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
|
||||
*/
|
||||
#include <math.h>
|
||||
|
||||
static const long double CBRT2 = 1.2599210498948731647672L;
|
||||
static const long double CBRT4 = 1.5874010519681994747517L;
|
||||
static const long double CBRT2I = 0.79370052598409973737585L;
|
||||
static const long double CBRT4I = 0.62996052494743658238361L;
|
||||
|
||||
long double cbrtl(long double x)
|
||||
{
|
||||
int e, rem, sign;
|
||||
long double z;
|
||||
|
||||
if (!isfinite (x) || x == 0.0L)
|
||||
return (x);
|
||||
|
||||
if (x > 0)
|
||||
sign = 1;
|
||||
else
|
||||
{
|
||||
sign = -1;
|
||||
x = -x;
|
||||
}
|
||||
|
||||
z = x;
|
||||
/* extract power of 2, leaving
|
||||
* mantissa between 0.5 and 1
|
||||
*/
|
||||
x = frexpl(x, &e);
|
||||
|
||||
/* Approximate cube root of number between .5 and 1,
|
||||
* peak relative error = 1.2e-6
|
||||
*/
|
||||
x = (((( 1.3584464340920900529734e-1L * x
|
||||
- 6.3986917220457538402318e-1L) * x
|
||||
+ 1.2875551670318751538055e0L) * x
|
||||
- 1.4897083391357284957891e0L) * x
|
||||
+ 1.3304961236013647092521e0L) * x
|
||||
+ 3.7568280825958912391243e-1L;
|
||||
|
||||
/* exponent divided by 3 */
|
||||
if (e >= 0)
|
||||
{
|
||||
rem = e;
|
||||
e /= 3;
|
||||
rem -= 3*e;
|
||||
if (rem == 1)
|
||||
x *= CBRT2;
|
||||
else if (rem == 2)
|
||||
x *= CBRT4;
|
||||
}
|
||||
else
|
||||
{ /* argument less than 1 */
|
||||
e = -e;
|
||||
rem = e;
|
||||
e /= 3;
|
||||
rem -= 3*e;
|
||||
if (rem == 1)
|
||||
x *= CBRT2I;
|
||||
else if (rem == 2)
|
||||
x *= CBRT4I;
|
||||
e = -e;
|
||||
}
|
||||
|
||||
/* multiply by power of 2 */
|
||||
x = ldexpl(x, e);
|
||||
|
||||
/* Newton iteration */
|
||||
|
||||
x -= ( x - (z/(x*x)) )*0.3333333333333333333333L;
|
||||
x -= ( x - (z/(x*x)) )*0.3333333333333333333333L;
|
||||
|
||||
if (sign < 0)
|
||||
x = -x;
|
||||
return (x);
|
||||
}
|
|
@ -0,0 +1,54 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
__FLT_TYPE __complex__ __cdecl
|
||||
__FLT_ABI(ccos) (__FLT_TYPE __complex__ z)
|
||||
{
|
||||
/* Annex G.6, ccos(z) = ccosh(iz) */
|
||||
__complex__ __FLT_TYPE x;
|
||||
__real__ x = -__imag__ z;
|
||||
__imag__ x = __real__ z;
|
||||
|
||||
return __FLT_ABI(ccosh) (x);
|
||||
}
|
|
@ -0,0 +1,95 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
__FLT_TYPE __complex__ __cdecl
|
||||
__FLT_ABI(ccosh) (__FLT_TYPE __complex__ z)
|
||||
{
|
||||
__complex__ __FLT_TYPE ret;
|
||||
__FLT_TYPE s_x, c_x;
|
||||
int r_class = fpclassify (__real__ z);
|
||||
int i_class = fpclassify (__imag__ z);
|
||||
|
||||
if (r_class == FP_NAN)
|
||||
{
|
||||
__real__ ret = __FLT_NAN;
|
||||
__imag__ ret = __imag__ z == __FLT_CST(0.0) ? __imag__ z : __FLT_NAN;
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (r_class == FP_INFINITE)
|
||||
{
|
||||
if (i_class == FP_ZERO)
|
||||
{
|
||||
__real__ ret = __FLT_HUGE_VAL;
|
||||
__imag__ ret = __imag__ z * __FLT_ABI(copysign) (__FLT_CST(1.0), __real__ z);
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (i_class == FP_NAN || i_class == FP_INFINITE)
|
||||
{
|
||||
__real__ ret = __FLT_HUGE_VAL;
|
||||
__imag__ ret = __FLT_NAN + __FLT_NAN;
|
||||
return ret;
|
||||
}
|
||||
|
||||
__FLT_ABI(sincos) (__imag__ z, &s_x, &c_x);
|
||||
|
||||
__real__ ret = __FLT_ABI(copysign) (__FLT_HUGE_VAL, c_x);
|
||||
__imag__ ret = (__FLT_ABI(copysign) (__FLT_HUGE_VAL, s_x) * __FLT_ABI(copysign) (__FLT_CST(1.0), __real__ z));
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (i_class == FP_NAN || i_class == FP_INFINITE)
|
||||
{
|
||||
__imag__ ret = __real__ z == __FLT_CST(0.0) ? __FLT_CST(0.0) : __FLT_NAN;
|
||||
__real__ ret = __FLT_NAN + __FLT_NAN;
|
||||
return ret;
|
||||
}
|
||||
|
||||
__FLT_ABI(sincos) (__imag__ z, &s_x, &c_x);
|
||||
|
||||
__real__ ret = __FLT_ABI(cosh) (__real__ z) * c_x;
|
||||
__imag__ ret = __FLT_ABI(sinh) (__real__ z) * s_x;
|
||||
return ret;
|
||||
}
|
|
@ -0,0 +1,50 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
/* long double version of the functions. */
|
||||
#define _NEW_COMPLEX_LDOUBLE 1
|
||||
#include "complex_internal.h"
|
||||
|
||||
#include "ccosh.def.h"
|
||||
#include "ccos.def.h"
|
|
@ -0,0 +1,124 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the mingw-w64 runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
|
||||
*/
|
||||
#include <_mingw_mac.h>
|
||||
|
||||
.file "ceil.S"
|
||||
.text
|
||||
.align 4
|
||||
.globl __MINGW_USYMBOL(ceil)
|
||||
.def __MINGW_USYMBOL(ceil); .scl 2; .type 32; .endef
|
||||
#ifdef __x86_64__
|
||||
.seh_proc __MINGW_USYMBOL(ceil)
|
||||
#endif
|
||||
|
||||
__MINGW_USYMBOL(ceil):
|
||||
#if defined(_AMD64_) || defined(__x86_64__)
|
||||
.seh_endprologue
|
||||
movd %xmm0, %rax
|
||||
movq %rax, %rcx
|
||||
sarq $52, %rcx
|
||||
andl $2047, %ecx
|
||||
subl $1023, %ecx
|
||||
cmpl $51, %ecx
|
||||
jg .is_intnaninf
|
||||
/* Is x zero? */
|
||||
testq %rax, %rax
|
||||
je .ret_org
|
||||
/* Is x signed? */
|
||||
testl %ecx, %ecx
|
||||
js .signed_val
|
||||
/* Is x integral? */
|
||||
movabsq $4503599627370495, %rdx
|
||||
sarq %cl, %rdx
|
||||
testq %rax, %rdx
|
||||
je .ret_org
|
||||
addsd .huge(%rip), %xmm0
|
||||
ucomisd .zero(%rip), %xmm0
|
||||
jbe .doret
|
||||
testq %rax, %rax
|
||||
jle .l1
|
||||
/* inexact ... */
|
||||
movabsq $4503599627370496, %r8
|
||||
shrq %cl, %r8
|
||||
addq %r8, %rax
|
||||
.l1:
|
||||
notq %rdx
|
||||
andq %rdx, %rax
|
||||
.doret:
|
||||
movd %rax, %xmm0
|
||||
ret
|
||||
.p2align 4,,10
|
||||
.signed_val:
|
||||
addsd .huge(%rip), %xmm0
|
||||
ucomisd .zero(%rip), %xmm0
|
||||
jbe .doret2
|
||||
testq %rax, %rax
|
||||
movabsq $4607182418800017408, %rdx
|
||||
movabsq $-9223372036854775808, %rax
|
||||
cmovns %rdx, %rax
|
||||
.p2align 4,,10
|
||||
.doret2:
|
||||
movd %rax, %xmm0
|
||||
ret
|
||||
|
||||
.p2align 4,,10
|
||||
.is_intnaninf:
|
||||
/* Is Nan or Inf? */
|
||||
cmpl $1024, %ecx
|
||||
je .ret_naninf
|
||||
.p2align 4,,10
|
||||
.ret_org:
|
||||
/* return x. */
|
||||
rep
|
||||
ret
|
||||
.p2align 4,,10
|
||||
.ret_naninf:
|
||||
/* return x + x; */
|
||||
addsd %xmm0, %xmm0
|
||||
ret
|
||||
.seh_endproc
|
||||
|
||||
/* local data. */
|
||||
.section .rdata,"dr"
|
||||
.align 8
|
||||
.huge:
|
||||
.long -2013235812
|
||||
.long 2117592124
|
||||
.align 8
|
||||
.zero:
|
||||
.long 0
|
||||
.long 0
|
||||
#elif defined(_ARM_) || defined(__arm__)
|
||||
vmrs r1, fpscr
|
||||
bic r0, r1, #0x00c00000
|
||||
orr r0, r0, #0x00400000 /* Round towards Plus Infinity */
|
||||
vmsr fpscr, r0
|
||||
vcvtr.s32.f64 s0, d0
|
||||
vcvt.f64.s32 d0, s0
|
||||
vmsr fpscr, r1
|
||||
bx lr
|
||||
#elif defined(_X86_) || defined(__i386__)
|
||||
fldl 4(%esp)
|
||||
subl $8,%esp
|
||||
|
||||
fstcw 4(%esp) /* store fpu control word */
|
||||
|
||||
/* We use here %edx although only the low 1 bits are defined.
|
||||
But none of the operations should care and they are faster
|
||||
than the 16 bit operations. */
|
||||
movl $0x0800,%edx /* round towards +oo */
|
||||
orl 4(%esp),%edx
|
||||
andl $0xfbff,%edx
|
||||
movl %edx,(%esp)
|
||||
fldcw (%esp) /* load modified control word */
|
||||
|
||||
frndint /* round */
|
||||
|
||||
fldcw 4(%esp) /* restore original control word */
|
||||
|
||||
addl $8,%esp
|
||||
ret
|
||||
#endif
|
|
@ -0,0 +1,120 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the mingw-w64 runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
|
||||
*/
|
||||
#include <_mingw_mac.h>
|
||||
|
||||
.file "ceilf.S"
|
||||
.text
|
||||
.align 4
|
||||
.globl __MINGW_USYMBOL(ceilf)
|
||||
.def __MINGW_USYMBOL(ceilf); .scl 2; .type 32; .endef
|
||||
#ifdef __x86_64__
|
||||
.seh_proc __MINGW_USYMBOL(ceilf)
|
||||
#endif
|
||||
|
||||
__MINGW_USYMBOL(ceilf):
|
||||
#if defined(_AMD64_) || defined(__x86_64__)
|
||||
subq $24, %rsp
|
||||
.seh_stackalloc 24
|
||||
.seh_endprologue
|
||||
movd %xmm0, 12(%rsp)
|
||||
movl 12(%rsp), %eax
|
||||
movl %eax, %ecx
|
||||
movl %eax, %edx
|
||||
sarl $23, %ecx
|
||||
andl $255, %ecx
|
||||
subl $127, %ecx
|
||||
cmpl $22, %ecx
|
||||
jg .l4
|
||||
testl %ecx, %ecx
|
||||
js .l5
|
||||
movl $8388607, %r8d
|
||||
sarl %cl, %r8d
|
||||
testl %eax, %r8d
|
||||
je .l3
|
||||
addss .hugeval(%rip), %xmm0
|
||||
ucomiss .zeroval(%rip), %xmm0
|
||||
jbe .l2
|
||||
testl %eax, %eax
|
||||
jle .l1
|
||||
movl $8388608, %eax
|
||||
sarl %cl, %eax
|
||||
addl %eax, %edx
|
||||
.l1:
|
||||
movl %r8d, %eax
|
||||
notl %eax
|
||||
andl %edx, %eax
|
||||
.l2:
|
||||
movl %eax, 8(%rsp)
|
||||
movss 8(%rsp), %xmm0
|
||||
.l3:
|
||||
addq $24, %rsp
|
||||
ret
|
||||
.p2align 4,,10
|
||||
.l4:
|
||||
addl $-128, %ecx
|
||||
jne .l3
|
||||
addss %xmm0, %xmm0
|
||||
addq $24, %rsp
|
||||
ret
|
||||
.p2align 4,,10
|
||||
.l5:
|
||||
addss .hugeval(%rip), %xmm0
|
||||
ucomiss .zeroval(%rip), %xmm0
|
||||
jbe .islesseqzero
|
||||
testl %eax, %eax
|
||||
js .l6
|
||||
movl $1065353216, %edx
|
||||
cmovne %edx, %eax
|
||||
.islesseqzero:
|
||||
movl %eax, 8(%rsp)
|
||||
movss 8(%rsp), %xmm0
|
||||
addq $24, %rsp
|
||||
ret
|
||||
.p2align 4,,10
|
||||
.l6:
|
||||
movl $-2147483648, 8(%rsp)
|
||||
movss 8(%rsp), %xmm0
|
||||
addq $24, %rsp
|
||||
ret
|
||||
.seh_endproc
|
||||
.section .rdata,"dr"
|
||||
.align 4
|
||||
.hugeval:
|
||||
.long 1900671690
|
||||
.align 4
|
||||
.zeroval:
|
||||
.long 0
|
||||
#elif defined(_ARM_) || defined(__arm__)
|
||||
vmrs r1, fpscr
|
||||
bic r0, r1, #0x00c00000
|
||||
orr r0, r0, #0x00400000 /* Round towards Plus Infinity */
|
||||
vmsr fpscr, r0
|
||||
vcvt.s32.f32 s0, s0
|
||||
vcvt.f32.s32 s0, s0
|
||||
vmsr fpscr, r1
|
||||
bx lr
|
||||
#elif defined(_X86_) || defined(__i386__)
|
||||
flds 4(%esp)
|
||||
subl $8,%esp
|
||||
|
||||
fstcw 4(%esp) /* store fpu control word */
|
||||
|
||||
/* We use here %edx although only the low 1 bits are defined.
|
||||
But none of the operations should care and they are faster
|
||||
than the 16 bit operations. */
|
||||
movl $0x0800,%edx /* round towards +oo */
|
||||
orl 4(%esp),%edx
|
||||
andl $0xfbff,%edx
|
||||
movl %edx,(%esp)
|
||||
fldcw (%esp) /* load modified control word */
|
||||
|
||||
frndint /* round */
|
||||
|
||||
fldcw 4(%esp) /* restore original control word */
|
||||
|
||||
addl $8,%esp
|
||||
ret
|
||||
#endif
|
|
@ -0,0 +1,64 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the mingw-w64 runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
|
||||
*/
|
||||
#include <_mingw_mac.h>
|
||||
|
||||
.file "ceill.S"
|
||||
.text
|
||||
#ifdef __x86_64__
|
||||
.align 8
|
||||
#else
|
||||
.align 4
|
||||
#endif
|
||||
.globl __MINGW_USYMBOL(ceill)
|
||||
.def __MINGW_USYMBOL(ceill); .scl 2; .type 32; .endef
|
||||
__MINGW_USYMBOL(ceill):
|
||||
#if defined(_AMD64_) || defined(__x86_64__)
|
||||
fldt (%rdx)
|
||||
subq $24,%rsp
|
||||
|
||||
fstcw 8(%rsp) /* store fpu control word */
|
||||
|
||||
/* We use here %edx although only the low 1 bits are defined.
|
||||
But none of the operations should care and they are faster
|
||||
than the 16 bit operations. */
|
||||
movl $0x0800,%edx /* round towards +oo */
|
||||
orl 8(%rsp),%edx
|
||||
andl $0xfbff,%edx
|
||||
movl %edx,(%rsp)
|
||||
fldcw (%rsp) /* load modified control word */
|
||||
|
||||
frndint /* round */
|
||||
|
||||
fldcw 8(%rsp) /* restore original control word */
|
||||
|
||||
addq $24,%rsp
|
||||
movq %rcx,%rax
|
||||
movq $0,8(%rcx)
|
||||
fstpt (%rcx)
|
||||
ret
|
||||
#elif defined(_ARM_) || defined(__arm__)
|
||||
vmrs r1, fpscr
|
||||
bic r0, r1, #0x00c00000
|
||||
orr r0, r0, #0x00400000 /* Round towards Plus Infinity */
|
||||
vmsr fpscr, r0
|
||||
vcvtr.s32.f64 s0, d0
|
||||
vcvt.f64.s32 d0, s0
|
||||
vmsr fpscr, r1
|
||||
bx lr
|
||||
#elif defined(_X86_) || defined(__i386__)
|
||||
fldt 4(%esp)
|
||||
subl $8,%esp
|
||||
fstcw 4(%esp)
|
||||
movl $0x0800,%edx
|
||||
orl 4(%esp),%edx
|
||||
andl $0xfbff,%edx
|
||||
movl %edx,(%esp)
|
||||
fldcw (%esp)
|
||||
frndint
|
||||
fldcw 4(%esp)
|
||||
addl $8,%esp
|
||||
ret
|
||||
#endif
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,719 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the mingw-w64 runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
|
||||
*/
|
||||
#ifndef _CEPHES_EMATH_H
|
||||
#define _CEPHES_EMATH_H
|
||||
|
||||
/**
|
||||
* This is a workaround for a gcc bug
|
||||
*/
|
||||
#define __restrict__
|
||||
|
||||
/* This file is extracted from S L Moshier's ioldoubl.c,
|
||||
* modified for use in MinGW
|
||||
*
|
||||
* Extended precision arithmetic functions for long double I/O.
|
||||
* This program has been placed in the public domain.
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* Revision history:
|
||||
*
|
||||
* 5 Jan 84 PDP-11 assembly language version
|
||||
* 6 Dec 86 C language version
|
||||
* 30 Aug 88 100 digit version, improved rounding
|
||||
* 15 May 92 80-bit long double support
|
||||
*
|
||||
* Author: S. L. Moshier.
|
||||
*
|
||||
* 6 Oct 02 Modified for MinGW by inlining utility routines,
|
||||
* removing global variables, and splitting out strtold
|
||||
* from _IO_ldtoa and _IO_ldtostr.
|
||||
*
|
||||
* Danny Smith <dannysmith@users.sourceforge.net>
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/* ieee.c
|
||||
*
|
||||
* Extended precision IEEE binary floating point arithmetic routines
|
||||
*
|
||||
* Numbers are stored in C language as arrays of 16-bit unsigned
|
||||
* short integers. The arguments of the routines are pointers to
|
||||
* the arrays.
|
||||
*
|
||||
*
|
||||
* External e type data structure, simulates Intel 8087 chip
|
||||
* temporary real format but possibly with a larger significand:
|
||||
*
|
||||
* NE-1 significand words (least significant word first,
|
||||
* most significant bit is normally set)
|
||||
* exponent (value = EXONE for 1.0,
|
||||
* top bit is the sign)
|
||||
*
|
||||
*
|
||||
* Internal data structure of a number (a "word" is 16 bits):
|
||||
*
|
||||
* ei[0] sign word (0 for positive, 0xffff for negative)
|
||||
* ei[1] biased __exponent (value = EXONE for the number 1.0)
|
||||
* ei[2] high guard word (always zero after normalization)
|
||||
* ei[3]
|
||||
* to ei[NI-2] significand (NI-4 significand words,
|
||||
* most significant word first,
|
||||
* most significant bit is set)
|
||||
* ei[NI-1] low guard word (0x8000 bit is rounding place)
|
||||
*
|
||||
*
|
||||
*
|
||||
* Routines for external format numbers
|
||||
*
|
||||
* __asctoe64( string, &d ) ASCII string to long double
|
||||
* __asctoeg( string, e, prec ) ASCII string to specified precision
|
||||
* __e64toe( &d, e ) IEEE long double precision to e type
|
||||
* __eadd( a, b, c ) c = b + a
|
||||
* __eclear(e) e = 0
|
||||
* __ecmp (a, b) Returns 1 if a > b, 0 if a == b,
|
||||
* -1 if a < b, -2 if either a or b is a NaN.
|
||||
* __ediv( a, b, c ) c = b / a
|
||||
* __efloor( a, b ) truncate to integer, toward -infinity
|
||||
* __efrexp( a, exp, s ) extract exponent and significand
|
||||
* __eifrac( e, &l, frac ) e to long integer and e type fraction
|
||||
* __euifrac( e, &l, frac ) e to unsigned long integer and e type fraction
|
||||
* __einfin( e ) set e to infinity, leaving its sign alone
|
||||
* __eldexp( a, n, b ) multiply by 2**n
|
||||
* __emov( a, b ) b = a
|
||||
* __emul( a, b, c ) c = b * a
|
||||
* __eneg(e) e = -e
|
||||
* __eround( a, b ) b = nearest integer value to a
|
||||
* __esub( a, b, c ) c = b - a
|
||||
* __e24toasc( &f, str, n ) single to ASCII string, n digits after decimal
|
||||
* __e53toasc( &d, str, n ) double to ASCII string, n digits after decimal
|
||||
* __e64toasc( &d, str, n ) long double to ASCII string
|
||||
* __etoasc( e, str, n ) e to ASCII string, n digits after decimal
|
||||
* __etoe24( e, &f ) convert e type to IEEE single precision
|
||||
* __etoe53( e, &d ) convert e type to IEEE double precision
|
||||
* __etoe64( e, &d ) convert e type to IEEE long double precision
|
||||
* __eisneg( e ) 1 if sign bit of e != 0, else 0
|
||||
* __eisinf( e ) 1 if e has maximum exponent (non-IEEE)
|
||||
* or is infinite (IEEE)
|
||||
* __eisnan( e ) 1 if e is a NaN
|
||||
* __esqrt( a, b ) b = square root of a
|
||||
*
|
||||
*
|
||||
* Routines for internal format numbers
|
||||
*
|
||||
* __eaddm( ai, bi ) add significands, bi = bi + ai
|
||||
* __ecleaz(ei) ei = 0
|
||||
* __ecleazs(ei) set ei = 0 but leave its sign alone
|
||||
* __ecmpm( ai, bi ) compare significands, return 1, 0, or -1
|
||||
* __edivm( ai, bi ) divide significands, bi = bi / ai
|
||||
* __emdnorm(ai,l,s,exp) normalize and round off
|
||||
* __emovi( a, ai ) convert external a to internal ai
|
||||
* __emovo( ai, a ) convert internal ai to external a
|
||||
* __emovz( ai, bi ) bi = ai, low guard word of bi = 0
|
||||
* __emulm( ai, bi ) multiply significands, bi = bi * ai
|
||||
* __enormlz(ei) left-justify the significand
|
||||
* __eshdn1( ai ) shift significand and guards down 1 bit
|
||||
* __eshdn8( ai ) shift down 8 bits
|
||||
* __eshdn6( ai ) shift down 16 bits
|
||||
* __eshift( ai, n ) shift ai n bits up (or down if n < 0)
|
||||
* __eshup1( ai ) shift significand and guards up 1 bit
|
||||
* __eshup8( ai ) shift up 8 bits
|
||||
* __eshup6( ai ) shift up 16 bits
|
||||
* __esubm( ai, bi ) subtract significands, bi = bi - ai
|
||||
*
|
||||
*
|
||||
* The result is always normalized and rounded to NI-4 word precision
|
||||
* after each arithmetic operation.
|
||||
*
|
||||
* Exception flags are NOT fully supported.
|
||||
*
|
||||
* Define INFINITY in mconf.h for support of infinity; otherwise a
|
||||
* saturation arithmetic is implemented.
|
||||
*
|
||||
* Define NANS for support of Not-a-Number items; otherwise the
|
||||
* arithmetic will never produce a NaN output, and might be confused
|
||||
* by a NaN input.
|
||||
* If NaN's are supported, the output of ecmp(a,b) is -2 if
|
||||
* either a or b is a NaN. This means asking if(ecmp(a,b) < 0)
|
||||
* may not be legitimate. Use if(ecmp(a,b) == -1) for less-than
|
||||
* if in doubt.
|
||||
* Signaling NaN's are NOT supported; they are treated the same
|
||||
* as quiet NaN's.
|
||||
*
|
||||
* Denormals are always supported here where appropriate (e.g., not
|
||||
* for conversion to DEC numbers).
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#include <math.h>
|
||||
#include <locale.h>
|
||||
#include <ctype.h>
|
||||
|
||||
#undef alloca
|
||||
#define alloca __builtin_alloca
|
||||
|
||||
/* Don't build non-ANSI _IO_ldtoa. It is not thread safe. */
|
||||
#ifndef USE_LDTOA
|
||||
#define USE_LDTOA 0
|
||||
#endif
|
||||
|
||||
|
||||
/* Number of 16 bit words in external x type format */
|
||||
#define NE 6
|
||||
|
||||
/* Number of 16 bit words in internal format */
|
||||
#define NI (NE+3)
|
||||
|
||||
/* Array offset to exponent */
|
||||
#define E 1
|
||||
|
||||
/* Array offset to high guard word */
|
||||
#define M 2
|
||||
|
||||
/* Number of bits of precision */
|
||||
#define NBITS ((NI-4)*16)
|
||||
|
||||
/* Maximum number of decimal digits in ASCII conversion
|
||||
* = NBITS*log10(2)
|
||||
*/
|
||||
#define NDEC (NBITS*8/27)
|
||||
|
||||
/* The exponent of 1.0 */
|
||||
#define EXONE (0x3fff)
|
||||
|
||||
|
||||
#define mtherr(x,y)
|
||||
|
||||
|
||||
extern long double strtold (const char * __restrict__ s, char ** __restrict__ se);
|
||||
extern int __asctoe64(const char * __restrict__ ss,
|
||||
short unsigned int * __restrict__ y);
|
||||
extern void __emul(const short unsigned int * a,
|
||||
const short unsigned int * b,
|
||||
short unsigned int * c);
|
||||
extern int __ecmp(const short unsigned int * __restrict__ a,
|
||||
const short unsigned int * __restrict__ b);
|
||||
extern int __enormlz(short unsigned int *x);
|
||||
extern int __eshift(short unsigned int *x, int sc);
|
||||
extern void __eaddm(const short unsigned int * __restrict__ x,
|
||||
short unsigned int * __restrict__ y);
|
||||
extern void __esubm(const short unsigned int * __restrict__ x,
|
||||
short unsigned int * __restrict__ y);
|
||||
extern void __emdnorm(short unsigned int *s, int lost, int subflg,
|
||||
int exp, int rcntrl, const int rndprc);
|
||||
extern void __toe64(short unsigned int * __restrict__ a,
|
||||
short unsigned int * __restrict__ b);
|
||||
extern int __edivm(short unsigned int * __restrict__ den,
|
||||
short unsigned int * __restrict__ num);
|
||||
extern int __emulm(const short unsigned int * __restrict__ a,
|
||||
short unsigned int * __restrict__ b);
|
||||
extern void __emovi(const short unsigned int * __restrict__ a,
|
||||
short unsigned int * __restrict__ b);
|
||||
extern void __emovo(const short unsigned int * __restrict__ a,
|
||||
short unsigned int * __restrict__ b);
|
||||
|
||||
#if USE_LDTOA
|
||||
|
||||
extern char * _IO_ldtoa(long double, int, int, int *, int *, char **);
|
||||
extern void _IO_ldtostr(long double *x, char *string, int ndigs,
|
||||
int flags, char fmt);
|
||||
|
||||
extern void __eiremain(short unsigned int * __restrict__ den,
|
||||
short unsigned int *__restrict__ num,
|
||||
short unsigned int *__restrict__ equot);
|
||||
extern void __efloor(short unsigned int *x, short unsigned int *y);
|
||||
extern void __eadd1(const short unsigned int * __restrict__ a,
|
||||
const short unsigned int * __restrict__ b,
|
||||
short unsigned int * __restrict__ c,
|
||||
int subflg);
|
||||
extern void __esub(const short unsigned int *a, const short unsigned int *b,
|
||||
short unsigned int *c);
|
||||
extern void __ediv(const short unsigned int *a, const short unsigned int *b,
|
||||
short unsigned int *c);
|
||||
extern void __e64toe(short unsigned int *pe, short unsigned int *y);
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
static __inline__ int __eisneg(const short unsigned int *x);
|
||||
static __inline__ int __eisinf(const short unsigned int *x);
|
||||
static __inline__ int __eisnan(const short unsigned int *x);
|
||||
static __inline__ int __eiszero(const short unsigned int *a);
|
||||
static __inline__ void __emovz(register const short unsigned int * __restrict__ a,
|
||||
register short unsigned int * __restrict__ b);
|
||||
static __inline__ void __eclear(register short unsigned int *x);
|
||||
static __inline__ void __ecleaz(register short unsigned int *xi);
|
||||
static __inline__ void __ecleazs(register short unsigned int *xi);
|
||||
static __inline__ int __eiisinf(const short unsigned int *x);
|
||||
static __inline__ int __eiisnan(const short unsigned int *x);
|
||||
static __inline__ int __eiiszero(const short unsigned int *x);
|
||||
static __inline__ void __enan_64(short unsigned int *nanptr);
|
||||
static __inline__ void __enan_NBITS (short unsigned int *nanptr);
|
||||
static __inline__ void __enan_NI16 (short unsigned int *nanptr);
|
||||
static __inline__ void __einfin(register short unsigned int *x);
|
||||
static __inline__ void __eneg(short unsigned int *x);
|
||||
static __inline__ void __eshup1(register short unsigned int *x);
|
||||
static __inline__ void __eshup8(register short unsigned int *x);
|
||||
static __inline__ void __eshup6(register short unsigned int *x);
|
||||
static __inline__ void __eshdn1(register short unsigned int *x);
|
||||
static __inline__ void __eshdn8(register short unsigned int *x);
|
||||
static __inline__ void __eshdn6(register short unsigned int *x);
|
||||
|
||||
|
||||
|
||||
/* Intel IEEE, low order words come first:
|
||||
*/
|
||||
#define IBMPC 1
|
||||
|
||||
/* Define 1 for ANSI C atan2() function
|
||||
* See atan.c and clog.c.
|
||||
*/
|
||||
#define ANSIC 1
|
||||
|
||||
/*define VOLATILE volatile*/
|
||||
#define VOLATILE
|
||||
|
||||
/* For 12-byte long doubles on an i386, pad a 16-bit short 0
|
||||
* to the end of real constants initialized by integer arrays.
|
||||
*
|
||||
* #define XPD 0,
|
||||
*
|
||||
* Otherwise, the type is 10 bytes long and XPD should be
|
||||
* defined blank.
|
||||
*
|
||||
* #define XPD
|
||||
*/
|
||||
#define XPD 0,
|
||||
/* #define XPD */
|
||||
#define NANS
|
||||
|
||||
/* NaN's require infinity support. */
|
||||
#ifdef NANS
|
||||
#ifndef INFINITY
|
||||
#define INFINITY
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* This handles 64-bit long ints. */
|
||||
#define LONGBITS (8 * sizeof(long))
|
||||
|
||||
|
||||
#define NTEN 12
|
||||
#define MAXP 4096
|
||||
|
||||
/*
|
||||
; Clear out entire external format number.
|
||||
;
|
||||
; unsigned short x[];
|
||||
; eclear( x );
|
||||
*/
|
||||
|
||||
static __inline__ void __eclear(register short unsigned int *x)
|
||||
{
|
||||
memset(x, 0, NE * sizeof(unsigned short));
|
||||
}
|
||||
|
||||
|
||||
/* Move external format number from a to b.
|
||||
*
|
||||
* emov( a, b );
|
||||
*/
|
||||
|
||||
static __inline__ void __emov(register const short unsigned int * __restrict__ a,
|
||||
register short unsigned int * __restrict__ b)
|
||||
{
|
||||
memcpy(b, a, NE * sizeof(unsigned short));
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
; Negate external format number
|
||||
;
|
||||
; unsigned short x[NE];
|
||||
; eneg( x );
|
||||
*/
|
||||
|
||||
static __inline__ void __eneg(short unsigned int *x)
|
||||
{
|
||||
#ifdef NANS
|
||||
if (__eisnan(x))
|
||||
return;
|
||||
#endif
|
||||
x[NE-1] ^= 0x8000; /* Toggle the sign bit */
|
||||
}
|
||||
|
||||
|
||||
/* Return 1 if external format number is negative,
|
||||
* else return zero.
|
||||
*/
|
||||
static __inline__ int __eisneg(const short unsigned int *x)
|
||||
{
|
||||
#ifdef NANS
|
||||
if (__eisnan(x))
|
||||
return (0);
|
||||
#endif
|
||||
if (x[NE-1] & 0x8000)
|
||||
return (1);
|
||||
else
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
/* Return 1 if external format number has maximum possible exponent,
|
||||
* else return zero.
|
||||
*/
|
||||
static __inline__ int __eisinf(const short unsigned int *x)
|
||||
{
|
||||
if ((x[NE - 1] & 0x7fff) == 0x7fff)
|
||||
{
|
||||
#ifdef NANS
|
||||
if (__eisnan(x))
|
||||
return (0);
|
||||
#endif
|
||||
return (1);
|
||||
}
|
||||
else
|
||||
return (0);
|
||||
}
|
||||
|
||||
/* Check if e-type number is not a number.
|
||||
*/
|
||||
static __inline__ int __eisnan(const short unsigned int *x)
|
||||
{
|
||||
#ifdef NANS
|
||||
int i;
|
||||
/* NaN has maximum __exponent */
|
||||
if ((x[NE - 1] & 0x7fff) == 0x7fff)
|
||||
/* ... and non-zero significand field. */
|
||||
for (i = 0; i < NE - 1; i++)
|
||||
{
|
||||
if (*x++ != 0)
|
||||
return (1);
|
||||
}
|
||||
#endif
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
; Fill __entire number, including __exponent and significand, with
|
||||
; largest possible number. These programs implement a saturation
|
||||
; value that is an ordinary, legal number. A special value
|
||||
; "infinity" may also be implemented; this would require tests
|
||||
; for that value and implementation of special rules for arithmetic
|
||||
; operations involving inifinity.
|
||||
*/
|
||||
|
||||
static __inline__ void __einfin(register short unsigned int *x)
|
||||
{
|
||||
register int i;
|
||||
#ifdef INFINITY
|
||||
for (i = 0; i < NE - 1; i++)
|
||||
*x++ = 0;
|
||||
*x |= 32767;
|
||||
#else
|
||||
for (i = 0; i < NE - 1; i++)
|
||||
*x++ = 0xffff;
|
||||
*x |= 32766;
|
||||
*(x - 5) = 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Clear out internal format number.
|
||||
*/
|
||||
|
||||
static __inline__ void __ecleaz(register short unsigned int *xi)
|
||||
{
|
||||
memset(xi, 0, NI * sizeof(unsigned short));
|
||||
}
|
||||
|
||||
/* same, but don't touch the sign. */
|
||||
|
||||
static __inline__ void __ecleazs(register short unsigned int *xi)
|
||||
{
|
||||
++xi;
|
||||
memset(xi, 0, (NI-1) * sizeof(unsigned short));
|
||||
}
|
||||
|
||||
/* Move internal format number from a to b.
|
||||
*/
|
||||
static __inline__ void __emovz(register const short unsigned int * __restrict__ a,
|
||||
register short unsigned int * __restrict__ b)
|
||||
{
|
||||
memcpy(b, a, (NI-1) * sizeof(unsigned short));
|
||||
b[NI - 1] = 0;
|
||||
}
|
||||
|
||||
/* Return nonzero if internal format number is a NaN.
|
||||
*/
|
||||
|
||||
static __inline__ int __eiisnan (const short unsigned int *x)
|
||||
{
|
||||
int i;
|
||||
|
||||
if ((x[E] & 0x7fff) == 0x7fff)
|
||||
{
|
||||
for (i = M + 1; i < NI; i++ )
|
||||
{
|
||||
if (x[i] != 0)
|
||||
return (1);
|
||||
}
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
/* Return nonzero if external format number is zero. */
|
||||
|
||||
static __inline__ int
|
||||
__eiszero(const short unsigned int * a)
|
||||
{
|
||||
union {
|
||||
long double ld;
|
||||
unsigned short sh[8];
|
||||
} av;
|
||||
av.ld = 0.0;
|
||||
memcpy (av.sh, a, 12);
|
||||
if (av.ld == 0.0)
|
||||
return (1);
|
||||
return (0);
|
||||
}
|
||||
|
||||
/* Return nonzero if internal format number is zero. */
|
||||
|
||||
static __inline__ int
|
||||
__eiiszero(const short unsigned int * ai)
|
||||
{
|
||||
int i;
|
||||
/* skip the sign word */
|
||||
for (i = 1; i < NI - 1; i++ )
|
||||
{
|
||||
if (ai[i] != 0)
|
||||
return (0);
|
||||
}
|
||||
return (1);
|
||||
}
|
||||
|
||||
|
||||
/* Return nonzero if internal format number is infinite. */
|
||||
|
||||
static __inline__ int
|
||||
__eiisinf (const unsigned short *x)
|
||||
{
|
||||
#ifdef NANS
|
||||
if (__eiisnan (x))
|
||||
return (0);
|
||||
#endif
|
||||
if ((x[E] & 0x7fff) == 0x7fff)
|
||||
return (1);
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
; Compare significands of numbers in internal format.
|
||||
; Guard words are included in the comparison.
|
||||
;
|
||||
; unsigned short a[NI], b[NI];
|
||||
; cmpm( a, b );
|
||||
;
|
||||
; for the significands:
|
||||
; returns +1 if a > b
|
||||
; 0 if a == b
|
||||
; -1 if a < b
|
||||
*/
|
||||
static __inline__ int __ecmpm(register const short unsigned int * __restrict__ a,
|
||||
register const short unsigned int * __restrict__ b)
|
||||
{
|
||||
int i;
|
||||
|
||||
a += M; /* skip up to significand area */
|
||||
b += M;
|
||||
for (i = M; i < NI; i++)
|
||||
{
|
||||
if( *a++ != *b++ )
|
||||
goto difrnt;
|
||||
}
|
||||
return(0);
|
||||
|
||||
difrnt:
|
||||
if ( *(--a) > *(--b) )
|
||||
return (1);
|
||||
else
|
||||
return (-1);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
; Shift significand down by 1 bit
|
||||
*/
|
||||
|
||||
static __inline__ void __eshdn1(register short unsigned int *x)
|
||||
{
|
||||
register unsigned short bits;
|
||||
int i;
|
||||
|
||||
x += M; /* point to significand area */
|
||||
|
||||
bits = 0;
|
||||
for (i = M; i < NI; i++ )
|
||||
{
|
||||
if (*x & 1)
|
||||
bits |= 1;
|
||||
*x >>= 1;
|
||||
if (bits & 2)
|
||||
*x |= 0x8000;
|
||||
bits <<= 1;
|
||||
++x;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
; Shift significand up by 1 bit
|
||||
*/
|
||||
|
||||
static __inline__ void __eshup1(register short unsigned int *x)
|
||||
{
|
||||
register unsigned short bits;
|
||||
int i;
|
||||
|
||||
x += NI-1;
|
||||
bits = 0;
|
||||
|
||||
for (i = M; i < NI; i++)
|
||||
{
|
||||
if (*x & 0x8000)
|
||||
bits |= 1;
|
||||
*x <<= 1;
|
||||
if (bits & 2)
|
||||
*x |= 1;
|
||||
bits <<= 1;
|
||||
--x;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
; Shift significand down by 8 bits
|
||||
*/
|
||||
|
||||
static __inline__ void __eshdn8(register short unsigned int *x)
|
||||
{
|
||||
register unsigned short newbyt, oldbyt;
|
||||
int i;
|
||||
|
||||
x += M;
|
||||
oldbyt = 0;
|
||||
for (i = M; i < NI; i++)
|
||||
{
|
||||
newbyt = *x << 8;
|
||||
*x >>= 8;
|
||||
*x |= oldbyt;
|
||||
oldbyt = newbyt;
|
||||
++x;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
; Shift significand up by 8 bits
|
||||
*/
|
||||
|
||||
static __inline__ void __eshup8(register short unsigned int *x)
|
||||
{
|
||||
int i;
|
||||
register unsigned short newbyt, oldbyt;
|
||||
|
||||
x += NI - 1;
|
||||
oldbyt = 0;
|
||||
|
||||
for (i = M; i < NI; i++)
|
||||
{
|
||||
newbyt = *x >> 8;
|
||||
*x <<= 8;
|
||||
*x |= oldbyt;
|
||||
oldbyt = newbyt;
|
||||
--x;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
; Shift significand up by 16 bits
|
||||
*/
|
||||
|
||||
static __inline__ void __eshup6(register short unsigned int *x)
|
||||
{
|
||||
int i;
|
||||
register unsigned short *p;
|
||||
|
||||
p = x + M;
|
||||
x += M + 1;
|
||||
|
||||
for (i = M; i < NI - 1; i++)
|
||||
*p++ = *x++;
|
||||
|
||||
*p = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
; Shift significand down by 16 bits
|
||||
*/
|
||||
|
||||
static __inline__ void __eshdn6(register short unsigned int *x)
|
||||
{
|
||||
int i;
|
||||
register unsigned short *p;
|
||||
|
||||
x += NI - 1;
|
||||
p = x + 1;
|
||||
|
||||
for (i = M; i < NI - 1; i++)
|
||||
*(--p) = *(--x);
|
||||
|
||||
*(--p) = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
; Add significands
|
||||
; x + y replaces y
|
||||
*/
|
||||
|
||||
static __inline__ void __enan_64(unsigned short* nanptr)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < 3; i++)
|
||||
*nanptr++ = 0;
|
||||
*nanptr++ = 0xc000;
|
||||
*nanptr++ = 0x7fff;
|
||||
*nanptr = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
static __inline__ void __enan_NBITS(unsigned short* nanptr)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < NE - 2; i++)
|
||||
*nanptr++ = 0;
|
||||
*nanptr++ = 0xc000;
|
||||
*nanptr = 0x7fff;
|
||||
return;
|
||||
}
|
||||
|
||||
static __inline__ void __enan_NI16(unsigned short* nanptr)
|
||||
{
|
||||
int i;
|
||||
*nanptr++ = 0;
|
||||
*nanptr++ = 0x7fff;
|
||||
*nanptr++ = 0;
|
||||
*nanptr++ = 0xc000;
|
||||
for (i = 4; i < NI; i++)
|
||||
*nanptr++ = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
#endif /* _CEPHES_EMATH_H */
|
||||
|
|
@ -0,0 +1,417 @@
|
|||
#include <math.h>
|
||||
#include <errno.h>
|
||||
|
||||
|
||||
#define IBMPC 1
|
||||
#define ANSIPROT 1
|
||||
#define MINUSZERO 1
|
||||
#define INFINITIES 1
|
||||
#define NANS 1
|
||||
#define DENORMAL 1
|
||||
#define VOLATILE
|
||||
#define mtherr(fname, code)
|
||||
#define XPD 0,
|
||||
#ifdef __x86_64__
|
||||
#define XPD_SHORT 0, 0,
|
||||
#define XPD_LONG 0,
|
||||
#else
|
||||
#define XPD_SHORT
|
||||
#define XPD_LONG
|
||||
#endif
|
||||
|
||||
#if UNK
|
||||
typedef union uLD { long double ld; unsigned short sh[8]; long lo[4]; } uLD;
|
||||
typedef union uD { double d; unsigned short sh[4]; } uD;
|
||||
#elif IBMPC
|
||||
typedef union uLD { unsigned short sh[8]; long double ld; long lo[4]; } uLD;
|
||||
typedef union uD { unsigned short sh[4]; double d; } uD;
|
||||
#elif MIEEE
|
||||
typedef union uLD { long lo[4]; long double ld; unsigned short sh[8]; } uLD;
|
||||
typedef union uD { unsigned short sh[4]; double d; } uD;
|
||||
#else
|
||||
#error Unknown uLD/uD type definition
|
||||
#endif
|
||||
|
||||
#define _CEPHES_USE_ERRNO
|
||||
|
||||
#ifdef _CEPHES_USE_ERRNO
|
||||
#define _SET_ERRNO(x) errno = (x)
|
||||
#else
|
||||
#define _SET_ERRNO(x)
|
||||
#endif
|
||||
|
||||
/* constants used by cephes functions */
|
||||
|
||||
/* double */
|
||||
#define MAXNUM 1.7976931348623158E308
|
||||
#define MAXLOG 7.09782712893383996843E2
|
||||
#define MINLOG -7.08396418532264106224E2
|
||||
#define LOGE2 6.93147180559945309417E-1
|
||||
#define LOG2E 1.44269504088896340736
|
||||
#define PI 3.14159265358979323846
|
||||
#define PIO2 1.57079632679489661923
|
||||
#define PIO4 7.85398163397448309616E-1
|
||||
|
||||
#define NEGZERO (-0.0)
|
||||
#undef NAN
|
||||
#undef INFINITY
|
||||
#if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 2))
|
||||
#define INFINITY __builtin_huge_val()
|
||||
#define NAN __builtin_nan("")
|
||||
#else
|
||||
extern double __INF;
|
||||
#define INFINITY (__INF)
|
||||
extern double __QNAN;
|
||||
#define NAN (__QNAN)
|
||||
#endif
|
||||
|
||||
/*long double*/
|
||||
#if defined(__arm__) || defined(_ARM_)
|
||||
#define MAXNUML 1.7976931348623158E308
|
||||
#define MAXLOGL 7.09782712893383996843E2
|
||||
#define MINLOGL -7.08396418532264106224E2
|
||||
#define LOGE2L 6.93147180559945309417E-1
|
||||
#define LOG2EL 1.44269504088896340736
|
||||
#define PIL 3.14159265358979323846
|
||||
#define PIO2L 1.57079632679489661923
|
||||
#define PIO4L 7.85398163397448309616E-1
|
||||
#else
|
||||
#define MAXNUML 1.189731495357231765021263853E4932L
|
||||
#define MAXLOGL 1.1356523406294143949492E4L
|
||||
#define MINLOGL -1.13994985314888605586758E4L
|
||||
#define LOGE2L 6.9314718055994530941723E-1L
|
||||
#define LOG2EL 1.4426950408889634073599E0L
|
||||
#define PIL 3.1415926535897932384626L
|
||||
#define PIO2L 1.5707963267948966192313L
|
||||
#define PIO4L 7.8539816339744830961566E-1L
|
||||
#endif /* defined(__arm__) || defined(_ARM_) */
|
||||
|
||||
#define isfinitel isfinite
|
||||
#define isinfl isinf
|
||||
#define isnanl isnan
|
||||
#define signbitl signbit
|
||||
|
||||
#define NEGZEROL (-0.0L)
|
||||
|
||||
#undef NANL
|
||||
#undef INFINITYL
|
||||
#if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 2))
|
||||
#define INFINITYL __builtin_huge_vall()
|
||||
#define NANL __builtin_nanl("")
|
||||
#else
|
||||
extern long double __INFL;
|
||||
#define INFINITYL (__INFL)
|
||||
extern long double __QNANL;
|
||||
#define NANL (__QNANL)
|
||||
#endif
|
||||
|
||||
/* float */
|
||||
|
||||
#define MAXNUMF 3.4028234663852885981170418348451692544e38F
|
||||
#define MAXLOGF 88.72283905206835F
|
||||
#define MINLOGF -103.278929903431851103F /* log(2^-149) */
|
||||
#define LOG2EF 1.44269504088896341F
|
||||
#define LOGE2F 0.693147180559945309F
|
||||
#define PIF 3.141592653589793238F
|
||||
#define PIO2F 1.5707963267948966192F
|
||||
#define PIO4F 0.7853981633974483096F
|
||||
|
||||
#define isfinitef isfinite
|
||||
#define isinff isinf
|
||||
#define isnanf isnan
|
||||
#define signbitf signbit
|
||||
|
||||
#define NEGZEROF (-0.0F)
|
||||
|
||||
#undef NANF
|
||||
#undef INFINITYF
|
||||
#if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 2))
|
||||
#define INFINITYF __builtin_huge_valf()
|
||||
#define NANF __builtin_nanf("")
|
||||
#else
|
||||
extern float __INFF;
|
||||
#define INFINITYF (__INFF)
|
||||
extern float __QNANF;
|
||||
#define NANF (__QNANF)
|
||||
#endif
|
||||
|
||||
|
||||
/* double */
|
||||
|
||||
/*
|
||||
Cephes Math Library Release 2.2: July, 1992
|
||||
Copyright 1984, 1987, 1988, 1992 by Stephen L. Moshier
|
||||
Direct inquiries to 30 Frost Street, Cambridge, MA 02140
|
||||
*/
|
||||
|
||||
|
||||
/* polevl.c
|
||||
* p1evl.c
|
||||
*
|
||||
* Evaluate polynomial
|
||||
*
|
||||
*
|
||||
*
|
||||
* SYNOPSIS:
|
||||
*
|
||||
* int N;
|
||||
* double x, y, coef[N+1], polevl[];
|
||||
*
|
||||
* y = polevl( x, coef, N );
|
||||
*
|
||||
*
|
||||
*
|
||||
* DESCRIPTION:
|
||||
*
|
||||
* Evaluates polynomial of degree N:
|
||||
*
|
||||
* 2 N
|
||||
* y = C + C x + C x +...+ C x
|
||||
* 0 1 2 N
|
||||
*
|
||||
* Coefficients are stored in reverse order:
|
||||
*
|
||||
* coef[0] = C , ..., coef[N] = C .
|
||||
* N 0
|
||||
*
|
||||
* The function p1evl() assumes that coef[N] = 1.0 and is
|
||||
* omitted from the array. Its calling arguments are
|
||||
* otherwise the same as polevl().
|
||||
*
|
||||
*
|
||||
* SPEED:
|
||||
*
|
||||
* In the interest of speed, there are no checks for out
|
||||
* of bounds arithmetic. This routine is used by most of
|
||||
* the functions in the library. Depending on available
|
||||
* equipment features, the user may wish to rewrite the
|
||||
* program in microcode or assembly language.
|
||||
*
|
||||
*/
|
||||
|
||||
/* Polynomial evaluator:
|
||||
* P[0] x^n + P[1] x^(n-1) + ... + P[n]
|
||||
*/
|
||||
static __inline__ double polevl(double x, const uD *p, int n)
|
||||
{
|
||||
register double y;
|
||||
|
||||
y = p->d;
|
||||
p++;
|
||||
do
|
||||
{
|
||||
y = y * x + p->d;
|
||||
p++;
|
||||
}
|
||||
while (--n);
|
||||
return (y);
|
||||
}
|
||||
|
||||
|
||||
/* Polynomial evaluator:
|
||||
* x^n + P[0] x^(n-1) + P[1] x^(n-2) + ... + P[n]
|
||||
*/
|
||||
static __inline__ double p1evl(double x, const uD *p, int n)
|
||||
{
|
||||
register double y;
|
||||
|
||||
n -= 1;
|
||||
y = x + p->d; p++;
|
||||
do
|
||||
{
|
||||
y = y * x + p->d; p++;
|
||||
}
|
||||
while (--n);
|
||||
return (y);
|
||||
}
|
||||
|
||||
|
||||
/* long double */
|
||||
/*
|
||||
Cephes Math Library Release 2.2: July, 1992
|
||||
Copyright 1984, 1987, 1988, 1992 by Stephen L. Moshier
|
||||
Direct inquiries to 30 Frost Street, Cambridge, MA 02140
|
||||
*/
|
||||
|
||||
|
||||
/* polevll.c
|
||||
* p1evll.c
|
||||
*
|
||||
* Evaluate polynomial
|
||||
*
|
||||
*
|
||||
*
|
||||
* SYNOPSIS:
|
||||
*
|
||||
* int N;
|
||||
* long double x, y, coef[N+1], polevl[];
|
||||
*
|
||||
* y = polevll( x, coef, N );
|
||||
*
|
||||
*
|
||||
*
|
||||
* DESCRIPTION:
|
||||
*
|
||||
* Evaluates polynomial of degree N:
|
||||
*
|
||||
* 2 N
|
||||
* y = C + C x + C x +...+ C x
|
||||
* 0 1 2 N
|
||||
*
|
||||
* Coefficients are stored in reverse order:
|
||||
*
|
||||
* coef[0] = C , ..., coef[N] = C .
|
||||
* N 0
|
||||
*
|
||||
* The function p1evll() assumes that coef[N] = 1.0 and is
|
||||
* omitted from the array. Its calling arguments are
|
||||
* otherwise the same as polevll().
|
||||
*
|
||||
*
|
||||
* SPEED:
|
||||
*
|
||||
* In the interest of speed, there are no checks for out
|
||||
* of bounds arithmetic. This routine is used by most of
|
||||
* the functions in the library. Depending on available
|
||||
* equipment features, the user may wish to rewrite the
|
||||
* program in microcode or assembly language.
|
||||
*
|
||||
*/
|
||||
|
||||
/* Polynomial evaluator:
|
||||
* P[0] x^n + P[1] x^(n-1) + ... + P[n]
|
||||
*/
|
||||
static __inline__ long double polevll(long double x, const uLD *p, int n)
|
||||
{
|
||||
register long double y;
|
||||
|
||||
y = p->ld;
|
||||
p++;
|
||||
do
|
||||
{
|
||||
y = y * x + p->ld;
|
||||
p++;
|
||||
}
|
||||
while (--n);
|
||||
return y;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Polynomial evaluator:
|
||||
* x^n + P[0] x^(n-1) + P[1] x^(n-2) + ... + P[n]
|
||||
*/
|
||||
static __inline__ long double p1evll(long double x, const uLD *p, int n)
|
||||
{
|
||||
register long double y;
|
||||
|
||||
n -= 1;
|
||||
y = x + p->ld;
|
||||
p++;
|
||||
|
||||
do
|
||||
{
|
||||
y = y * x + p->ld;
|
||||
p++;
|
||||
}
|
||||
while (--n);
|
||||
return (y);
|
||||
}
|
||||
|
||||
/* Float version */
|
||||
|
||||
/* polevlf.c
|
||||
* p1evlf.c
|
||||
*
|
||||
* Evaluate polynomial
|
||||
*
|
||||
*
|
||||
*
|
||||
* SYNOPSIS:
|
||||
*
|
||||
* int N;
|
||||
* float x, y, coef[N+1], polevlf[];
|
||||
*
|
||||
* y = polevlf( x, coef, N );
|
||||
*
|
||||
*
|
||||
*
|
||||
* DESCRIPTION:
|
||||
*
|
||||
* Evaluates polynomial of degree N:
|
||||
*
|
||||
* 2 N
|
||||
* y = C + C x + C x +...+ C x
|
||||
* 0 1 2 N
|
||||
*
|
||||
* Coefficients are stored in reverse order:
|
||||
*
|
||||
* coef[0] = C , ..., coef[N] = C .
|
||||
* N 0
|
||||
*
|
||||
* The function p1evl() assumes that coef[N] = 1.0 and is
|
||||
* omitted from the array. Its calling arguments are
|
||||
* otherwise the same as polevl().
|
||||
*
|
||||
*
|
||||
* SPEED:
|
||||
*
|
||||
* In the interest of speed, there are no checks for out
|
||||
* of bounds arithmetic. This routine is used by most of
|
||||
* the functions in the library. Depending on available
|
||||
* equipment features, the user may wish to rewrite the
|
||||
* program in microcode or assembly language.
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
Cephes Math Library Release 2.1: December, 1988
|
||||
Copyright 1984, 1987, 1988 by Stephen L. Moshier
|
||||
Direct inquiries to 30 Frost Street, Cambridge, MA 02140
|
||||
*/
|
||||
|
||||
static __inline__ float polevlf(float x, const float* coef, int N)
|
||||
{
|
||||
float ans;
|
||||
float *p;
|
||||
int i;
|
||||
|
||||
p = (float*)coef;
|
||||
ans = *p++;
|
||||
|
||||
/*
|
||||
for (i = 0; i < N; i++)
|
||||
ans = ans * x + *p++;
|
||||
*/
|
||||
|
||||
i = N;
|
||||
do
|
||||
ans = ans * x + *p++;
|
||||
while (--i);
|
||||
|
||||
return (ans);
|
||||
}
|
||||
|
||||
/* p1evl() */
|
||||
/* N
|
||||
* Evaluate polynomial when coefficient of x is 1.0.
|
||||
* Otherwise same as polevl.
|
||||
*/
|
||||
|
||||
static __inline__ float p1evlf(float x, const float *coef, int N)
|
||||
{
|
||||
float ans;
|
||||
float *p;
|
||||
int i;
|
||||
|
||||
p = (float*)coef;
|
||||
ans = x + *p++;
|
||||
i = N - 1;
|
||||
|
||||
do
|
||||
ans = ans * x + *p++;
|
||||
while (--i);
|
||||
|
||||
return (ans);
|
||||
}
|
||||
|
|
@ -0,0 +1,111 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
__FLT_TYPE __complex__ __cdecl
|
||||
__FLT_ABI(cexp) (__FLT_TYPE __complex__ z)
|
||||
{
|
||||
__complex__ __FLT_TYPE ret;
|
||||
__FLT_TYPE s_x, c_x, exp_val, v;
|
||||
int r_class = fpclassify (__real__ z);
|
||||
int i_class = fpclassify (__imag__ z);
|
||||
|
||||
if (r_class == FP_INFINITE)
|
||||
{
|
||||
if (i_class != FP_NAN && i_class != FP_INFINITE)
|
||||
{
|
||||
v = signbit (__real__ z) ? __FLT_CST(0.0) : __FLT_HUGE_VAL;
|
||||
|
||||
if (i_class == FP_ZERO)
|
||||
{
|
||||
__real__ ret = v;
|
||||
__imag__ ret = __imag__ z;
|
||||
return ret;
|
||||
}
|
||||
|
||||
__FLT_ABI(sincos) (__imag__ z, &s_x, &c_x);
|
||||
|
||||
__real__ ret = __FLT_ABI(copysign) (v, c_x);
|
||||
__imag__ ret = __FLT_ABI(copysign) (v, s_x);
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (signbit (__real__ z) == 0)
|
||||
{
|
||||
__real__ ret = __FLT_HUGE_VAL;
|
||||
__imag__ ret = __FLT_NAN;
|
||||
}
|
||||
else
|
||||
{
|
||||
__real__ ret = __FLT_CST(0.0);
|
||||
__imag__ ret = __FLT_ABI(copysign) (__FLT_CST(0.0), __imag__ z);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (r_class == FP_NAN || i_class == FP_NAN || i_class == FP_INFINITE)
|
||||
{
|
||||
__real__ ret = __FLT_NAN;
|
||||
if (i_class == FP_ZERO)
|
||||
__imag__ ret = __FLT_ABI(copysign) (__FLT_CST(0.0), __imag__ z);
|
||||
else
|
||||
__imag__ ret = __FLT_NAN;
|
||||
return ret;
|
||||
}
|
||||
|
||||
exp_val = __FLT_ABI(exp) (__real__ z);
|
||||
|
||||
__FLT_ABI(sincos) (__imag__ z, &s_x, &c_x);
|
||||
|
||||
if (isfinite (exp_val))
|
||||
{
|
||||
__real__ ret = exp_val * c_x;
|
||||
__imag__ ret = exp_val * s_x;
|
||||
}
|
||||
else
|
||||
{
|
||||
__real__ ret = __FLT_ABI(copysign) (exp_val, c_x);
|
||||
__imag__ ret = __FLT_ABI(copysign) (exp_val, s_x);
|
||||
}
|
||||
return ret;
|
||||
}
|
|
@ -0,0 +1,48 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
/* long double version of the functions. */
|
||||
#define _NEW_COMPLEX_LDOUBLE 1
|
||||
#include "complex_internal.h"
|
||||
#include "cexp.def.h"
|
|
@ -0,0 +1,49 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
__FLT_TYPE __cdecl
|
||||
__FLT_ABI(cimag) (__FLT_TYPE __complex z)
|
||||
{
|
||||
return __imag__ z;
|
||||
}
|
|
@ -0,0 +1,48 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
/* long double version of the functions. */
|
||||
#define _NEW_COMPLEX_LDOUBLE 1
|
||||
#include "complex_internal.h"
|
||||
#include "cimag.def.h"
|
|
@ -0,0 +1,71 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
__FLT_TYPE __complex__ __cdecl
|
||||
__FLT_ABI(clog) (__FLT_TYPE __complex__ z)
|
||||
{
|
||||
__complex__ __FLT_TYPE ret;
|
||||
int r_class = fpclassify (__real__ z);
|
||||
int i_class = fpclassify (__imag__ z);
|
||||
|
||||
if (r_class == FP_ZERO && i_class == FP_ZERO)
|
||||
{
|
||||
__imag__ ret = signbit (__real__ z) ? __FLT_PI : __FLT_CST(0.0);
|
||||
__imag__ ret = __FLT_ABI(copysign) (__imag__ ret, __imag__ z);
|
||||
__real__ ret = -__FLT_CST(1.0) / __FLT_ABI(fabs) (__real__ z);
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (r_class == FP_NAN || i_class == FP_NAN)
|
||||
{
|
||||
__imag__ ret = __FLT_NAN;
|
||||
__real__ ret = ((r_class == FP_INFINITE || i_class == FP_INFINITE) ? __FLT_HUGE_VAL : __FLT_NAN);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
__real__ ret = __FLT_ABI(log) (__FLT_ABI(hypot) (__real__ z, __imag__ z));
|
||||
__imag__ ret = __FLT_ABI(atan2) (__imag__ z, __real__ z);
|
||||
return ret;
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
__FLT_TYPE __complex__ __cdecl
|
||||
__FLT_ABI(clog10) (__FLT_TYPE __complex__ z)
|
||||
{
|
||||
__complex__ __FLT_TYPE ret;
|
||||
int r_class = fpclassify (__real__ z);
|
||||
int i_class = fpclassify (__imag__ z);
|
||||
|
||||
if (r_class == FP_ZERO && i_class == FP_ZERO)
|
||||
{
|
||||
__imag__ ret = signbit (__real__ z) ? __FLT_PI : __FLT_CST(0.0);
|
||||
__imag__ ret = __FLT_ABI(copysign) (__imag__ ret, __imag__ z);
|
||||
__real__ ret = -__FLT_CST(1.0) / __FLT_ABI(fabs) (__real__ z);
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (r_class == FP_NAN || i_class == FP_NAN)
|
||||
{
|
||||
__imag__ ret = __FLT_NAN;
|
||||
__real__ ret = ((r_class == FP_INFINITE || i_class == FP_INFINITE) ? __FLT_HUGE_VAL : __FLT_NAN);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
__real__ ret = __FLT_ABI(log10) (__FLT_ABI(hypot) (__real__ z, __imag__ z));
|
||||
__imag__ ret = __FLT_LOG10E * __FLT_ABI(atan2) (__imag__ z, __real__ z);
|
||||
return ret;
|
||||
}
|
|
@ -0,0 +1,48 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
/* long double version of the functions. */
|
||||
#define _NEW_COMPLEX_LDOUBLE 1
|
||||
#include "complex_internal.h"
|
||||
#include "clog10.def.h"
|
|
@ -0,0 +1,48 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
/* long double version of the functions. */
|
||||
#define _NEW_COMPLEX_LDOUBLE 1
|
||||
#include "complex_internal.h"
|
||||
#include "clog.def.h"
|
|
@ -0,0 +1,153 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
#ifdef __CYGWIN__
|
||||
/* Disable __IMPORT when defining __fdlib_version. */
|
||||
#define _COMPILING_NEWLIB
|
||||
#define _GNU_SOURCE
|
||||
#endif
|
||||
#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))
|
||||
|
||||
#ifdef __CYGWIN__
|
||||
inline void __attribute__ ((always_inline))
|
||||
__mingw_raise_matherr (int typ, const char *name, double a1, double a2,
|
||||
double rslt)
|
||||
{
|
||||
if (_LIB_VERSION != _POSIX_)
|
||||
{
|
||||
struct exception ex;
|
||||
ex.type = typ;
|
||||
ex.name = (char*)name;
|
||||
ex.arg1 = a1;
|
||||
ex.arg2 = a2;
|
||||
ex.retval = rslt;
|
||||
matherr(&ex);
|
||||
}
|
||||
}
|
||||
#define _DOMAIN DOMAIN
|
||||
#define _OVERFLOW OVERFLOW
|
||||
#define _UNDERFLOW UNDERFLOW
|
||||
#endif
|
|
@ -0,0 +1,49 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
__FLT_TYPE __complex__ __cdecl
|
||||
__FLT_ABI(conj) (__FLT_TYPE __complex__ z)
|
||||
{
|
||||
return ~z;
|
||||
}
|
|
@ -0,0 +1,48 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
/* long double version of the functions. */
|
||||
#define _NEW_COMPLEX_LDOUBLE 1
|
||||
#include "complex_internal.h"
|
||||
#include "conj.def.h"
|
|
@ -0,0 +1,56 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the mingw-w64 runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
|
||||
*/
|
||||
/*
|
||||
* Written by J.T. Conklin <jtc@netbsd.org>.
|
||||
* Changes for long double by Ulrich Drepper <drepper@cygnus.com>
|
||||
* Public domain.
|
||||
*/
|
||||
#include <_mingw_mac.h>
|
||||
|
||||
.file "copysignl.S"
|
||||
.text
|
||||
#ifdef __x86_64__
|
||||
.align 8
|
||||
#else
|
||||
.align 4
|
||||
#endif
|
||||
|
||||
.globl __MINGW_USYMBOL(copysignl)
|
||||
.def __MINGW_USYMBOL(copysignl); .scl 2; .type 32; .endef
|
||||
__MINGW_USYMBOL(copysignl):
|
||||
#if defined(_AMD64_) || defined(__x86_64__)
|
||||
movq (%rdx), %rax
|
||||
movq %rax, (%rcx)
|
||||
movq 8(%rdx), %rax
|
||||
movq 8(%r8), %rdx
|
||||
andq $0x777f, %rax
|
||||
andq $0x8000, %rdx
|
||||
orq %rdx, %rax
|
||||
movq %rax, 8(%rcx)
|
||||
movq %rcx, %rax
|
||||
ret
|
||||
#elif defined(_ARM_) || defined(__arm__)
|
||||
fcmpzd d1
|
||||
fmstat
|
||||
bmi 1f /* jump if d1 is negative */
|
||||
fcmpzd d0
|
||||
fmstat
|
||||
vnegmi.f64 d0, d0 /* negate d0 if it is negative */
|
||||
bx lr
|
||||
1: fcmpzd d0
|
||||
fmstat
|
||||
vnegpl.f64 d0, d0 /* negate d0 if it is positive */
|
||||
bx lr
|
||||
#elif defined(_X86_) || defined(__i386__)
|
||||
movl 24(%esp),%edx
|
||||
movl 12(%esp),%eax
|
||||
andl $0x8000,%edx
|
||||
andl $0x7fff,%eax
|
||||
orl %edx,%eax
|
||||
movl %eax,12(%esp)
|
||||
fldt 4(%esp)
|
||||
ret
|
||||
#endif
|
|
@ -0,0 +1,65 @@
|
|||
/*
|
||||
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 "complex_internal.h"
|
||||
#include <errno.h>
|
||||
|
||||
extern long double __cosl_internal (long double);
|
||||
|
||||
__FLT_TYPE
|
||||
__FLT_ABI(cos) (__FLT_TYPE x)
|
||||
{
|
||||
int x_class = fpclassify (x);
|
||||
if (x_class == FP_NAN)
|
||||
{
|
||||
__FLT_RPT_DOMAIN ("cos", x, 0.0, x);
|
||||
return x;
|
||||
}
|
||||
else if (x_class == FP_INFINITE)
|
||||
{
|
||||
__FLT_RPT_DOMAIN ("cos", x, 0.0, __FLT_NAN);
|
||||
return __FLT_NAN;
|
||||
}
|
||||
return (__FLT_TYPE) __cosl_internal ((long double) x);
|
||||
}
|
|
@ -0,0 +1,45 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the mingw-w64 runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
|
||||
*/
|
||||
#include "cephes_mconf.h"
|
||||
|
||||
#ifndef _SET_ERRNO
|
||||
#define _SET_ERRNO(x)
|
||||
#endif
|
||||
|
||||
long double coshl(long double x)
|
||||
{
|
||||
long double y;
|
||||
int x_class = fpclassify (x);
|
||||
if (x_class == FP_NAN)
|
||||
{
|
||||
errno = EDOM;
|
||||
return x;
|
||||
}
|
||||
else if (x_class == FP_INFINITE)
|
||||
{
|
||||
errno = ERANGE;
|
||||
return x;
|
||||
}
|
||||
x = fabsl (x);
|
||||
if (x > (MAXLOGL + LOGE2L))
|
||||
{
|
||||
errno = ERANGE;
|
||||
#ifdef INFINITIES
|
||||
return (INFINITYL);
|
||||
#else
|
||||
return (MAXNUML);
|
||||
#endif
|
||||
}
|
||||
if (x >= (MAXLOGL - LOGE2L))
|
||||
{
|
||||
y = expl(0.5L * x);
|
||||
y = (0.5L * y) * y;
|
||||
return y;
|
||||
}
|
||||
y = expl(x);
|
||||
y = 0.5L * (y + 1.0L / y);
|
||||
return y;
|
||||
}
|
|
@ -0,0 +1,46 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
#define _NEW_COMPLEX_LDOUBLE 1
|
||||
#include "cos.def.h"
|
|
@ -0,0 +1,55 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the mingw-w64 runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
|
||||
*/
|
||||
#include <_mingw_mac.h>
|
||||
|
||||
.file "cosl_internal.S"
|
||||
.text
|
||||
#ifdef __x86_64__
|
||||
.align 8
|
||||
#else
|
||||
.align 4
|
||||
#endif
|
||||
.globl __MINGW_USYMBOL(__cosl_internal)
|
||||
.def __MINGW_USYMBOL(__cosl_internal); .scl 2; .type 32; .endef
|
||||
__MINGW_USYMBOL(__cosl_internal):
|
||||
#ifdef __x86_64__
|
||||
fldt (%rdx)
|
||||
fcos
|
||||
fnstsw %ax
|
||||
testl $0x400,%eax
|
||||
jz 1f
|
||||
fldpi
|
||||
fadd %st(0)
|
||||
fxch %st(1)
|
||||
2: fprem1
|
||||
fnstsw %ax
|
||||
testl $0x400,%eax
|
||||
jnz 2b
|
||||
fstp %st(1)
|
||||
fcos
|
||||
1: movq %rcx,%rax
|
||||
movq $0,8(%rcx)
|
||||
fstpt (%rcx)
|
||||
ret
|
||||
#else
|
||||
fldt 4(%esp)
|
||||
fcos
|
||||
fnstsw %ax
|
||||
testl $0x400,%eax
|
||||
jnz 1f
|
||||
ret
|
||||
1: fldpi
|
||||
fadd %st(0)
|
||||
fxch %st(1)
|
||||
2: fprem1
|
||||
fnstsw %ax
|
||||
testl $0x400,%eax
|
||||
jnz 2b
|
||||
fstp %st(1)
|
||||
fcos
|
||||
ret
|
||||
#endif
|
||||
|
|
@ -0,0 +1,75 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the mingw-w64 runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
|
||||
*/
|
||||
|
||||
void sincos (double __x, double *p_sin, double *p_cos);
|
||||
void sincosl (long double __x, long double *p_sin, long double *p_cos);
|
||||
void sincosf (float __x, float *p_sin, float *p_cos);
|
||||
|
||||
void sincos (double __x, double *p_sin, double *p_cos)
|
||||
{
|
||||
long double c, s;
|
||||
|
||||
__asm__ __volatile__ ("fsincos\n\t"
|
||||
"fnstsw %%ax\n\t"
|
||||
"testl $0x400, %%eax\n\t"
|
||||
"jz 1f\n\t"
|
||||
"fldpi\n\t"
|
||||
"fadd %%st(0)\n\t"
|
||||
"fxch %%st(1)\n\t"
|
||||
"2: fprem1\n\t"
|
||||
"fnstsw %%ax\n\t"
|
||||
"testl $0x400, %%eax\n\t"
|
||||
"jnz 2b\n\t"
|
||||
"fstp %%st(1)\n\t"
|
||||
"fsincos\n\t"
|
||||
"1:" : "=t" (c), "=u" (s) : "0" (__x));
|
||||
*p_sin = (double) s;
|
||||
*p_cos = (double) c;
|
||||
}
|
||||
|
||||
void sincosf (float __x, float *p_sin, float *p_cos)
|
||||
{
|
||||
long double c, s;
|
||||
|
||||
__asm__ __volatile__ ("fsincos\n\t"
|
||||
"fnstsw %%ax\n\t"
|
||||
"testl $0x400, %%eax\n\t"
|
||||
"jz 1f\n\t"
|
||||
"fldpi\n\t"
|
||||
"fadd %%st(0)\n\t"
|
||||
"fxch %%st(1)\n\t"
|
||||
"2: fprem1\n\t"
|
||||
"fnstsw %%ax\n\t"
|
||||
"testl $0x400, %%eax\n\t"
|
||||
"jnz 2b\n\t"
|
||||
"fstp %%st(1)\n\t"
|
||||
"fsincos\n\t"
|
||||
"1:" : "=t" (c), "=u" (s) : "0" (__x));
|
||||
*p_sin = (float) s;
|
||||
*p_cos = (float) c;
|
||||
}
|
||||
|
||||
void sincosl (long double __x, long double *p_sin, long double *p_cos)
|
||||
{
|
||||
long double c, s;
|
||||
|
||||
__asm__ __volatile__ ("fsincos\n\t"
|
||||
"fnstsw %%ax\n\t"
|
||||
"testl $0x400, %%eax\n\t"
|
||||
"jz 1f\n\t"
|
||||
"fldpi\n\t"
|
||||
"fadd %%st(0)\n\t"
|
||||
"fxch %%st(1)\n\t"
|
||||
"2: fprem1\n\t"
|
||||
"fnstsw %%ax\n\t"
|
||||
"testl $0x400, %%eax\n\t"
|
||||
"jnz 2b\n\t"
|
||||
"fstp %%st(1)\n\t"
|
||||
"fsincos\n\t"
|
||||
"1:" : "=t" (c), "=u" (s) : "0" (__x));
|
||||
*p_sin = s;
|
||||
*p_cos = c;
|
||||
}
|
|
@ -0,0 +1,49 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
__FLT_TYPE __complex__ __cdecl
|
||||
__FLT_ABI(cpow) (__FLT_TYPE __complex__ z, __FLT_TYPE __complex__ x)
|
||||
{
|
||||
return __FLT_ABI(cexp) (x * __FLT_ABI(clog) (z));
|
||||
}
|
|
@ -0,0 +1,48 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
/* long double version of the functions. */
|
||||
#define _NEW_COMPLEX_LDOUBLE 1
|
||||
#include "complex_internal.h"
|
||||
#include "cpow.def.h"
|
|
@ -0,0 +1,58 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
__FLT_TYPE __complex__ __cdecl
|
||||
__FLT_ABI(cproj) (__FLT_TYPE __complex__ z)
|
||||
{
|
||||
__complex__ __FLT_TYPE ret;
|
||||
|
||||
if (isinf (__real__ z) || isinf (__imag__ z))
|
||||
{
|
||||
__real__ ret = INFINITY;
|
||||
__imag__ ret = __FLT_ABI(copysign) (__FLT_CST(0.0), __imag__ z);
|
||||
return ret;
|
||||
}
|
||||
|
||||
return z;
|
||||
}
|
|
@ -0,0 +1,48 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
/* long double version of the functions. */
|
||||
#define _NEW_COMPLEX_LDOUBLE 1
|
||||
#include "complex_internal.h"
|
||||
#include "cproj.def.h"
|
|
@ -0,0 +1,49 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
__FLT_TYPE
|
||||
__FLT_ABI(creal) (__FLT_TYPE __complex__ z)
|
||||
{
|
||||
return __real__ z;
|
||||
}
|
|
@ -0,0 +1,48 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
/* long double version of the functions. */
|
||||
#define _NEW_COMPLEX_LDOUBLE 1
|
||||
#include "complex_internal.h"
|
||||
#include "creal.def.h"
|
|
@ -0,0 +1,61 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
__FLT_TYPE __complex__ __cdecl
|
||||
__FLT_ABI(csin) (__FLT_TYPE __complex__ z)
|
||||
{
|
||||
/* Annex G.6: csin(z) = -i csinh (iz) */
|
||||
__complex__ __FLT_TYPE ret;
|
||||
__complex__ __FLT_TYPE x;
|
||||
|
||||
__real__ x = -__imag__ z;
|
||||
__imag__ x = __real__ z;
|
||||
|
||||
x = __FLT_ABI(csinh) (x);
|
||||
|
||||
__real__ ret = __imag__ x;
|
||||
__imag__ ret = -__real__ x;
|
||||
|
||||
return ret;
|
||||
}
|
|
@ -0,0 +1,107 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
__FLT_TYPE __complex__ __cdecl
|
||||
__FLT_ABI(csinh) (__FLT_TYPE __complex__ z)
|
||||
{
|
||||
__complex__ __FLT_TYPE ret;
|
||||
__FLT_TYPE s_x, c_x;
|
||||
int negate = signbit (__real__ z);
|
||||
int r_class = fpclassify (__real__ z);
|
||||
int i_class = fpclassify (__imag__ z);
|
||||
|
||||
__real__ z = __FLT_ABI(fabs) (__real__ z);
|
||||
|
||||
if (r_class == FP_NAN)
|
||||
{
|
||||
__real__ ret = __FLT_NAN;
|
||||
__imag__ ret = __imag__ z == __FLT_CST(0.0) ? __imag__ z : __FLT_NAN;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (r_class == FP_INFINITE)
|
||||
{
|
||||
if (i_class == FP_ZERO)
|
||||
{
|
||||
__real__ ret = negate ? -__FLT_HUGE_VAL : __FLT_HUGE_VAL;
|
||||
__imag__ ret = __imag__ z;
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (i_class == FP_NAN || i_class == FP_INFINITE)
|
||||
{
|
||||
__real__ ret = __FLT_HUGE_VAL;
|
||||
__imag__ ret = __FLT_NAN + __FLT_NAN;
|
||||
|
||||
return ret;
|
||||
}
|
||||
__FLT_ABI(sincos) (__imag__ z, &s_x, &c_x);
|
||||
|
||||
__real__ ret = __FLT_ABI(copysign) (__FLT_HUGE_VAL, c_x);
|
||||
__imag__ ret = __FLT_ABI(copysign) (__FLT_HUGE_VAL, s_x);
|
||||
|
||||
if (negate)
|
||||
__real__ ret = -__real__ ret;
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (i_class == FP_NAN || i_class == FP_INFINITE)
|
||||
{
|
||||
__real__ ret = (r_class == FP_ZERO
|
||||
? (__FLT_ABI(copysign) (__FLT_CST(0.0), negate ? -__FLT_CST(1.0) : __FLT_CST(1.0))) : __FLT_NAN);
|
||||
__imag__ ret = (r_class == FP_ZERO ? (__FLT_NAN + __FLT_NAN) : __FLT_NAN);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
__FLT_ABI(sincos) (__imag__ z, &s_x, &c_x);
|
||||
|
||||
__real__ ret = __FLT_ABI(sinh) (__real__ z) * c_x;
|
||||
__imag__ ret = __FLT_ABI(cosh) (__real__ z) * s_x;
|
||||
|
||||
if (negate)
|
||||
__real__ ret = -__real__ ret;
|
||||
return ret;
|
||||
}
|
|
@ -0,0 +1,50 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
/* long double version of the functions. */
|
||||
#define _NEW_COMPLEX_LDOUBLE 1
|
||||
#include "complex_internal.h"
|
||||
|
||||
#include "csinh.def.h"
|
||||
#include "csin.def.h"
|
|
@ -0,0 +1,122 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
__FLT_TYPE __complex__ __cdecl
|
||||
__FLT_ABI(csqrt) (__FLT_TYPE __complex__ z)
|
||||
{
|
||||
__complex__ __FLT_TYPE ret;
|
||||
__FLT_TYPE d, r, s;
|
||||
int r_class = fpclassify (__real__ z);
|
||||
int i_class = fpclassify (__imag__ z);
|
||||
|
||||
if (r_class == FP_INFINITE || r_class == FP_NAN || i_class == FP_INFINITE || i_class == FP_NAN)
|
||||
{
|
||||
if (i_class == FP_INFINITE)
|
||||
{
|
||||
__real__ ret = __FLT_HUGE_VAL;
|
||||
__imag__ ret = __imag__ z;
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (r_class == FP_INFINITE)
|
||||
{
|
||||
if (__real__ z < __FLT_CST(0.0))
|
||||
{
|
||||
__real__ ret = i_class == FP_NAN ? __FLT_NAN : __FLT_CST(0.0);
|
||||
__imag__ ret = __FLT_ABI(copysign) (__FLT_HUGE_VAL, __imag__ z);
|
||||
return ret;
|
||||
}
|
||||
|
||||
__real__ ret = __real__ z;
|
||||
__imag__ ret = (i_class == FP_NAN
|
||||
? __FLT_NAN : __FLT_ABI(copysign) (__FLT_CST(0.0), __imag__ z));
|
||||
return ret;
|
||||
}
|
||||
|
||||
__real__ ret = __FLT_NAN;
|
||||
__imag__ ret = __FLT_NAN;
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (i_class == FP_ZERO)
|
||||
{
|
||||
if (__real__ z < __FLT_CST(0.0))
|
||||
{
|
||||
__real__ ret = __FLT_CST(0.0);
|
||||
__imag__ ret = __FLT_ABI(copysign) (__FLT_ABI(sqrt) (-__real__ z), __imag__ z);
|
||||
}
|
||||
else
|
||||
{
|
||||
__real__ ret = __FLT_ABI(fabs) (__FLT_ABI(sqrt) (__real__ z));
|
||||
__imag__ ret = __FLT_ABI(copysign) (__FLT_CST(0.0), __imag__ z);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (r_class == FP_ZERO)
|
||||
{
|
||||
r = __FLT_ABI(sqrt) (__FLT_CST(0.5) * __FLT_ABI(fabs) (__imag__ z));
|
||||
|
||||
__real__ ret = r;
|
||||
__imag__ ret = __FLT_ABI(copysign) (r, __imag__ z);
|
||||
return ret;
|
||||
}
|
||||
|
||||
d = __FLT_ABI(hypot) (__real__ z, __imag__ z);
|
||||
if (__real__ z > __FLT_CST(0.0))
|
||||
{
|
||||
r = __FLT_ABI(sqrt) (__FLT_CST(0.5) * d + __FLT_CST(0.5) * __real__ z);
|
||||
s = (__FLT_CST(0.5) * __imag__ z) / r;
|
||||
}
|
||||
else
|
||||
{
|
||||
s = __FLT_ABI(sqrt) (__FLT_CST(0.5) * d - __FLT_CST(0.5) * __real__ z);
|
||||
r = __FLT_ABI(fabs) ((__FLT_CST(0.5) * __imag__ z) / s);
|
||||
}
|
||||
|
||||
__real__ ret = r;
|
||||
__imag__ ret = __FLT_ABI(copysign) (s, __imag__ z);
|
||||
|
||||
return ret;
|
||||
}
|
|
@ -0,0 +1,48 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
/* long double version of the functions. */
|
||||
#define _NEW_COMPLEX_LDOUBLE 1
|
||||
#include "complex_internal.h"
|
||||
#include "csqrt.def.h"
|
|
@ -0,0 +1,61 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
__FLT_TYPE __complex__ __cdecl
|
||||
__FLT_ABI(ctan) (__FLT_TYPE __complex__ z)
|
||||
{
|
||||
/* Annex G.6: ctan(z) = -i ctanh (iz) */
|
||||
__complex__ __FLT_TYPE ret;
|
||||
__complex__ __FLT_TYPE x;
|
||||
|
||||
__real__ x = -__imag__ z;
|
||||
__imag__ x = __real__ z;
|
||||
|
||||
x = __FLT_ABI(ctanh) (x);
|
||||
|
||||
__real__ ret = __imag__ x;
|
||||
__imag__ ret = -__real__ x;
|
||||
|
||||
return ret;
|
||||
}
|
|
@ -0,0 +1,94 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
__FLT_TYPE __complex__ __cdecl
|
||||
__FLT_ABI(ctanh) (__FLT_TYPE __complex__ z)
|
||||
{
|
||||
__complex__ __FLT_TYPE ret;
|
||||
__FLT_TYPE s, c, d;
|
||||
|
||||
if (!isfinite (__real__ z) || !isfinite (__imag__ z))
|
||||
{
|
||||
if (isinf (__real__ z))
|
||||
{
|
||||
__real__ ret = __FLT_ABI(copysign) (__FLT_CST(1.0), __real__ z);
|
||||
|
||||
/* fmod will return NaN if __imag__ z is infinity. This is actually
|
||||
OK, because imaginary infinity returns a + or - zero (unspecified).
|
||||
For +x, sin (x) is negative if fmod (x, 2pi) > pi.
|
||||
For -x, sin (x) is positive if fmod (x, 2pi) < pi.
|
||||
We use epsilon to ensure that the zeros are detected properly with
|
||||
float and long double comparisons. */
|
||||
s = __FLT_ABI(fmod) (__imag__ z, __FLT_PI);
|
||||
if (signbit (__imag__ z))
|
||||
__imag__ ret = s + __FLT_PI_2 < -__FLT_EPSILON ? 0.0 : -0.0;
|
||||
else
|
||||
__imag__ ret = s - __FLT_PI_2 > __FLT_EPSILON ? -0.0 : 0.0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (__imag__ z == __FLT_CST(0.0))
|
||||
return z;
|
||||
|
||||
__real__ ret = __FLT_NAN;
|
||||
__imag__ ret = __FLT_NAN;
|
||||
return ret;
|
||||
}
|
||||
|
||||
__FLT_ABI(sincos) (__FLT_CST(2.0) * __imag__ z, &s, &c);
|
||||
|
||||
d = (__FLT_ABI(cosh) (__FLT_CST(2.0) * __real__ z) + c);
|
||||
|
||||
if (d == __FLT_CST(0.0))
|
||||
{
|
||||
__complex__ __FLT_TYPE ez = __FLT_ABI(cexp) (z);
|
||||
__complex__ __FLT_TYPE emz = __FLT_ABI(cexp) (-z);
|
||||
|
||||
return (ez - emz) / (ez + emz);
|
||||
}
|
||||
|
||||
__real__ ret = __FLT_ABI(sinh) (__FLT_CST(2.0) * __real__ z) / d;
|
||||
__imag__ ret = s / d;
|
||||
return ret;
|
||||
}
|
|
@ -0,0 +1,50 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
/* long double version of the functions. */
|
||||
#define _NEW_COMPLEX_LDOUBLE 1
|
||||
#include "complex_internal.h"
|
||||
|
||||
#include "ctanh.def.h"
|
||||
#include "ctan.def.h"
|
|
@ -0,0 +1,303 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the mingw-w64 runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
|
||||
*/
|
||||
/* erfl.c
|
||||
*
|
||||
* Error function
|
||||
*
|
||||
*
|
||||
*
|
||||
* SYNOPSIS:
|
||||
*
|
||||
* long double x, y, erfl();
|
||||
*
|
||||
* y = erfl( x );
|
||||
*
|
||||
*
|
||||
*
|
||||
* DESCRIPTION:
|
||||
*
|
||||
* The integral is
|
||||
*
|
||||
* x
|
||||
* -
|
||||
* 2 | | 2
|
||||
* erf(x) = -------- | exp( - t ) dt.
|
||||
* sqrt(pi) | |
|
||||
* -
|
||||
* 0
|
||||
*
|
||||
* The magnitude of x is limited to about 106.56 for IEEE
|
||||
* arithmetic; 1 or -1 is returned outside this range.
|
||||
*
|
||||
* For 0 <= |x| < 1, erf(x) = x * P6(x^2)/Q6(x^2);
|
||||
* Otherwise: erf(x) = 1 - erfc(x).
|
||||
*
|
||||
*
|
||||
*
|
||||
* ACCURACY:
|
||||
*
|
||||
* Relative error:
|
||||
* arithmetic domain # trials peak rms
|
||||
* IEEE 0,1 50000 2.0e-19 5.7e-20
|
||||
*
|
||||
*/
|
||||
|
||||
/* erfcl.c
|
||||
*
|
||||
* Complementary error function
|
||||
*
|
||||
*
|
||||
*
|
||||
* SYNOPSIS:
|
||||
*
|
||||
* long double x, y, erfcl();
|
||||
*
|
||||
* y = erfcl( x );
|
||||
*
|
||||
*
|
||||
*
|
||||
* DESCRIPTION:
|
||||
*
|
||||
*
|
||||
* 1 - erf(x) =
|
||||
*
|
||||
* inf.
|
||||
* -
|
||||
* 2 | | 2
|
||||
* erfc(x) = -------- | exp( - t ) dt
|
||||
* sqrt(pi) | |
|
||||
* -
|
||||
* x
|
||||
*
|
||||
*
|
||||
* For small x, erfc(x) = 1 - erf(x); otherwise rational
|
||||
* approximations are computed.
|
||||
*
|
||||
* A special function expx2l.c is used to suppress error amplification
|
||||
* in computing exp(-x^2).
|
||||
*
|
||||
*
|
||||
* ACCURACY:
|
||||
*
|
||||
* Relative error:
|
||||
* arithmetic domain # trials peak rms
|
||||
* IEEE 0,13 50000 8.4e-19 9.7e-20
|
||||
* IEEE 6,106.56 20000 2.9e-19 7.1e-20
|
||||
*
|
||||
*
|
||||
* ERROR MESSAGES:
|
||||
*
|
||||
* message condition value returned
|
||||
* erfcl underflow x^2 > MAXLOGL 0.0
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
Modified from file ndtrl.c
|
||||
Cephes Math Library Release 2.3: January, 1995
|
||||
Copyright 1984, 1995 by Stephen L. Moshier
|
||||
*/
|
||||
|
||||
#include <math.h>
|
||||
#include "cephes_mconf.h"
|
||||
|
||||
long double erfl(long double x);
|
||||
|
||||
/* erfc(x) = exp(-x^2) P(1/x)/Q(1/x)
|
||||
1/8 <= 1/x <= 1
|
||||
Peak relative error 5.8e-21 */
|
||||
|
||||
static const uLD P[10] = {
|
||||
{ { 0x4bf0,0x9ad8,0x7a03,0x86c7,0x401d, 0, 0, 0 } },
|
||||
{ { 0xdf23,0xd843,0x4032,0x8881,0x401e, 0, 0, 0 } },
|
||||
{ { 0xd025,0xcfd5,0x8494,0x88d3,0x401e, 0, 0, 0 } },
|
||||
{ { 0xb6d0,0xc92b,0x5417,0xacb1,0x401d, 0, 0, 0 } },
|
||||
{ { 0xada8,0x356a,0x4982,0x94a6,0x401c, 0, 0, 0 } },
|
||||
{ { 0x4e13,0xcaee,0x9e31,0xb258,0x401a, 0, 0, 0 } },
|
||||
{ { 0x5840,0x554d,0x37a3,0x9239,0x4018, 0, 0, 0 } },
|
||||
{ { 0x3b58,0x3da2,0xaf02,0x9780,0x4015, 0, 0, 0 } },
|
||||
{ { 0x0144,0x489e,0xbe68,0x9c31,0x4011, 0, 0, 0 } },
|
||||
{ { 0x333b,0xd9e6,0xd404,0x986f,0xbfee, 0, 0, 0 } }
|
||||
};
|
||||
static const uLD Q[] = {
|
||||
{ { 0x0e43,0x302d,0x79ed,0x86c7,0x401d, 0, 0, 0 } },
|
||||
{ { 0xf817,0x9128,0xc0f8,0xd48b,0x401e, 0, 0, 0 } },
|
||||
{ { 0x8eae,0x8dad,0x6eb4,0x9aa2,0x401f, 0, 0, 0 } },
|
||||
{ { 0x00e7,0x7595,0xcd06,0x88bb,0x401f, 0, 0, 0 } },
|
||||
{ { 0x4991,0xcfda,0x52f1,0xa2a9,0x401e, 0, 0, 0 } },
|
||||
{ { 0xc39d,0xe415,0xc43d,0x87c0,0x401d, 0, 0, 0 } },
|
||||
{ { 0xa75d,0x436f,0x30dd,0xa027,0x401b, 0, 0, 0 } },
|
||||
{ { 0xc4cb,0x305a,0xbf78,0x8220,0x4019, 0, 0, 0 } },
|
||||
{ { 0x3708,0x33b1,0x07fa,0x8644,0x4016, 0, 0, 0 } },
|
||||
{ { 0x24fa,0x96f6,0x7153,0x8a6c,0x4012, 0, 0, 0 } }
|
||||
};
|
||||
|
||||
/* erfc(x) = exp(-x^2) 1/x R(1/x^2) / S(1/x^2)
|
||||
1/128 <= 1/x < 1/8
|
||||
Peak relative error 1.9e-21 */
|
||||
|
||||
static const uLD R[] = {
|
||||
{ { 0x260a,0xab95,0x2fc7,0xe7c4,0x4000, 0, 0, 0 } },
|
||||
{ { 0x4761,0x613e,0xdf6d,0xe58e,0x4001, 0, 0, 0 } },
|
||||
{ { 0x0615,0x4b00,0x575f,0xdc7b,0x4000, 0, 0, 0 } },
|
||||
{ { 0x521d,0x8527,0x3435,0x8dc2,0x3ffe, 0, 0, 0 } },
|
||||
{ { 0x22cf,0xc711,0x6c5b,0xdcfb,0x3ff9, 0, 0, 0 } }
|
||||
};
|
||||
static const uLD S[] = {
|
||||
{ { 0x5de6,0x17d7,0x54d6,0xaba9,0x4002, 0, 0, 0 } },
|
||||
{ { 0x55d5,0xd300,0xe71e,0xf564,0x4002, 0, 0, 0 } },
|
||||
{ { 0xb611,0x8f76,0xf020,0xd255,0x4001, 0, 0, 0 } },
|
||||
{ { 0x3684,0x3798,0xb793,0x80b0,0x3fff, 0, 0, 0 } },
|
||||
{ { 0xf5af,0x2fb2,0x1e57,0xc3d7,0x3ffa, 0, 0, 0 } }
|
||||
};
|
||||
|
||||
/* erf(x) = x T(x^2)/U(x^2)
|
||||
0 <= x <= 1
|
||||
Peak relative error 7.6e-23 */
|
||||
|
||||
static const uLD T[] = {
|
||||
{ { 0xfd7a,0x3a1a,0x705b,0xe0c4,0x3ffb, 0, 0, 0 } },
|
||||
{ { 0x3128,0xc337,0x3716,0xace5,0x4001, 0, 0, 0 } },
|
||||
{ { 0x9517,0x4e93,0x540e,0x8f97,0x4007, 0, 0, 0 } },
|
||||
{ { 0x6118,0x6059,0x9093,0xa757,0x400a, 0, 0, 0 } },
|
||||
{ { 0xb954,0xa987,0xc60c,0xbc83,0x400e, 0, 0, 0 } },
|
||||
{ { 0x7a56,0xe45a,0xa4bd,0x975b,0x4010, 0, 0, 0 } },
|
||||
{ { 0xc446,0x6bab,0x0b2a,0x86d0,0x4013, 0, 0, 0 } }
|
||||
};
|
||||
|
||||
static const uLD U[] = {
|
||||
{ { 0x3453,0x1f8e,0xf688,0xb507,0x4004, 0, 0, 0 } },
|
||||
{ { 0x71ac,0xb12f,0x21ca,0xf2e2,0x4008, 0, 0, 0 } },
|
||||
{ { 0xffe8,0x9cac,0x3b84,0xc2ac,0x400c, 0, 0, 0 } },
|
||||
{ { 0x481d,0x445b,0xc807,0xc232,0x400f, 0, 0, 0 } },
|
||||
{ { 0x9ad5,0x1aef,0x45b1,0xe25e,0x4011, 0, 0, 0 } },
|
||||
{ { 0x71a7,0x1cad,0x012e,0xeef3,0x4012, 0, 0, 0 } }
|
||||
};
|
||||
|
||||
/* expx2l.c
|
||||
*
|
||||
* Exponential of squared argument
|
||||
*
|
||||
*
|
||||
*
|
||||
* SYNOPSIS:
|
||||
*
|
||||
* long double x, y, expmx2l();
|
||||
* int sign;
|
||||
*
|
||||
* y = expx2l( x );
|
||||
*
|
||||
*
|
||||
*
|
||||
* DESCRIPTION:
|
||||
*
|
||||
* Computes y = exp(x*x) while suppressing error amplification
|
||||
* that would ordinarily arise from the inexactness of the
|
||||
* exponential argument x*x.
|
||||
*
|
||||
*
|
||||
*
|
||||
* ACCURACY:
|
||||
*
|
||||
* Relative error:
|
||||
* arithmetic domain # trials peak rms
|
||||
* IEEE -106.566, 106.566 10^5 1.6e-19 4.4e-20
|
||||
*
|
||||
*/
|
||||
|
||||
#define M 32768.0L
|
||||
#define MINV 3.0517578125e-5L
|
||||
|
||||
static long double expx2l (long double x)
|
||||
{
|
||||
long double u, u1, m, f;
|
||||
|
||||
x = fabsl (x);
|
||||
/* Represent x as an exact multiple of M plus a residual.
|
||||
M is a power of 2 chosen so that exp(m * m) does not overflow
|
||||
or underflow and so that |x - m| is small. */
|
||||
m = MINV * floorl(M * x + 0.5L);
|
||||
f = x - m;
|
||||
|
||||
/* x^2 = m^2 + 2mf + f^2 */
|
||||
u = m * m;
|
||||
u1 = 2 * m * f + f * f;
|
||||
|
||||
if ((u + u1) > MAXLOGL)
|
||||
return (INFINITYL);
|
||||
|
||||
/* u is exact, u1 is small. */
|
||||
u = expl(u) * expl(u1);
|
||||
return (u);
|
||||
}
|
||||
|
||||
long double erfcl(long double a)
|
||||
{
|
||||
long double p, q, x, y, z;
|
||||
|
||||
if (isinf (a))
|
||||
return (signbit(a) ? 2.0 : 0.0);
|
||||
|
||||
x = fabsl (a);
|
||||
|
||||
if (x < 1.0L)
|
||||
return (1.0L - erfl(a));
|
||||
|
||||
z = a * a;
|
||||
|
||||
if (z > MAXLOGL)
|
||||
{
|
||||
under:
|
||||
mtherr("erfcl", UNDERFLOW);
|
||||
errno = ERANGE;
|
||||
return (signbit(a) ? 2.0 : 0.0);
|
||||
}
|
||||
|
||||
/* Compute z = expl(a * a). */
|
||||
z = expx2l(a);
|
||||
y = 1.0L/x;
|
||||
|
||||
if (x < 8.0L)
|
||||
{
|
||||
p = polevll(y, P, 9);
|
||||
q = p1evll(y, Q, 10);
|
||||
}
|
||||
else
|
||||
{
|
||||
q = y * y;
|
||||
p = y * polevll(q, R, 4);
|
||||
q = p1evll(q, S, 5);
|
||||
}
|
||||
y = p/(q * z);
|
||||
|
||||
if (a < 0.0L)
|
||||
y = 2.0L - y;
|
||||
|
||||
if (y == 0.0L)
|
||||
goto under;
|
||||
|
||||
return (y);
|
||||
}
|
||||
|
||||
long double erfl(long double x)
|
||||
{
|
||||
long double y, z;
|
||||
|
||||
if (x == 0.0L)
|
||||
return (x);
|
||||
|
||||
if (isinf (x))
|
||||
return (signbit(x) ? -1.0L : 1.0L);
|
||||
|
||||
if (fabsl(x) > 1.0L)
|
||||
return (1.0L - erfcl(x));
|
||||
|
||||
z = x * x;
|
||||
y = x * polevll(z, T, 6) / p1evll(z, U, 6);
|
||||
return (y);
|
||||
}
|
|
@ -0,0 +1,136 @@
|
|||
/*
|
||||
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 "complex_internal.h"
|
||||
#include <errno.h>
|
||||
|
||||
static long double c0 = 1.44268798828125L; // INV_LN2
|
||||
static long double c1 = 7.05260771340735992468e-6L;
|
||||
|
||||
static long double
|
||||
__expl_internal (long double x)
|
||||
{
|
||||
long double res = 0.0L;
|
||||
asm ("fldl2e\n\t" /* 1 log2(e) */
|
||||
"fmul %%st(1),%%st\n\t" /* 1 x log2(e) */
|
||||
|
||||
#ifdef __x86_64__
|
||||
"subq $8, %%rsp\n"
|
||||
"fnstcw 4(%%rsp)\n"
|
||||
"movzwl 4(%%rsp), %%eax\n"
|
||||
"orb $12, %%ah\n"
|
||||
"movw %%ax, (%%rsp)\n"
|
||||
"fldcw (%%rsp)\n"
|
||||
"frndint\n\t" /* 1 i */
|
||||
"fld %%st(1)\n\t" /* 2 x */
|
||||
"frndint\n\t" /* 2 xi */
|
||||
"fldcw 4(%%rsp)\n"
|
||||
"addq $8, %%rsp\n"
|
||||
#else
|
||||
"push %%eax\n\tsubl $8, %%esp\n"
|
||||
"fnstcw 4(%%esp)\n"
|
||||
"movzwl 4(%%esp), %%eax\n"
|
||||
"orb $12, %%ah\n"
|
||||
"movw %%ax, (%%esp)\n"
|
||||
"fldcw (%%esp)\n"
|
||||
"frndint\n\t" /* 1 i */
|
||||
"fld %%st(1)\n\t" /* 2 x */
|
||||
"frndint\n\t" /* 2 xi */
|
||||
"fldcw 4(%%esp)\n"
|
||||
"addl $8, %%esp\n\tpop %%eax\n"
|
||||
#endif
|
||||
"fld %%st(1)\n\t" /* 3 i */
|
||||
"fldt %2\n\t" /* 4 c0 */
|
||||
"fld %%st(2)\n\t" /* 5 xi */
|
||||
"fmul %%st(1),%%st\n\t" /* 5 c0 xi */
|
||||
"fsubp %%st,%%st(2)\n\t" /* 4 f = c0 xi - i */
|
||||
"fld %%st(4)\n\t" /* 5 x */
|
||||
"fsub %%st(3),%%st\n\t" /* 5 xf = x - xi */
|
||||
"fmulp %%st,%%st(1)\n\t" /* 4 c0 xf */
|
||||
"faddp %%st,%%st(1)\n\t" /* 3 f = f + c0 xf */
|
||||
"fldt %3\n\t" /* 4 */
|
||||
"fmul %%st(4),%%st\n\t" /* 4 c1 * x */
|
||||
"faddp %%st,%%st(1)\n\t" /* 3 f = f + c1 * x */
|
||||
"f2xm1\n\t" /* 3 2^(fract(x * log2(e))) - 1 */
|
||||
"fld1\n\t" /* 4 1.0 */
|
||||
"faddp\n\t" /* 3 2^(fract(x * log2(e))) */
|
||||
"fstp %%st(1)\n\t" /* 2 */
|
||||
"fscale\n\t" /* 2 scale factor is st(1); e^x */
|
||||
"fstp %%st(1)\n\t" /* 1 */
|
||||
"fstp %%st(1)\n\t" /* 0 */
|
||||
: "=t" (res) : "0" (x), "m" (c0), "m" (c1) : "ax", "dx");
|
||||
return res;
|
||||
}
|
||||
|
||||
__FLT_TYPE
|
||||
__FLT_ABI(exp) (__FLT_TYPE x)
|
||||
{
|
||||
int x_class = fpclassify (x);
|
||||
if (x_class == FP_NAN)
|
||||
{
|
||||
__FLT_RPT_DOMAIN ("exp", x, 0.0, x);
|
||||
return x;
|
||||
}
|
||||
else if (x_class == FP_INFINITE)
|
||||
{
|
||||
__FLT_TYPE r = (signbit (x) ? __FLT_CST (0.0) : __FLT_HUGE_VAL);
|
||||
__FLT_RPT_ERANGE ("exp", x, 0.0, r, signbit (x));
|
||||
return r;
|
||||
}
|
||||
else if (x_class == FP_ZERO)
|
||||
{
|
||||
return __FLT_CST (1.0);
|
||||
}
|
||||
else if (x > __FLT_MAXLOG)
|
||||
{
|
||||
__FLT_RPT_ERANGE ("exp", x, 0.0, __FLT_HUGE_VAL, 1);
|
||||
return __FLT_HUGE_VAL;
|
||||
}
|
||||
else if (x < __FLT_MINLOG)
|
||||
{
|
||||
return __FLT_CST(0.0);
|
||||
}
|
||||
else
|
||||
return (__FLT_TYPE) __expl_internal ((long double) x);
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
#undef exp10l
|
||||
#include <math.h>
|
||||
|
||||
long double
|
||||
exp10l (long double x)
|
||||
{
|
||||
return powl (10.0L, x);
|
||||
}
|
|
@ -0,0 +1,94 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the mingw-w64 runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
|
||||
*/
|
||||
#include <_mingw_mac.h>
|
||||
|
||||
.file "exp2.S"
|
||||
.text
|
||||
#ifdef __x86_64__
|
||||
.align 8
|
||||
#else
|
||||
.align 4
|
||||
#endif
|
||||
.globl __MINGW_USYMBOL(exp2)
|
||||
.def __MINGW_USYMBOL(exp2); .scl 2; .type 32; .endef
|
||||
__MINGW_USYMBOL(exp2):
|
||||
#ifdef __x86_64__
|
||||
subq $24, %rsp
|
||||
movsd %xmm0,(%rsp)
|
||||
fldl (%rsp)
|
||||
fxam /* Is NaN or +-Inf? */
|
||||
fstsw %ax
|
||||
movb $0x45, %dh
|
||||
andb %ah, %dh
|
||||
cmpb $0x05, %dh
|
||||
je 1f /* Is +-Inf, jump. */
|
||||
fld %st
|
||||
subq $8, %rsp /* int(x) */
|
||||
fnstcw 4(%rsp)
|
||||
movzwl 4(%rsp), %eax
|
||||
orb $12, %ah
|
||||
movw %ax, (%rsp)
|
||||
fldcw (%rsp)
|
||||
frndint
|
||||
fldcw 4(%rsp)
|
||||
addq $8, %rsp
|
||||
fsubr %st,%st(1) /* fract(x) */
|
||||
fxch
|
||||
f2xm1 /* 2^(fract(x)) - 1 */
|
||||
fld1
|
||||
faddp /* 2^(fract(x)) */
|
||||
fscale /* e^x */
|
||||
fstp %st(1)
|
||||
fstpl (%rsp)
|
||||
movsd (%rsp),%xmm0
|
||||
addq $24, %rsp
|
||||
ret
|
||||
|
||||
1: testl $0x200, %eax /* Test sign. */
|
||||
jz 2f /* If positive, jump. */
|
||||
fstp %st
|
||||
fldz /* Set result to 0. */
|
||||
2: fstpl (%rsp)
|
||||
movsd (%rsp),%xmm0
|
||||
addq $24,%rsp
|
||||
ret
|
||||
#else
|
||||
fldl 4(%esp)
|
||||
/* I added the following ugly construct because exp(+-Inf) resulted
|
||||
in NaN. The ugliness results from the bright minds at Intel.
|
||||
For the i686 the code can be written better.
|
||||
-- drepper@cygnus.com. */
|
||||
fxam /* Is NaN or +-Inf? */
|
||||
fstsw %ax
|
||||
movb $0x45, %dh
|
||||
andb %ah, %dh
|
||||
cmpb $0x05, %dh
|
||||
je 1f /* Is +-Inf, jump. */
|
||||
fld %st
|
||||
subl $8, %esp /* int(x) */
|
||||
fnstcw 4(%esp)
|
||||
movzwl 4(%esp), %eax
|
||||
orb $12, %ah
|
||||
movw %ax, (%esp)
|
||||
fldcw (%esp)
|
||||
frndint
|
||||
fldcw 4(%esp)
|
||||
addl $8, %esp
|
||||
fsubr %st,%st(1) /* fract(x) */
|
||||
fxch
|
||||
f2xm1 /* 2^(fract(x)) - 1 */
|
||||
fld1
|
||||
faddp /* 2^(fract(x)) */
|
||||
fscale /* e^x */
|
||||
fstp %st(1)
|
||||
ret
|
||||
|
||||
1: testl $0x200, %eax /* Test sign. */
|
||||
jz 2f /* If positive, jump. */
|
||||
fstp %st
|
||||
fldz /* Set result to 0. */
|
||||
2: ret
|
||||
#endif
|
|
@ -0,0 +1,92 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the mingw-w64 runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
|
||||
*/
|
||||
#include <_mingw_mac.h>
|
||||
|
||||
.file "exp2l.S"
|
||||
.text
|
||||
#ifdef __x86_64__
|
||||
.align 8
|
||||
#else
|
||||
.align 4
|
||||
#endif
|
||||
.globl __MINGW_USYMBOL(exp2l)
|
||||
.def __MINGW_USYMBOL(exp2l); .scl 2; .type 32; .endef
|
||||
__MINGW_USYMBOL(exp2l):
|
||||
#ifdef __x86_64__
|
||||
fldt (%rdx)
|
||||
fxam /* Is NaN or +-Inf? */
|
||||
fstsw %ax
|
||||
movb $0x45, %dh
|
||||
andb %ah, %dh
|
||||
cmpb $0x05, %dh
|
||||
je 1f /* Is +-Inf, jump. */
|
||||
fld %st
|
||||
subq $8, %rsp /* int(x) */
|
||||
fnstcw 4(%rsp)
|
||||
movzwl 4(%rsp), %eax
|
||||
orb $12, %ah
|
||||
movw %ax, (%rsp)
|
||||
fldcw (%rsp)
|
||||
frndint
|
||||
fldcw 4(%rsp)
|
||||
addq $8, %rsp
|
||||
fsubr %st,%st(1) /* fract(x) */
|
||||
fxch
|
||||
f2xm1 /* 2^(fract(x)) - 1 */
|
||||
fld1
|
||||
faddp /* 2^(fract(x)) */
|
||||
fscale /* e^x */
|
||||
fstp %st(1)
|
||||
movq %rcx,%rax
|
||||
movq $0,8(%rcx)
|
||||
fstpt (%rcx)
|
||||
ret
|
||||
|
||||
1: testl $0x200, %eax /* Test sign. */
|
||||
jz 2f /* If positive, jump. */
|
||||
fstp %st
|
||||
fldz /* Set result to 0. */
|
||||
2: movq %rcx,%rax
|
||||
movq $0,8(%rcx)
|
||||
fstpt (%rcx)
|
||||
ret
|
||||
#else
|
||||
fldt 4(%esp)
|
||||
/* I added the following ugly construct because exp(+-Inf) resulted
|
||||
in NaN. The ugliness results from the bright minds at Intel.
|
||||
For the i686 the code can be written better.
|
||||
-- drepper@cygnus.com. */
|
||||
fxam /* Is NaN or +-Inf? */
|
||||
fstsw %ax
|
||||
movb $0x45, %dh
|
||||
andb %ah, %dh
|
||||
cmpb $0x05, %dh
|
||||
je 1f /* Is +-Inf, jump. */
|
||||
fld %st
|
||||
subl $8, %esp /* int(x) */
|
||||
fnstcw 4(%esp)
|
||||
movzwl 4(%esp), %eax
|
||||
orb $12, %ah
|
||||
movw %ax, (%esp)
|
||||
fldcw (%esp)
|
||||
frndint
|
||||
fldcw 4(%esp)
|
||||
addl $8, %esp
|
||||
fsubr %st,%st(1) /* fract(x) */
|
||||
fxch
|
||||
f2xm1 /* 2^(fract(x)) - 1 */
|
||||
fld1
|
||||
faddp /* 2^(fract(x)) */
|
||||
fscale /* e^x */
|
||||
fstp %st(1)
|
||||
ret
|
||||
|
||||
1: testl $0x200, %eax /* Test sign. */
|
||||
jz 2f /* If positive, jump. */
|
||||
fstp %st
|
||||
fldz /* Set result to 0. */
|
||||
2: ret
|
||||
#endif
|
|
@ -0,0 +1,46 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
#define _NEW_COMPLEX_LDOUBLE 1
|
||||
#include "exp.def.h"
|
|
@ -0,0 +1,72 @@
|
|||
/*
|
||||
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 "complex_internal.h"
|
||||
#include <errno.h>
|
||||
|
||||
__FLT_TYPE
|
||||
__FLT_ABI(expm1) (__FLT_TYPE x)
|
||||
{
|
||||
int x_class = fpclassify (x);
|
||||
if (x_class == FP_NAN)
|
||||
{
|
||||
__FLT_RPT_DOMAIN ("expm1", x, 0.0, x);
|
||||
return x;
|
||||
}
|
||||
else if (x_class == FP_INFINITE)
|
||||
{
|
||||
return (signbit (x) ? -__FLT_CST(1.0) : __FLT_HUGE_VAL);
|
||||
}
|
||||
else if (x_class == FP_ZERO)
|
||||
{
|
||||
return x;
|
||||
}
|
||||
if (__FLT_ABI (fabs) (x) < __FLT_LOGE2)
|
||||
{
|
||||
x /= __FLT_LOGE2;
|
||||
__asm__ __volatile__ ("f2xm1" : "=t" (x) : "0" (x));
|
||||
return x;
|
||||
}
|
||||
return __FLT_ABI (exp) (x) - __FLT_CST (1.0);
|
||||
}
|
|
@ -0,0 +1,46 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
#define _NEW_COMPLEX_LDOUBLE 1
|
||||
#include "expm1.def.h"
|
|
@ -0,0 +1,18 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the mingw-w64 runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
|
||||
*/
|
||||
long double fabsl (long double x);
|
||||
|
||||
long double
|
||||
fabsl (long double x)
|
||||
{
|
||||
#if defined(__x86_64__) || defined(_AMD64_) || defined(__i386__) || defined(_X86_)
|
||||
long double res = 0.0L;
|
||||
asm ("fabs;" : "=t" (res) : "0" (x));
|
||||
return res;
|
||||
#elif defined(__arm__) || defined(_ARM_)
|
||||
return __builtin_fabsl (x);
|
||||
#endif /* defined(__x86_64__) || defined(_AMD64_) || defined(__i386__) || defined(_X86_) */
|
||||
}
|
|
@ -0,0 +1,120 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the mingw-w64 runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
|
||||
*/
|
||||
#ifndef _MINGWEX_FASTMATH_H_
|
||||
#define _MINGWEX_FASTMATH_H_
|
||||
|
||||
/* Fast math inlines
|
||||
No range or domain checks. No setting of errno. No tweaks to
|
||||
protect precision near range limits. */
|
||||
|
||||
/* For now this is an internal header with just the functions that
|
||||
are currently used in building libmingwex.a math components */
|
||||
|
||||
/* FIXME: We really should get rid of the code duplication using euther
|
||||
C++ templates or tgmath-type macros. */
|
||||
|
||||
static __inline__ double __fast_sqrt (double x)
|
||||
{
|
||||
double res;
|
||||
asm __volatile__ ("fsqrt" : "=t" (res) : "0" (x));
|
||||
return res;
|
||||
}
|
||||
|
||||
static __inline__ long double __fast_sqrtl (long double x)
|
||||
{
|
||||
long double res;
|
||||
asm __volatile__ ("fsqrt" : "=t" (res) : "0" (x));
|
||||
return res;
|
||||
}
|
||||
|
||||
static __inline__ float __fast_sqrtf (float x)
|
||||
{
|
||||
float res;
|
||||
asm __volatile__ ("fsqrt" : "=t" (res) : "0" (x));
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
static __inline__ double __fast_log (double x)
|
||||
{
|
||||
double res;
|
||||
asm __volatile__
|
||||
("fldln2\n\t"
|
||||
"fxch\n\t"
|
||||
"fyl2x"
|
||||
: "=t" (res) : "0" (x) : "st(1)");
|
||||
return res;
|
||||
}
|
||||
|
||||
static __inline__ long double __fast_logl (long double x)
|
||||
{
|
||||
long double res;
|
||||
asm __volatile__
|
||||
("fldln2\n\t"
|
||||
"fxch\n\t"
|
||||
"fyl2x"
|
||||
: "=t" (res) : "0" (x) : "st(1)");
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
static __inline__ float __fast_logf (float x)
|
||||
{
|
||||
float res;
|
||||
asm __volatile__
|
||||
("fldln2\n\t"
|
||||
"fxch\n\t"
|
||||
"fyl2x"
|
||||
: "=t" (res) : "0" (x) : "st(1)");
|
||||
return res;
|
||||
}
|
||||
|
||||
static __inline__ double __fast_log1p (double x)
|
||||
{
|
||||
double res;
|
||||
/* fyl2xp1 accurate only for |x| <= 1.0 - 0.5 * sqrt (2.0) */
|
||||
if (fabs (x) >= 1.0 - 0.5 * 1.41421356237309504880)
|
||||
res = __fast_log (1.0 + x);
|
||||
else
|
||||
asm __volatile__
|
||||
("fldln2\n\t"
|
||||
"fxch\n\t"
|
||||
"fyl2xp1"
|
||||
: "=t" (res) : "0" (x) : "st(1)");
|
||||
return res;
|
||||
}
|
||||
|
||||
static __inline__ long double __fast_log1pl (long double x)
|
||||
{
|
||||
long double res;
|
||||
/* fyl2xp1 accurate only for |x| <= 1.0 - 0.5 * sqrt (2.0) */
|
||||
if (fabsl (x) >= 1.0L - 0.5L * 1.41421356237309504880L)
|
||||
res = __fast_logl (1.0L + x);
|
||||
else
|
||||
asm __volatile__
|
||||
("fldln2\n\t"
|
||||
"fxch\n\t"
|
||||
"fyl2xp1"
|
||||
: "=t" (res) : "0" (x) : "st(1)");
|
||||
return res;
|
||||
}
|
||||
|
||||
static __inline__ float __fast_log1pf (float x)
|
||||
{
|
||||
float res;
|
||||
/* fyl2xp1 accurate only for |x| <= 1.0 - 0.5 * sqrt (2.0) */
|
||||
if (fabsf (x) >= 1.0 - 0.5 * 1.41421356237309504880)
|
||||
res = __fast_logf (1.0 + x);
|
||||
else
|
||||
asm __volatile__
|
||||
("fldln2\n\t"
|
||||
"fxch\n\t"
|
||||
"fyl2xp1"
|
||||
: "=t" (res) : "0" (x) : "st(1)");
|
||||
return res;
|
||||
}
|
||||
|
||||
#endif
|
|
@ -0,0 +1,24 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the mingw-w64 runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
|
||||
*/
|
||||
#include <errno.h>
|
||||
#include <math.h>
|
||||
|
||||
long double
|
||||
fdiml (long double x, long double y)
|
||||
{
|
||||
int cx = fpclassify (x), cy = fpclassify (y);
|
||||
long double r;
|
||||
|
||||
if (cx == FP_NAN || cy == FP_NAN
|
||||
|| (y < 0 && cx == FP_INFINITE && cy == FP_INFINITE))
|
||||
return x - y; /* Take care invalid flag is raised. */
|
||||
if (x <= y)
|
||||
return 0.0;
|
||||
r = x - y;
|
||||
if (fpclassify (r) == FP_INFINITE)
|
||||
errno = ERANGE;
|
||||
return r;
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
#include <math.h>
|
||||
|
||||
int
|
||||
finite (double x)
|
||||
{
|
||||
return __builtin_isfinite (x);
|
||||
}
|
||||
|
||||
int
|
||||
finitef (float x)
|
||||
{
|
||||
return __builtin_isfinite (x);
|
||||
}
|
||||
|
||||
int
|
||||
finitel (long double x)
|
||||
{
|
||||
return __builtin_isfinite (x);
|
||||
}
|
|
@ -0,0 +1,72 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the mingw-w64 runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
|
||||
*/
|
||||
#include <_mingw_mac.h>
|
||||
|
||||
.file "floorl.S"
|
||||
.text
|
||||
#ifdef __x86_64__
|
||||
.align 8
|
||||
#else
|
||||
.align 4
|
||||
#endif
|
||||
.globl __MINGW_USYMBOL(floorl)
|
||||
.def __MINGW_USYMBOL(floorl); .scl 2; .type 32; .endef
|
||||
__MINGW_USYMBOL(floorl):
|
||||
#if defined(_AMD64_) || defined(__x86_64__)
|
||||
fldt (%rdx)
|
||||
subq $24,%rsp
|
||||
|
||||
fstcw 8(%rsp) /* store fpu control word */
|
||||
|
||||
/* We use here %edx although only the low 1 bits are defined.
|
||||
But none of the operations should care and they are faster
|
||||
than the 16 bit operations. */
|
||||
movl $0x400,%edx /* round towards -oo */
|
||||
orl 8(%rsp),%edx
|
||||
andl $0xf7ff,%edx
|
||||
movl %edx,(%rsp)
|
||||
fldcw (%rsp) /* load modified control word */
|
||||
|
||||
frndint /* round */
|
||||
|
||||
fldcw 8(%rsp) /* restore original control word */
|
||||
|
||||
addq $24,%rsp
|
||||
movq %rcx,%rax
|
||||
movq $0,8(%rcx)
|
||||
fstpt (%rcx)
|
||||
ret
|
||||
#elif defined(_ARM_) || defined(__arm__)
|
||||
vmrs r1, fpscr
|
||||
bic r0, r1, #0x00c00000
|
||||
orr r0, r0, #0x00800000 /* Round towards Minus Infinity */
|
||||
vmsr fpscr, r0
|
||||
vcvtr.s32.f64 s0, d0
|
||||
vcvt.f64.s32 d0, s0
|
||||
vmsr fpscr, r1
|
||||
bx lr
|
||||
#elif defined(_X86_) || defined(__i386__)
|
||||
fldt 4(%esp)
|
||||
subl $8,%esp
|
||||
|
||||
fstcw 4(%esp) /* store fpu control word */
|
||||
|
||||
/* We use here %edx although only the low 1 bits are defined.
|
||||
But none of the operations should care and they are faster
|
||||
than the 16 bit operations. */
|
||||
movl $0x400,%edx /* round towards -oo */
|
||||
orl 4(%esp),%edx
|
||||
andl $0xf7ff,%edx
|
||||
movl %edx,(%esp)
|
||||
fldcw (%esp) /* load modified control word */
|
||||
|
||||
frndint /* round */
|
||||
|
||||
fldcw 4(%esp) /* restore original control word */
|
||||
|
||||
addl $8,%esp
|
||||
ret
|
||||
#endif
|
|
@ -0,0 +1,12 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the mingw-w64 runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
|
||||
*/
|
||||
long double fmal ( long double _x, long double _y, long double _z);
|
||||
|
||||
long double
|
||||
fmal ( long double _x, long double _y, long double _z)
|
||||
{
|
||||
return ((_x * _y) + _z);
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the mingw-w64 runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
|
||||
*/
|
||||
#include <math.h>
|
||||
|
||||
long double
|
||||
fmaxl (long double _x, long double _y)
|
||||
{
|
||||
return (__builtin_isgreaterequal (_x, _y) || __builtin_isnan (_y))
|
||||
? _x : _y;
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the mingw-w64 runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
|
||||
*/
|
||||
#include <math.h>
|
||||
|
||||
long double
|
||||
fminl (long double _x, long double _y)
|
||||
{
|
||||
return ((__builtin_islessequal(_x, _y) || __builtin_isnan (_y)) ? _x : _y );
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the mingw-w64 runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
|
||||
*/
|
||||
long double fmodl (long double x, long double y);
|
||||
|
||||
long double
|
||||
fmodl (long double x, long double y)
|
||||
{
|
||||
long double res = 0.0L;
|
||||
|
||||
asm ("1:\tfprem\n\t"
|
||||
"fstsw %%ax\n\t"
|
||||
"sahf\n\t"
|
||||
"jp 1b\n\t"
|
||||
"fstp %%st(1)"
|
||||
: "=t" (res) : "0" (x), "u" (y) : "ax", "st(1)");
|
||||
return res;
|
||||
}
|
|
@ -0,0 +1,130 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the mingw-w64 runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
|
||||
*/
|
||||
#include <_mingw_mac.h>
|
||||
|
||||
/*
|
||||
* frexpl(long double x, int* expnt) extracts the exponent from x.
|
||||
* It returns an integer power of two to expnt and the significand
|
||||
* between 0.5 and 1 to y. Thus x = y * 2**expn.
|
||||
*/
|
||||
#ifdef __x86_64__
|
||||
.align 8
|
||||
#else
|
||||
.align 2
|
||||
#endif
|
||||
.globl __MINGW_USYMBOL(frexpl)
|
||||
__MINGW_USYMBOL(frexpl):
|
||||
#ifdef __x86_64__
|
||||
pushq %rbp
|
||||
movq %rsp,%rbp
|
||||
subq $48,%rsp
|
||||
pushq %rsi
|
||||
fldt (%rdx)
|
||||
movq %rcx,%r9
|
||||
fld %st(0)
|
||||
fstpt -12(%rbp)
|
||||
leaq -4(%rbp),%rcx
|
||||
movw -4(%rbp),%dx
|
||||
andl $32767,%edx
|
||||
jne L25
|
||||
fldz
|
||||
fucompp
|
||||
fnstsw %ax
|
||||
andb $68,%ah
|
||||
xorb $64,%ah
|
||||
jne L21
|
||||
movl $0,(%r8)
|
||||
fldz
|
||||
jmp L24
|
||||
.align 4,0x90
|
||||
.align 4,0x90
|
||||
L21:
|
||||
fldt -12(%rbp)
|
||||
fadd %st(0),%st
|
||||
fstpt -12(%rbp)
|
||||
decl %edx
|
||||
movw (%rcx),%si
|
||||
andl $32767,%esi
|
||||
jne L22
|
||||
cmpl $-66,%edx
|
||||
jg L21
|
||||
L22:
|
||||
add %esi,%edx
|
||||
jmp L19
|
||||
.align 2,0x90
|
||||
L25:
|
||||
fstp %st(0)
|
||||
L19:
|
||||
addl $-16382,%edx
|
||||
movl %edx,(%r8)
|
||||
movw (%rcx),%ax
|
||||
andl $-32768,%eax
|
||||
orl $16382,%eax
|
||||
movw %ax,(%rcx)
|
||||
fldt -12(%rbp)
|
||||
L24:
|
||||
popq %rsi
|
||||
movq %r9,%rax
|
||||
movq $0,8(%r9)
|
||||
fstpt (%r9)
|
||||
leave
|
||||
ret
|
||||
#else
|
||||
pushl %ebp
|
||||
movl %esp,%ebp
|
||||
subl $24,%esp
|
||||
pushl %esi
|
||||
pushl %ebx
|
||||
fldt 8(%ebp)
|
||||
movl 20(%ebp),%ebx
|
||||
fld %st(0)
|
||||
fstpt -12(%ebp)
|
||||
leal -4(%ebp),%ecx
|
||||
movw -4(%ebp),%dx
|
||||
andl $32767,%edx
|
||||
jne L25
|
||||
fldz
|
||||
fucompp
|
||||
fnstsw %ax
|
||||
andb $68,%ah
|
||||
xorb $64,%ah
|
||||
jne L21
|
||||
movl $0,(%ebx)
|
||||
fldz
|
||||
jmp L24
|
||||
.align 2,0x90
|
||||
.align 2,0x90
|
||||
L21:
|
||||
fldt -12(%ebp)
|
||||
fadd %st(0),%st
|
||||
fstpt -12(%ebp)
|
||||
decl %edx
|
||||
movw (%ecx),%si
|
||||
andl $32767,%esi
|
||||
jne L22
|
||||
cmpl $-66,%edx
|
||||
jg L21
|
||||
L22:
|
||||
addl %esi,%edx
|
||||
jmp L19
|
||||
.align 2,0x90
|
||||
L25:
|
||||
fstp %st(0)
|
||||
L19:
|
||||
addl $-16382,%edx
|
||||
movl %edx,(%ebx)
|
||||
movw (%ecx),%ax
|
||||
andl $-32768,%eax
|
||||
orl $16382,%eax
|
||||
movw %ax,(%ecx)
|
||||
fldt -12(%ebp)
|
||||
L24:
|
||||
leal -32(%ebp),%esp
|
||||
popl %ebx
|
||||
popl %esi
|
||||
leave
|
||||
ret
|
||||
#endif
|
|
@ -0,0 +1,65 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the mingw-w64 runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
|
||||
*/
|
||||
#include <_mingw_mac.h>
|
||||
|
||||
.file "ilogbl.S"
|
||||
.text
|
||||
#ifdef __x86_64__
|
||||
.align 8
|
||||
#else
|
||||
.align 4
|
||||
#endif
|
||||
.globl __MINGW_USYMBOL(ilogbl)
|
||||
.def __MINGW_USYMBOL(ilogbl); .scl 2; .type 32; .endef
|
||||
__MINGW_USYMBOL(ilogbl):
|
||||
#ifdef __x86_64__
|
||||
fldt (%rcx)
|
||||
fxam /* Is NaN or +-Inf? */
|
||||
fstsw %ax
|
||||
movb $0x45, %dh
|
||||
andb %ah, %dh
|
||||
cmpb $0x05, %dh
|
||||
je 1f /* Is +-Inf, jump. */
|
||||
|
||||
fxtract
|
||||
pushq %rax
|
||||
fstp %st
|
||||
|
||||
fistpl (%rsp)
|
||||
fwait
|
||||
popq %rax
|
||||
|
||||
ret
|
||||
|
||||
1: fstp %st
|
||||
movl $0x7fffffff, %eax
|
||||
ret
|
||||
#else
|
||||
fldt 4(%esp)
|
||||
/* I added the following ugly construct because ilogb(+-Inf) is
|
||||
required to return INT_MAX in ISO C99.
|
||||
-- jakub@redhat.com. */
|
||||
fxam /* Is NaN or +-Inf? */
|
||||
fstsw %ax
|
||||
movb $0x45, %dh
|
||||
andb %ah, %dh
|
||||
cmpb $0x05, %dh
|
||||
je 1f /* Is +-Inf, jump. */
|
||||
|
||||
fxtract
|
||||
pushl %eax
|
||||
fstp %st
|
||||
|
||||
fistpl (%esp)
|
||||
fwait
|
||||
popl %eax
|
||||
|
||||
ret
|
||||
|
||||
1: fstp %st
|
||||
movl $0x7fffffff, %eax
|
||||
ret
|
||||
#endif
|
|
@ -0,0 +1,66 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the mingw-w64 runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
|
||||
*/
|
||||
#include <_mingw_mac.h>
|
||||
|
||||
.file "internal_logl.S"
|
||||
.text
|
||||
#ifdef __x86_64__
|
||||
.align 8
|
||||
#else
|
||||
.align 4
|
||||
#endif
|
||||
one: .double 1.0
|
||||
/* It is not important that this constant is precise. It is only
|
||||
a value which is known to be on the safe side for using the
|
||||
fyl2xp1 instruction. */
|
||||
limit: .double 0.29
|
||||
|
||||
.globl __MINGW_USYMBOL(__logl_internal)
|
||||
.def __MINGW_USYMBOL(__logl_internal); .scl 2; .type 32; .endef
|
||||
__MINGW_USYMBOL(__logl_internal):
|
||||
#ifdef __x86_64__
|
||||
fldln2 // log(2)
|
||||
fldt (%rdx) // x : log(2)
|
||||
fld %st // x : x : log(2)
|
||||
fsubl one(%rip) // x-1 : x : log(2)
|
||||
fld %st // x-1 : x-1 : x : log(2)
|
||||
fabs // |x-1| : x-1 : x : log(2)
|
||||
fcompl limit(%rip) // x-1 : x : log(2)
|
||||
fnstsw // x-1 : x : log(2)
|
||||
andb $0x45, %ah
|
||||
jz 2f
|
||||
fstp %st(1) // x-1 : log(2)
|
||||
fyl2xp1 // log(x)
|
||||
movq %rcx,%rax
|
||||
movq $0,8(%rcx)
|
||||
fstpt (%rcx)
|
||||
ret
|
||||
|
||||
2: fstp %st(0) // x : log(2)
|
||||
fyl2x // log(x)
|
||||
movq %rcx,%rax
|
||||
movq $0,8(%rcx)
|
||||
fstpt (%rcx)
|
||||
ret
|
||||
#else
|
||||
fldln2 // log(2)
|
||||
fldt 4(%esp) // x : log(2)
|
||||
fld %st // x : x : log(2)
|
||||
fsubl one // x-1 : x : log(2)
|
||||
fld %st // x-1 : x-1 : x : log(2)
|
||||
fabs // |x-1| : x-1 : x : log(2)
|
||||
fcompl limit // x-1 : x : log(2)
|
||||
fnstsw // x-1 : x : log(2)
|
||||
andb $0x45, %ah
|
||||
jz 2f
|
||||
fstp %st(1) // x-1 : log(2)
|
||||
fyl2xp1 // log(x)
|
||||
ret
|
||||
|
||||
2: fstp %st(0) // x : log(2)
|
||||
fyl2x // log(x)
|
||||
ret
|
||||
#endif
|
|
@ -0,0 +1,18 @@
|
|||
int
|
||||
isinf (double x)
|
||||
{
|
||||
return __builtin_isinf (x);
|
||||
}
|
||||
|
||||
int
|
||||
isinff (float x)
|
||||
{
|
||||
return __builtin_isinf (x);
|
||||
}
|
||||
|
||||
int
|
||||
isinfl (long double x)
|
||||
{
|
||||
return __builtin_isinf (x);
|
||||
}
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
int
|
||||
isnan (double x)
|
||||
{
|
||||
return __builtin_isnan (x);
|
||||
}
|
||||
|
||||
int
|
||||
isnanf (float x)
|
||||
{
|
||||
return __builtin_isnan (x);
|
||||
}
|
||||
|
||||
int
|
||||
isnanl (long double x)
|
||||
{
|
||||
return __builtin_isnan (x);
|
||||
}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the mingw-w64 runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
|
||||
*/
|
||||
#include <math.h>
|
||||
#include <errno.h>
|
||||
|
||||
long double ldexpl(long double x, int expn)
|
||||
{
|
||||
long double res = 0.0L;
|
||||
if (!isfinite (x) || x == 0.0L)
|
||||
return x;
|
||||
|
||||
__asm__ __volatile__ ("fscale"
|
||||
: "=t" (res)
|
||||
: "0" (x), "u" ((long double) expn));
|
||||
|
||||
if (!isfinite (res) || res == 0.0L)
|
||||
errno = ERANGE;
|
||||
|
||||
return res;
|
||||
}
|
|
@ -0,0 +1,342 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the mingw-w64 runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
|
||||
*/
|
||||
#include "cephes_mconf.h"
|
||||
|
||||
#if UNK
|
||||
static uLD S[9] = {
|
||||
{ { -1.193945051381510095614E-3L } },
|
||||
{ { 7.220599478036909672331E-3L } },
|
||||
{ { -9.622023360406271645744E-3L } },
|
||||
{ { -4.219773360705915470089E-2L } },
|
||||
{ { 1.665386113720805206758E-1L } },
|
||||
{ { -4.200263503403344054473E-2L } },
|
||||
{ { -6.558780715202540684668E-1L } },
|
||||
{ { 5.772156649015328608253E-1L } },
|
||||
{ { 1.000000000000000000000E0L } }
|
||||
};
|
||||
#endif
|
||||
#if IBMPC
|
||||
static const uLD S[] = {
|
||||
{ { 0xbaeb,0xd6d3,0x25e5,0x9c7e,0xbff5, 0, 0, 0 } },
|
||||
{ { 0xfe9a,0xceb4,0xc74e,0xec9a,0x3ff7, 0, 0, 0 } },
|
||||
{ { 0x9225,0xdfef,0xb0e9,0x9da5,0xbff8, 0, 0, 0 } },
|
||||
{ { 0x10b0,0xec17,0x87dc,0xacd7,0xbffa, 0, 0, 0 } },
|
||||
{ { 0x6b8d,0x7515,0x1905,0xaa89,0x3ffc, 0, 0, 0 } },
|
||||
{ { 0xf183,0x126b,0xf47d,0xac0a,0xbffa, 0, 0, 0 } },
|
||||
{ { 0x7bf6,0x57d1,0xa013,0xa7e7,0xbffe, 0, 0, 0 } },
|
||||
{ { 0xc7a9,0x7db0,0x67e3,0x93c4,0x3ffe, 0, 0, 0 } },
|
||||
{ { 0x0000,0x0000,0x0000,0x8000,0x3fff, 0, 0, 0 } }
|
||||
};
|
||||
#endif
|
||||
#if MIEEE
|
||||
static uLD S[27] = {
|
||||
{ { 0xbff50000,0x9c7e25e5,0xd6d3baeb, 0 } },
|
||||
{ { 0x3ff70000,0xec9ac74e,0xceb4fe9a, 0 } },
|
||||
{ { 0xbff80000,0x9da5b0e9,0xdfef9225, 0 } },
|
||||
{ { 0xbffa0000,0xacd787dc,0xec1710b0, 0 } },
|
||||
{ { 0x3ffc0000,0xaa891905,0x75156b8d, 0 } },
|
||||
{ { 0xbffa0000,0xac0af47d,0x126bf183, 0 } },
|
||||
{ { 0xbffe0000,0xa7e7a013,0x57d17bf6, 0 } },
|
||||
{ { 0x3ffe0000,0x93c467e3,0x7db0c7a9, 0 } },
|
||||
{ { 0x3fff0000,0x80000000,0x00000000, 0 } }
|
||||
};
|
||||
#endif
|
||||
|
||||
#if UNK
|
||||
static uLD SN[9] = {
|
||||
{ { 1.133374167243894382010E-3L } },
|
||||
{ { 7.220837261893170325704E-3L } },
|
||||
{ { 9.621911155035976733706E-3L } },
|
||||
{ { -4.219773343731191721664E-2L } },
|
||||
{ { -1.665386113944413519335E-1L } },
|
||||
{ { -4.200263503402112910504E-2L } },
|
||||
{ { 6.558780715202536547116E-1L } },
|
||||
{ { 5.772156649015328608727E-1L } },
|
||||
{ { -1.000000000000000000000E0L } }
|
||||
};
|
||||
#endif
|
||||
#if IBMPC
|
||||
static const uLD SN[] = {
|
||||
{ { 0x5dd1,0x02de,0xb9f7,0x948d,0x3ff5, 0, 0, 0 } },
|
||||
{ { 0x989b,0xdd68,0xc5f1,0xec9c,0x3ff7, 0, 0, 0 } },
|
||||
{ { 0x2ca1,0x18f0,0x386f,0x9da5,0x3ff8, 0, 0, 0 } },
|
||||
{ { 0x783f,0x41dd,0x87d1,0xacd7,0xbffa, 0, 0, 0 } },
|
||||
{ { 0x7a5b,0xd76d,0x1905,0xaa89,0xbffc, 0, 0, 0 } },
|
||||
{ { 0x7f64,0x1234,0xf47d,0xac0a,0xbffa, 0, 0, 0 } },
|
||||
{ { 0x5e26,0x57d1,0xa013,0xa7e7,0x3ffe, 0, 0, 0 } },
|
||||
{ { 0xc7aa,0x7db0,0x67e3,0x93c4,0x3ffe, 0, 0, 0 } },
|
||||
{ { 0x0000,0x0000,0x0000,0x8000,0xbfff, 0, 0, 0 } }
|
||||
};
|
||||
#endif
|
||||
#if MIEEE
|
||||
static uLD SN[] = {
|
||||
{ { 0x3ff50000,0x948db9f7,0x02de5dd1, 0 } },
|
||||
{ { 0x3ff70000,0xec9cc5f1,0xdd68989b, 0 } },
|
||||
{ { 0x3ff80000,0x9da5386f,0x18f02ca1, 0 } },
|
||||
{ { 0xbffa0000,0xacd787d1,0x41dd783f, 0 } },
|
||||
{ { 0xbffc0000,0xaa891905,0xd76d7a5b, 0 } },
|
||||
{ { 0xbffa0000,0xac0af47d,0x12347f64, 0 } },
|
||||
{ { 0x3ffe0000,0xa7e7a013,0x57d15e26, 0 } },
|
||||
{ { 0x3ffe0000,0x93c467e3,0x7db0c7aa, 0 } },
|
||||
{ { 0xbfff0000,0x80000000,0x00000000, 0 } }
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
/* A[]: Stirling's formula expansion of log gamma
|
||||
* B[], C[]: log gamma function between 2 and 3
|
||||
*/
|
||||
|
||||
|
||||
/* log gamma(x) = ( x - 0.5 ) * log(x) - x + LS2PI + 1/x A(1/x^2)
|
||||
* x >= 8
|
||||
* Peak relative error 1.51e-21
|
||||
* Relative spread of error peaks 5.67e-21
|
||||
*/
|
||||
#if UNK
|
||||
static uLD A[7] = {
|
||||
{ { 4.885026142432270781165E-3L } },
|
||||
{ { -1.880801938119376907179E-3L } },
|
||||
{ { 8.412723297322498080632E-4L } },
|
||||
{ { -5.952345851765688514613E-4L } },
|
||||
{ { 7.936507795855070755671E-4L } },
|
||||
{ { -2.777777777750349603440E-3L } },
|
||||
{ { 8.333333333333331447505E-2L } }
|
||||
};
|
||||
#endif
|
||||
#if IBMPC
|
||||
static const uLD A[] = {
|
||||
{ { 0xd984,0xcc08,0x91c2,0xa012,0x3ff7, 0, 0, 0 } },
|
||||
{ { 0x3d91,0x0304,0x3da1,0xf685,0xbff5, 0, 0, 0 } },
|
||||
{ { 0x3bdc,0xaad1,0xd492,0xdc88,0x3ff4, 0, 0, 0 } },
|
||||
{ { 0x8b20,0x9fce,0x844e,0x9c09,0xbff4, 0, 0, 0 } },
|
||||
{ { 0xf8f2,0x30e5,0x0092,0xd00d,0x3ff4, 0, 0, 0 } },
|
||||
{ { 0x4d88,0x03a8,0x60b6,0xb60b,0xbff6, 0, 0, 0 } },
|
||||
{ { 0x9fcc,0xaaaa,0xaaaa,0xaaaa,0x3ffb, 0, 0, 0 } }
|
||||
};
|
||||
#endif
|
||||
#if MIEEE
|
||||
static uLD A[] = {
|
||||
{ { 0x3ff70000,0xa01291c2,0xcc08d984, 0 } },
|
||||
{ { 0xbff50000,0xf6853da1,0x03043d91, 0 } },
|
||||
{ { 0x3ff40000,0xdc88d492,0xaad13bdc, 0 } },
|
||||
{ { 0xbff40000,0x9c09844e,0x9fce8b20, 0 } },
|
||||
{ { 0x3ff40000,0xd00d0092,0x30e5f8f2, 0 } },
|
||||
{ { 0xbff60000,0xb60b60b6,0x03a84d88, 0 } },
|
||||
{ { 0x3ffb0000,0xaaaaaaaa,0xaaaa9fcc, 0 } }
|
||||
};
|
||||
#endif
|
||||
|
||||
/* log gamma(x+2) = x B(x)/C(x)
|
||||
* 0 <= x <= 1
|
||||
* Peak relative error 7.16e-22
|
||||
* Relative spread of error peaks 4.78e-20
|
||||
*/
|
||||
#if UNK
|
||||
static uLD B[7] = {
|
||||
{ { -2.163690827643812857640E3L } },
|
||||
{ { -8.723871522843511459790E4L } },
|
||||
{ { -1.104326814691464261197E6L } },
|
||||
{ { -6.111225012005214299996E6L } },
|
||||
{ { -1.625568062543700591014E7L } },
|
||||
{ { -2.003937418103815175475E7L } },
|
||||
{ { -8.875666783650703802159E6L } }
|
||||
};
|
||||
static uLD C[7] = {
|
||||
{ { -5.139481484435370143617E2L } },
|
||||
{ { -3.403570840534304670537E4L } },
|
||||
{ { -6.227441164066219501697E5L } },
|
||||
{ { -4.814940379411882186630E6L } },
|
||||
{ { -1.785433287045078156959E7L } },
|
||||
{ { -3.138646407656182662088E7L } },
|
||||
{ { -2.099336717757895876142E7L } }
|
||||
};
|
||||
#endif
|
||||
#if IBMPC
|
||||
static const uLD B[] = {
|
||||
{ { 0x9557,0x4995,0x0da1,0x873b,0xc00a, 0, 0, 0 } },
|
||||
{ { 0xfe44,0x9af8,0x5b8c,0xaa63,0xc00f, 0, 0, 0 } },
|
||||
{ { 0x5aa8,0x7cf5,0x3684,0x86ce,0xc013, 0, 0, 0 } },
|
||||
{ { 0x259a,0x258c,0xf206,0xba7f,0xc015, 0, 0, 0 } },
|
||||
{ { 0xbe18,0x1ca3,0xc0a0,0xf80a,0xc016, 0, 0, 0 } },
|
||||
{ { 0x168f,0x2c42,0x6717,0x98e3,0xc017, 0, 0, 0 } },
|
||||
{ { 0x2051,0x9d55,0x92c8,0x876e,0xc016, 0, 0, 0 } }
|
||||
};
|
||||
static const uLD C[] = {
|
||||
{ { 0xaa77,0xcf2f,0xae76,0x807c,0xc008, 0, 0, 0 } },
|
||||
{ { 0xb280,0x0d74,0xb55a,0x84f3,0xc00e, 0, 0, 0 } },
|
||||
{ { 0xa505,0xcd30,0x81dc,0x9809,0xc012, 0, 0, 0 } },
|
||||
{ { 0x3369,0x4246,0xb8c2,0x92f0,0xc015, 0, 0, 0 } },
|
||||
{ { 0x63cf,0x6aee,0xbe6f,0x8837,0xc017, 0, 0, 0 } },
|
||||
{ { 0x26bb,0xccc7,0xb009,0xef75,0xc017, 0, 0, 0 } },
|
||||
{ { 0x462b,0xbae8,0xab96,0xa02a,0xc017, 0, 0, 0 } }
|
||||
};
|
||||
#endif
|
||||
#if MIEEE
|
||||
static uLD B[] = {
|
||||
{ { 0xc00a0000,0x873b0da1,0x49959557, 0 } },
|
||||
{ { 0xc00f0000,0xaa635b8c,0x9af8fe44, 0 } },
|
||||
{ { 0xc0130000,0x86ce3684,0x7cf55aa8, 0 } },
|
||||
{ { 0xc0150000,0xba7ff206,0x258c259a, 0 } },
|
||||
{ { 0xc0160000,0xf80ac0a0,0x1ca3be18, 0 } },
|
||||
{ { 0xc0170000,0x98e36717,0x2c42168f, 0 } },
|
||||
{ { 0xc0160000,0x876e92c8,0x9d552051, 0 } }
|
||||
};
|
||||
static uLD C[] = {
|
||||
{ { 0xc0080000,0x807cae76,0xcf2faa77, 0 } },
|
||||
{ { 0xc00e0000,0x84f3b55a,0x0d74b280, 0 } },
|
||||
{ { 0xc0120000,0x980981dc,0xcd30a505, 0 } },
|
||||
{ { 0xc0150000,0x92f0b8c2,0x42463369, 0 } },
|
||||
{ { 0xc0170000,0x8837be6f,0x6aee63cf, 0 } },
|
||||
{ { 0xc0170000,0xef75b009,0xccc726bb, 0 } },
|
||||
{ { 0xc0170000,0xa02aab96,0xbae8462b, 0 } }
|
||||
};
|
||||
#endif
|
||||
|
||||
/* log( sqrt( 2*pi ) ) */
|
||||
static const long double LS2PI = 0.91893853320467274178L;
|
||||
#if defined(__arm__) || defined(_ARM_)
|
||||
#define MAXLGM 2.035093e36
|
||||
#else
|
||||
#define MAXLGM 1.04848146839019521116e+4928L
|
||||
#endif /* defined(__arm__) || defined(_ARM_) */
|
||||
|
||||
/* Logarithm of gamma function */
|
||||
/* Reentrant version */
|
||||
long double __lgammal_r(long double x, int* sgngaml);
|
||||
|
||||
long double __lgammal_r(long double x, int* sgngaml)
|
||||
{
|
||||
long double p, q, w, z, f, nx;
|
||||
int i;
|
||||
|
||||
*sgngaml = 1;
|
||||
#ifdef NANS
|
||||
if (isnanl(x))
|
||||
return(NANL);
|
||||
#endif
|
||||
#ifdef INFINITIES
|
||||
if (!isfinitel(x))
|
||||
return (INFINITYL);
|
||||
#endif
|
||||
if (x < -34.0L)
|
||||
{
|
||||
q = -x;
|
||||
w = __lgammal_r(q, sgngaml); /* note this modifies sgngam! */
|
||||
p = floorl(q);
|
||||
if (p == q)
|
||||
{
|
||||
lgsing:
|
||||
_SET_ERRNO(EDOM);
|
||||
mtherr( "lgammal", SING );
|
||||
#ifdef INFINITIES
|
||||
return (INFINITYL);
|
||||
#else
|
||||
return (MAXNUML);
|
||||
#endif
|
||||
}
|
||||
i = p;
|
||||
if ((i & 1) == 0)
|
||||
*sgngaml = -1;
|
||||
else
|
||||
*sgngaml = 1;
|
||||
z = q - p;
|
||||
if (z > 0.5L)
|
||||
{
|
||||
p += 1.0L;
|
||||
z = p - q;
|
||||
}
|
||||
z = q * sinl(PIL * z);
|
||||
if (z == 0.0L)
|
||||
goto lgsing;
|
||||
/* z = LOGPI - logl( z ) - w; */
|
||||
z = logl(PIL/z) - w;
|
||||
return (z);
|
||||
}
|
||||
|
||||
if (x < 13.0L)
|
||||
{
|
||||
z = 1.0L;
|
||||
nx = floorl(x + 0.5L);
|
||||
f = x - nx;
|
||||
while (x >= 3.0L)
|
||||
{
|
||||
nx -= 1.0L;
|
||||
x = nx + f;
|
||||
z *= x;
|
||||
}
|
||||
while (x < 2.0L)
|
||||
{
|
||||
if (fabsl(x) <= 0.03125)
|
||||
goto lsmall;
|
||||
z /= nx + f;
|
||||
nx += 1.0L;
|
||||
x = nx + f;
|
||||
}
|
||||
if (z < 0.0L)
|
||||
{
|
||||
*sgngaml = -1;
|
||||
z = -z;
|
||||
}
|
||||
else
|
||||
*sgngaml = 1;
|
||||
if (x == 2.0L)
|
||||
return ( logl(z) );
|
||||
x = (nx - 2.0L) + f;
|
||||
p = x * polevll(x, B, 6) / p1evll(x, C, 7);
|
||||
return ( logl(z) + p );
|
||||
}
|
||||
|
||||
if (x > MAXLGM)
|
||||
{
|
||||
_SET_ERRNO(ERANGE);
|
||||
mtherr("lgammal", OVERFLOW);
|
||||
#ifdef INFINITIES
|
||||
return (*sgngaml * INFINITYL);
|
||||
#else
|
||||
return (*sgngaml * MAXNUML);
|
||||
#endif
|
||||
}
|
||||
|
||||
q = (x - 0.5L) * logl(x) - x + LS2PI;
|
||||
if (x > 1.0e10L)
|
||||
return(q);
|
||||
p = 1.0L/(x*x);
|
||||
q += polevll(p, A, 6) / x;
|
||||
return (q);
|
||||
|
||||
lsmall:
|
||||
if (x == 0.0L)
|
||||
goto lgsing;
|
||||
if (x < 0.0L)
|
||||
{
|
||||
x = -x;
|
||||
q = z / (x * polevll(x, SN, 8));
|
||||
}
|
||||
else
|
||||
q = z / (x * polevll(x, S, 8));
|
||||
if (q < 0.0L)
|
||||
{
|
||||
*sgngaml = -1;
|
||||
q = -q;
|
||||
}
|
||||
else
|
||||
*sgngaml = 1;
|
||||
q = logl(q);
|
||||
return (q);
|
||||
}
|
||||
|
||||
/* This is the C99 version */
|
||||
long double lgammal(long double x)
|
||||
{
|
||||
return (__lgammal_r (x, &signgam));
|
||||
}
|
||||
|
||||
long double lgammal_r(long double x, int *signp)
|
||||
{
|
||||
return (__lgammal_r (x, signp));
|
||||
}
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the mingw-w64 runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
|
||||
*/
|
||||
#include <math.h>
|
||||
|
||||
long long llrint (double x)
|
||||
{
|
||||
long long retval = 0ll;
|
||||
#if defined(_AMD64_) || defined(__x86_64__) || defined(_X86_) || defined(__i386__)
|
||||
__asm__ __volatile__ ("fistpll %0" : "=m" (retval) : "t" (x) : "st");
|
||||
#else
|
||||
retval = (long long)x;
|
||||
#endif
|
||||
return retval;
|
||||
}
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the mingw-w64 runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
|
||||
*/
|
||||
#include <math.h>
|
||||
|
||||
long long llrintf (float x)
|
||||
{
|
||||
long long retval = 0ll;
|
||||
#if defined(_AMD64_) || defined(__x86_64__) || defined(_X86_) || defined(__i386__)
|
||||
__asm__ __volatile__ ("fistpll %0" : "=m" (retval) : "t" (x) : "st");
|
||||
#else
|
||||
retval = (long long)x;
|
||||
#endif
|
||||
return retval;
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the mingw-w64 runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
|
||||
*/
|
||||
#include <math.h>
|
||||
|
||||
long long llrintl (long double x)
|
||||
{
|
||||
long long retval = 0ll;
|
||||
#if defined(_AMD64_) || defined(__x86_64__) || defined(_X86_) || defined(__i386__)
|
||||
__asm__ __volatile__ ("fistpll %0" : "=m" (retval) : "t" (x) : "st");
|
||||
#else
|
||||
retval = (long long)x;
|
||||
#endif
|
||||
return retval;
|
||||
}
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the mingw-w64 runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
|
||||
*/
|
||||
#include <math.h>
|
||||
#include <limits.h>
|
||||
#include <errno.h>
|
||||
|
||||
long long
|
||||
llroundl (long double x)
|
||||
{
|
||||
long double res;
|
||||
|
||||
if (x >= 0.0L)
|
||||
{
|
||||
res = ceill (x);
|
||||
if (res - x > 0.5L)
|
||||
res -= 1.0L;
|
||||
}
|
||||
else
|
||||
{
|
||||
res = ceill (-x);
|
||||
if (res + x > 0.5L)
|
||||
res -= 1.0L;
|
||||
res = -res;
|
||||
}
|
||||
if (!isfinite (res)
|
||||
|| res > (double) LLONG_MAX
|
||||
|| res < (double) LLONG_MIN)
|
||||
{
|
||||
errno = ERANGE;
|
||||
/* Undefined behaviour, so we could return anything. */
|
||||
/* return res > 0.0 ? LLONG_MAX : LLONG_MIN; */
|
||||
}
|
||||
return (long long) res;
|
||||
}
|
||||
|
|
@ -0,0 +1,69 @@
|
|||
/*
|
||||
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 "complex_internal.h"
|
||||
#include <errno.h>
|
||||
|
||||
extern long double __cdecl __logl_internal (long double);
|
||||
|
||||
__FLT_TYPE __cdecl
|
||||
__FLT_ABI(log) (__FLT_TYPE x)
|
||||
{
|
||||
int x_class = fpclassify (x);
|
||||
if (x_class == FP_ZERO)
|
||||
{
|
||||
__FLT_RPT_ERANGE ("log", x, 0.0, -__FLT_HUGE_VAL, 1);
|
||||
return -__FLT_HUGE_VAL;
|
||||
}
|
||||
else if (signbit (x))
|
||||
{
|
||||
__FLT_RPT_DOMAIN ("log", x, 0.0, __FLT_NAN);
|
||||
return __FLT_NAN;
|
||||
}
|
||||
else if (x_class == FP_INFINITE)
|
||||
return __FLT_HUGE_VAL;
|
||||
else if (x_class == FP_NAN)
|
||||
return __FLT_NAN;
|
||||
return (__FLT_TYPE) __logl_internal ((long double) x);
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue