From 96cd6858418bc4f65c4b8aa751553c172cf7a165 Mon Sep 17 00:00:00 2001 From: Ziyao Date: Mon, 21 Mar 2022 10:24:31 +0800 Subject: [PATCH] Remove /src/complex --- .gitignore | 3 + config.mak | 31 ++ obj/include/bits/alltypes.h | 415 +++++++++++++++++++++ obj/include/bits/syscall.h | 703 ++++++++++++++++++++++++++++++++++++ src/complex/__cexp.c | 87 ----- src/complex/__cexpf.c | 68 ---- src/complex/cabs.c | 6 - src/complex/cabsf.c | 6 - src/complex/cabsl.c | 13 - src/complex/cacos.c | 11 - src/complex/cacosf.c | 9 - src/complex/cacosh.c | 12 - src/complex/cacoshf.c | 10 - src/complex/cacoshl.c | 17 - src/complex/cacosl.c | 16 - src/complex/carg.c | 6 - src/complex/cargf.c | 6 - src/complex/cargl.c | 13 - src/complex/casin.c | 17 - src/complex/casinf.c | 15 - src/complex/casinh.c | 9 - src/complex/casinhf.c | 7 - src/complex/casinhl.c | 14 - src/complex/casinl.c | 21 -- src/complex/catan.c | 107 ------ src/complex/catanf.c | 103 ------ src/complex/catanh.c | 9 - src/complex/catanhf.c | 7 - src/complex/catanhl.c | 14 - src/complex/catanl.c | 114 ------ src/complex/ccos.c | 8 - src/complex/ccosf.c | 6 - src/complex/ccosh.c | 140 ------- src/complex/ccoshf.c | 90 ----- src/complex/ccoshl.c | 7 - src/complex/ccosl.c | 13 - src/complex/cexp.c | 83 ----- src/complex/cexpf.c | 83 ----- src/complex/cexpl.c | 7 - src/complex/cimag.c | 6 - src/complex/cimagf.c | 6 - src/complex/cimagl.c | 6 - src/complex/clog.c | 14 - src/complex/clogf.c | 12 - src/complex/clogl.c | 18 - src/complex/conj.c | 6 - src/complex/conjf.c | 6 - src/complex/conjl.c | 6 - src/complex/cpow.c | 8 - src/complex/cpowf.c | 6 - src/complex/cpowl.c | 13 - src/complex/cproj.c | 8 - src/complex/cprojf.c | 8 - src/complex/cprojl.c | 15 - src/complex/creal.c | 6 - src/complex/crealf.c | 6 - src/complex/creall.c | 6 - src/complex/csin.c | 9 - src/complex/csinf.c | 7 - src/complex/csinh.c | 141 -------- src/complex/csinhf.c | 90 ----- src/complex/csinhl.c | 7 - src/complex/csinl.c | 14 - src/complex/csqrt.c | 100 ----- src/complex/csqrtf.c | 82 ----- src/complex/csqrtl.c | 7 - src/complex/ctan.c | 9 - src/complex/ctanf.c | 7 - src/complex/ctanh.c | 129 ------- src/complex/ctanhf.c | 66 ---- src/complex/ctanhl.c | 7 - src/complex/ctanl.c | 14 - 72 files changed, 1152 insertions(+), 1999 deletions(-) create mode 100644 config.mak create mode 100644 obj/include/bits/alltypes.h create mode 100644 obj/include/bits/syscall.h delete mode 100644 src/complex/__cexp.c delete mode 100644 src/complex/__cexpf.c delete mode 100644 src/complex/cabs.c delete mode 100644 src/complex/cabsf.c delete mode 100644 src/complex/cabsl.c delete mode 100644 src/complex/cacos.c delete mode 100644 src/complex/cacosf.c delete mode 100644 src/complex/cacosh.c delete mode 100644 src/complex/cacoshf.c delete mode 100644 src/complex/cacoshl.c delete mode 100644 src/complex/cacosl.c delete mode 100644 src/complex/carg.c delete mode 100644 src/complex/cargf.c delete mode 100644 src/complex/cargl.c delete mode 100644 src/complex/casin.c delete mode 100644 src/complex/casinf.c delete mode 100644 src/complex/casinh.c delete mode 100644 src/complex/casinhf.c delete mode 100644 src/complex/casinhl.c delete mode 100644 src/complex/casinl.c delete mode 100644 src/complex/catan.c delete mode 100644 src/complex/catanf.c delete mode 100644 src/complex/catanh.c delete mode 100644 src/complex/catanhf.c delete mode 100644 src/complex/catanhl.c delete mode 100644 src/complex/catanl.c delete mode 100644 src/complex/ccos.c delete mode 100644 src/complex/ccosf.c delete mode 100644 src/complex/ccosh.c delete mode 100644 src/complex/ccoshf.c delete mode 100644 src/complex/ccoshl.c delete mode 100644 src/complex/ccosl.c delete mode 100644 src/complex/cexp.c delete mode 100644 src/complex/cexpf.c delete mode 100644 src/complex/cexpl.c delete mode 100644 src/complex/cimag.c delete mode 100644 src/complex/cimagf.c delete mode 100644 src/complex/cimagl.c delete mode 100644 src/complex/clog.c delete mode 100644 src/complex/clogf.c delete mode 100644 src/complex/clogl.c delete mode 100644 src/complex/conj.c delete mode 100644 src/complex/conjf.c delete mode 100644 src/complex/conjl.c delete mode 100644 src/complex/cpow.c delete mode 100644 src/complex/cpowf.c delete mode 100644 src/complex/cpowl.c delete mode 100644 src/complex/cproj.c delete mode 100644 src/complex/cprojf.c delete mode 100644 src/complex/cprojl.c delete mode 100644 src/complex/creal.c delete mode 100644 src/complex/crealf.c delete mode 100644 src/complex/creall.c delete mode 100644 src/complex/csin.c delete mode 100644 src/complex/csinf.c delete mode 100644 src/complex/csinh.c delete mode 100644 src/complex/csinhf.c delete mode 100644 src/complex/csinhl.c delete mode 100644 src/complex/csinl.c delete mode 100644 src/complex/csqrt.c delete mode 100644 src/complex/csqrtf.c delete mode 100644 src/complex/csqrtl.c delete mode 100644 src/complex/ctan.c delete mode 100644 src/complex/ctanf.c delete mode 100644 src/complex/ctanh.c delete mode 100644 src/complex/ctanhf.c delete mode 100644 src/complex/ctanhl.c delete mode 100644 src/complex/ctanl.c diff --git a/.gitignore b/.gitignore index c6127b3..d9c038d 100644 --- a/.gitignore +++ b/.gitignore @@ -50,3 +50,6 @@ modules.order Module.symvers Mkfile.old dkms.conf + +# Backup files +backup/ diff --git a/config.mak b/config.mak new file mode 100644 index 0000000..63e13a9 --- /dev/null +++ b/config.mak @@ -0,0 +1,31 @@ +# This version of config.mak was generated by: +# ./configure --target=x86_64 +# Any changes made here will be lost if configure is re-run +AR = $(CROSS_COMPILE)ar +RANLIB = $(CROSS_COMPILE)ranlib +ARCH = x86_64 +SUBARCH = +ASMSUBARCH = +srcdir = . +prefix = /usr/local/musl +exec_prefix = $(prefix) +bindir = $(exec_prefix)/bin +libdir = $(prefix)/lib +includedir = $(prefix)/include +syslibdir = /lib +CC = tcc +CFLAGS = +CFLAGS_AUTO = -Os -pipe -fomit-frame-pointer -fno-unwind-tables -fno-asynchronous-unwind-tables -ffunction-sections -fdata-sections -Wno-pointer-to-int-cast -Werror=implicit-function-declaration -Werror=implicit-int -Werror=pointer-sign -Werror=pointer-arith -Werror=int-conversion -Werror=incompatible-pointer-types -Werror=discarded-qualifiers -Werror=discarded-array-qualifiers -Waddress -Warray-bounds -Wchar-subscripts -Wduplicate-decl-specifier -Winit-self -Wreturn-type -Wsequence-point -Wstrict-aliasing -Wunused-function -Wunused-label -Wunused-variable +CFLAGS_C99FSE = -std=c99 -nostdinc -ffreestanding -fexcess-precision=standard -frounding-math -Wa,--noexecstack +CFLAGS_MEMOPS = -fno-tree-loop-distribute-patterns +CFLAGS_NOSSP = -fno-stack-protector +CPPFLAGS = +LDFLAGS = +LDFLAGS_AUTO = +CROSS_COMPILE = x86_64- +LIBCC = +OPTIMIZE_GLOBS = internal/*.c malloc/*.c string/*.c +ALL_TOOLS = +TOOL_LIBS = +ADD_CFI = no +MALLOC_DIR = mallocng diff --git a/obj/include/bits/alltypes.h b/obj/include/bits/alltypes.h new file mode 100644 index 0000000..b5d6f52 --- /dev/null +++ b/obj/include/bits/alltypes.h @@ -0,0 +1,415 @@ +#define _Addr long +#define _Int64 long +#define _Reg long + +#define __BYTE_ORDER 1234 +#define __LONG_MAX 0x7fffffffffffffffL + +#ifndef __cplusplus +#if defined(__NEED_wchar_t) && !defined(__DEFINED_wchar_t) +typedef int wchar_t; +#define __DEFINED_wchar_t +#endif + +#endif + +#if defined(__FLT_EVAL_METHOD__) && __FLT_EVAL_METHOD__ == 2 +#if defined(__NEED_float_t) && !defined(__DEFINED_float_t) +typedef long double float_t; +#define __DEFINED_float_t +#endif + +#if defined(__NEED_double_t) && !defined(__DEFINED_double_t) +typedef long double double_t; +#define __DEFINED_double_t +#endif + +#else +#if defined(__NEED_float_t) && !defined(__DEFINED_float_t) +typedef float float_t; +#define __DEFINED_float_t +#endif + +#if defined(__NEED_double_t) && !defined(__DEFINED_double_t) +typedef double double_t; +#define __DEFINED_double_t +#endif + +#endif + +#if defined(__NEED_max_align_t) && !defined(__DEFINED_max_align_t) +typedef struct { long long __ll; long double __ld; } max_align_t; +#define __DEFINED_max_align_t +#endif + +#define __LITTLE_ENDIAN 1234 +#define __BIG_ENDIAN 4321 +#define __USE_TIME_BITS64 1 + +#if defined(__NEED_size_t) && !defined(__DEFINED_size_t) +typedef unsigned _Addr size_t; +#define __DEFINED_size_t +#endif + +#if defined(__NEED_uintptr_t) && !defined(__DEFINED_uintptr_t) +typedef unsigned _Addr uintptr_t; +#define __DEFINED_uintptr_t +#endif + +#if defined(__NEED_ptrdiff_t) && !defined(__DEFINED_ptrdiff_t) +typedef _Addr ptrdiff_t; +#define __DEFINED_ptrdiff_t +#endif + +#if defined(__NEED_ssize_t) && !defined(__DEFINED_ssize_t) +typedef _Addr ssize_t; +#define __DEFINED_ssize_t +#endif + +#if defined(__NEED_intptr_t) && !defined(__DEFINED_intptr_t) +typedef _Addr intptr_t; +#define __DEFINED_intptr_t +#endif + +#if defined(__NEED_regoff_t) && !defined(__DEFINED_regoff_t) +typedef _Addr regoff_t; +#define __DEFINED_regoff_t +#endif + +#if defined(__NEED_register_t) && !defined(__DEFINED_register_t) +typedef _Reg register_t; +#define __DEFINED_register_t +#endif + +#if defined(__NEED_time_t) && !defined(__DEFINED_time_t) +typedef _Int64 time_t; +#define __DEFINED_time_t +#endif + +#if defined(__NEED_suseconds_t) && !defined(__DEFINED_suseconds_t) +typedef _Int64 suseconds_t; +#define __DEFINED_suseconds_t +#endif + + +#if defined(__NEED_int8_t) && !defined(__DEFINED_int8_t) +typedef signed char int8_t; +#define __DEFINED_int8_t +#endif + +#if defined(__NEED_int16_t) && !defined(__DEFINED_int16_t) +typedef signed short int16_t; +#define __DEFINED_int16_t +#endif + +#if defined(__NEED_int32_t) && !defined(__DEFINED_int32_t) +typedef signed int int32_t; +#define __DEFINED_int32_t +#endif + +#if defined(__NEED_int64_t) && !defined(__DEFINED_int64_t) +typedef signed _Int64 int64_t; +#define __DEFINED_int64_t +#endif + +#if defined(__NEED_intmax_t) && !defined(__DEFINED_intmax_t) +typedef signed _Int64 intmax_t; +#define __DEFINED_intmax_t +#endif + +#if defined(__NEED_uint8_t) && !defined(__DEFINED_uint8_t) +typedef unsigned char uint8_t; +#define __DEFINED_uint8_t +#endif + +#if defined(__NEED_uint16_t) && !defined(__DEFINED_uint16_t) +typedef unsigned short uint16_t; +#define __DEFINED_uint16_t +#endif + +#if defined(__NEED_uint32_t) && !defined(__DEFINED_uint32_t) +typedef unsigned int uint32_t; +#define __DEFINED_uint32_t +#endif + +#if defined(__NEED_uint64_t) && !defined(__DEFINED_uint64_t) +typedef unsigned _Int64 uint64_t; +#define __DEFINED_uint64_t +#endif + +#if defined(__NEED_u_int64_t) && !defined(__DEFINED_u_int64_t) +typedef unsigned _Int64 u_int64_t; +#define __DEFINED_u_int64_t +#endif + +#if defined(__NEED_uintmax_t) && !defined(__DEFINED_uintmax_t) +typedef unsigned _Int64 uintmax_t; +#define __DEFINED_uintmax_t +#endif + + +#if defined(__NEED_mode_t) && !defined(__DEFINED_mode_t) +typedef unsigned mode_t; +#define __DEFINED_mode_t +#endif + +#if defined(__NEED_nlink_t) && !defined(__DEFINED_nlink_t) +typedef unsigned _Reg nlink_t; +#define __DEFINED_nlink_t +#endif + +#if defined(__NEED_off_t) && !defined(__DEFINED_off_t) +typedef _Int64 off_t; +#define __DEFINED_off_t +#endif + +#if defined(__NEED_ino_t) && !defined(__DEFINED_ino_t) +typedef unsigned _Int64 ino_t; +#define __DEFINED_ino_t +#endif + +#if defined(__NEED_dev_t) && !defined(__DEFINED_dev_t) +typedef unsigned _Int64 dev_t; +#define __DEFINED_dev_t +#endif + +#if defined(__NEED_blksize_t) && !defined(__DEFINED_blksize_t) +typedef long blksize_t; +#define __DEFINED_blksize_t +#endif + +#if defined(__NEED_blkcnt_t) && !defined(__DEFINED_blkcnt_t) +typedef _Int64 blkcnt_t; +#define __DEFINED_blkcnt_t +#endif + +#if defined(__NEED_fsblkcnt_t) && !defined(__DEFINED_fsblkcnt_t) +typedef unsigned _Int64 fsblkcnt_t; +#define __DEFINED_fsblkcnt_t +#endif + +#if defined(__NEED_fsfilcnt_t) && !defined(__DEFINED_fsfilcnt_t) +typedef unsigned _Int64 fsfilcnt_t; +#define __DEFINED_fsfilcnt_t +#endif + + +#if defined(__NEED_wint_t) && !defined(__DEFINED_wint_t) +typedef unsigned wint_t; +#define __DEFINED_wint_t +#endif + +#if defined(__NEED_wctype_t) && !defined(__DEFINED_wctype_t) +typedef unsigned long wctype_t; +#define __DEFINED_wctype_t +#endif + + +#if defined(__NEED_timer_t) && !defined(__DEFINED_timer_t) +typedef void * timer_t; +#define __DEFINED_timer_t +#endif + +#if defined(__NEED_clockid_t) && !defined(__DEFINED_clockid_t) +typedef int clockid_t; +#define __DEFINED_clockid_t +#endif + +#if defined(__NEED_clock_t) && !defined(__DEFINED_clock_t) +typedef long clock_t; +#define __DEFINED_clock_t +#endif + +#if defined(__NEED_struct_timeval) && !defined(__DEFINED_struct_timeval) +struct timeval { time_t tv_sec; suseconds_t tv_usec; }; +#define __DEFINED_struct_timeval +#endif + +#if defined(__NEED_struct_timespec) && !defined(__DEFINED_struct_timespec) +struct timespec { time_t tv_sec; int :8*(sizeof(time_t)-sizeof(long))*(__BYTE_ORDER==4321); long tv_nsec; int :8*(sizeof(time_t)-sizeof(long))*(__BYTE_ORDER!=4321); }; +#define __DEFINED_struct_timespec +#endif + + +#if defined(__NEED_pid_t) && !defined(__DEFINED_pid_t) +typedef int pid_t; +#define __DEFINED_pid_t +#endif + +#if defined(__NEED_id_t) && !defined(__DEFINED_id_t) +typedef unsigned id_t; +#define __DEFINED_id_t +#endif + +#if defined(__NEED_uid_t) && !defined(__DEFINED_uid_t) +typedef unsigned uid_t; +#define __DEFINED_uid_t +#endif + +#if defined(__NEED_gid_t) && !defined(__DEFINED_gid_t) +typedef unsigned gid_t; +#define __DEFINED_gid_t +#endif + +#if defined(__NEED_key_t) && !defined(__DEFINED_key_t) +typedef int key_t; +#define __DEFINED_key_t +#endif + +#if defined(__NEED_useconds_t) && !defined(__DEFINED_useconds_t) +typedef unsigned useconds_t; +#define __DEFINED_useconds_t +#endif + + +#ifdef __cplusplus +#if defined(__NEED_pthread_t) && !defined(__DEFINED_pthread_t) +typedef unsigned long pthread_t; +#define __DEFINED_pthread_t +#endif + +#else +#if defined(__NEED_pthread_t) && !defined(__DEFINED_pthread_t) +typedef struct __pthread * pthread_t; +#define __DEFINED_pthread_t +#endif + +#endif +#if defined(__NEED_pthread_once_t) && !defined(__DEFINED_pthread_once_t) +typedef int pthread_once_t; +#define __DEFINED_pthread_once_t +#endif + +#if defined(__NEED_pthread_key_t) && !defined(__DEFINED_pthread_key_t) +typedef unsigned pthread_key_t; +#define __DEFINED_pthread_key_t +#endif + +#if defined(__NEED_pthread_spinlock_t) && !defined(__DEFINED_pthread_spinlock_t) +typedef int pthread_spinlock_t; +#define __DEFINED_pthread_spinlock_t +#endif + +#if defined(__NEED_pthread_mutexattr_t) && !defined(__DEFINED_pthread_mutexattr_t) +typedef struct { unsigned __attr; } pthread_mutexattr_t; +#define __DEFINED_pthread_mutexattr_t +#endif + +#if defined(__NEED_pthread_condattr_t) && !defined(__DEFINED_pthread_condattr_t) +typedef struct { unsigned __attr; } pthread_condattr_t; +#define __DEFINED_pthread_condattr_t +#endif + +#if defined(__NEED_pthread_barrierattr_t) && !defined(__DEFINED_pthread_barrierattr_t) +typedef struct { unsigned __attr; } pthread_barrierattr_t; +#define __DEFINED_pthread_barrierattr_t +#endif + +#if defined(__NEED_pthread_rwlockattr_t) && !defined(__DEFINED_pthread_rwlockattr_t) +typedef struct { unsigned __attr[2]; } pthread_rwlockattr_t; +#define __DEFINED_pthread_rwlockattr_t +#endif + + +#if defined(__NEED_struct__IO_FILE) && !defined(__DEFINED_struct__IO_FILE) +struct _IO_FILE { char __x; }; +#define __DEFINED_struct__IO_FILE +#endif + +#if defined(__NEED_FILE) && !defined(__DEFINED_FILE) +typedef struct _IO_FILE FILE; +#define __DEFINED_FILE +#endif + + +#if defined(__NEED_va_list) && !defined(__DEFINED_va_list) +typedef __builtin_va_list va_list; +#define __DEFINED_va_list +#endif + +#if defined(__NEED___isoc_va_list) && !defined(__DEFINED___isoc_va_list) +typedef __builtin_va_list __isoc_va_list; +#define __DEFINED___isoc_va_list +#endif + + +#if defined(__NEED_mbstate_t) && !defined(__DEFINED_mbstate_t) +typedef struct __mbstate_t { unsigned __opaque1, __opaque2; } mbstate_t; +#define __DEFINED_mbstate_t +#endif + + +#if defined(__NEED_locale_t) && !defined(__DEFINED_locale_t) +typedef struct __locale_struct * locale_t; +#define __DEFINED_locale_t +#endif + + +#if defined(__NEED_sigset_t) && !defined(__DEFINED_sigset_t) +typedef struct __sigset_t { unsigned long __bits[128/sizeof(long)]; } sigset_t; +#define __DEFINED_sigset_t +#endif + + +#if defined(__NEED_struct_iovec) && !defined(__DEFINED_struct_iovec) +struct iovec { void *iov_base; size_t iov_len; }; +#define __DEFINED_struct_iovec +#endif + + +#if defined(__NEED_struct_winsize) && !defined(__DEFINED_struct_winsize) +struct winsize { unsigned short ws_row, ws_col, ws_xpixel, ws_ypixel; }; +#define __DEFINED_struct_winsize +#endif + + +#if defined(__NEED_socklen_t) && !defined(__DEFINED_socklen_t) +typedef unsigned socklen_t; +#define __DEFINED_socklen_t +#endif + +#if defined(__NEED_sa_family_t) && !defined(__DEFINED_sa_family_t) +typedef unsigned short sa_family_t; +#define __DEFINED_sa_family_t +#endif + + +#if defined(__NEED_pthread_attr_t) && !defined(__DEFINED_pthread_attr_t) +typedef struct { union { int __i[sizeof(long)==8?14:9]; volatile int __vi[sizeof(long)==8?14:9]; unsigned long __s[sizeof(long)==8?7:9]; } __u; } pthread_attr_t; +#define __DEFINED_pthread_attr_t +#endif + +#if defined(__NEED_pthread_mutex_t) && !defined(__DEFINED_pthread_mutex_t) +typedef struct { union { int __i[sizeof(long)==8?10:6]; volatile int __vi[sizeof(long)==8?10:6]; volatile void *volatile __p[sizeof(long)==8?5:6]; } __u; } pthread_mutex_t; +#define __DEFINED_pthread_mutex_t +#endif + +#if defined(__NEED_mtx_t) && !defined(__DEFINED_mtx_t) +typedef struct { union { int __i[sizeof(long)==8?10:6]; volatile int __vi[sizeof(long)==8?10:6]; volatile void *volatile __p[sizeof(long)==8?5:6]; } __u; } mtx_t; +#define __DEFINED_mtx_t +#endif + +#if defined(__NEED_pthread_cond_t) && !defined(__DEFINED_pthread_cond_t) +typedef struct { union { int __i[12]; volatile int __vi[12]; void *__p[12*sizeof(int)/sizeof(void*)]; } __u; } pthread_cond_t; +#define __DEFINED_pthread_cond_t +#endif + +#if defined(__NEED_cnd_t) && !defined(__DEFINED_cnd_t) +typedef struct { union { int __i[12]; volatile int __vi[12]; void *__p[12*sizeof(int)/sizeof(void*)]; } __u; } cnd_t; +#define __DEFINED_cnd_t +#endif + +#if defined(__NEED_pthread_rwlock_t) && !defined(__DEFINED_pthread_rwlock_t) +typedef struct { union { int __i[sizeof(long)==8?14:8]; volatile int __vi[sizeof(long)==8?14:8]; void *__p[sizeof(long)==8?7:8]; } __u; } pthread_rwlock_t; +#define __DEFINED_pthread_rwlock_t +#endif + +#if defined(__NEED_pthread_barrier_t) && !defined(__DEFINED_pthread_barrier_t) +typedef struct { union { int __i[sizeof(long)==8?8:5]; volatile int __vi[sizeof(long)==8?8:5]; void *__p[sizeof(long)==8?4:5]; } __u; } pthread_barrier_t; +#define __DEFINED_pthread_barrier_t +#endif + + +#undef _Addr +#undef _Int64 +#undef _Reg diff --git a/obj/include/bits/syscall.h b/obj/include/bits/syscall.h new file mode 100644 index 0000000..0df452c --- /dev/null +++ b/obj/include/bits/syscall.h @@ -0,0 +1,703 @@ +#define __NR_read 0 +#define __NR_write 1 +#define __NR_open 2 +#define __NR_close 3 +#define __NR_stat 4 +#define __NR_fstat 5 +#define __NR_lstat 6 +#define __NR_poll 7 +#define __NR_lseek 8 +#define __NR_mmap 9 +#define __NR_mprotect 10 +#define __NR_munmap 11 +#define __NR_brk 12 +#define __NR_rt_sigaction 13 +#define __NR_rt_sigprocmask 14 +#define __NR_rt_sigreturn 15 +#define __NR_ioctl 16 +#define __NR_pread64 17 +#define __NR_pwrite64 18 +#define __NR_readv 19 +#define __NR_writev 20 +#define __NR_access 21 +#define __NR_pipe 22 +#define __NR_select 23 +#define __NR_sched_yield 24 +#define __NR_mremap 25 +#define __NR_msync 26 +#define __NR_mincore 27 +#define __NR_madvise 28 +#define __NR_shmget 29 +#define __NR_shmat 30 +#define __NR_shmctl 31 +#define __NR_dup 32 +#define __NR_dup2 33 +#define __NR_pause 34 +#define __NR_nanosleep 35 +#define __NR_getitimer 36 +#define __NR_alarm 37 +#define __NR_setitimer 38 +#define __NR_getpid 39 +#define __NR_sendfile 40 +#define __NR_socket 41 +#define __NR_connect 42 +#define __NR_accept 43 +#define __NR_sendto 44 +#define __NR_recvfrom 45 +#define __NR_sendmsg 46 +#define __NR_recvmsg 47 +#define __NR_shutdown 48 +#define __NR_bind 49 +#define __NR_listen 50 +#define __NR_getsockname 51 +#define __NR_getpeername 52 +#define __NR_socketpair 53 +#define __NR_setsockopt 54 +#define __NR_getsockopt 55 +#define __NR_clone 56 +#define __NR_fork 57 +#define __NR_vfork 58 +#define __NR_execve 59 +#define __NR_exit 60 +#define __NR_wait4 61 +#define __NR_kill 62 +#define __NR_uname 63 +#define __NR_semget 64 +#define __NR_semop 65 +#define __NR_semctl 66 +#define __NR_shmdt 67 +#define __NR_msgget 68 +#define __NR_msgsnd 69 +#define __NR_msgrcv 70 +#define __NR_msgctl 71 +#define __NR_fcntl 72 +#define __NR_flock 73 +#define __NR_fsync 74 +#define __NR_fdatasync 75 +#define __NR_truncate 76 +#define __NR_ftruncate 77 +#define __NR_getdents 78 +#define __NR_getcwd 79 +#define __NR_chdir 80 +#define __NR_fchdir 81 +#define __NR_rename 82 +#define __NR_mkdir 83 +#define __NR_rmdir 84 +#define __NR_creat 85 +#define __NR_link 86 +#define __NR_unlink 87 +#define __NR_symlink 88 +#define __NR_readlink 89 +#define __NR_chmod 90 +#define __NR_fchmod 91 +#define __NR_chown 92 +#define __NR_fchown 93 +#define __NR_lchown 94 +#define __NR_umask 95 +#define __NR_gettimeofday 96 +#define __NR_getrlimit 97 +#define __NR_getrusage 98 +#define __NR_sysinfo 99 +#define __NR_times 100 +#define __NR_ptrace 101 +#define __NR_getuid 102 +#define __NR_syslog 103 +#define __NR_getgid 104 +#define __NR_setuid 105 +#define __NR_setgid 106 +#define __NR_geteuid 107 +#define __NR_getegid 108 +#define __NR_setpgid 109 +#define __NR_getppid 110 +#define __NR_getpgrp 111 +#define __NR_setsid 112 +#define __NR_setreuid 113 +#define __NR_setregid 114 +#define __NR_getgroups 115 +#define __NR_setgroups 116 +#define __NR_setresuid 117 +#define __NR_getresuid 118 +#define __NR_setresgid 119 +#define __NR_getresgid 120 +#define __NR_getpgid 121 +#define __NR_setfsuid 122 +#define __NR_setfsgid 123 +#define __NR_getsid 124 +#define __NR_capget 125 +#define __NR_capset 126 +#define __NR_rt_sigpending 127 +#define __NR_rt_sigtimedwait 128 +#define __NR_rt_sigqueueinfo 129 +#define __NR_rt_sigsuspend 130 +#define __NR_sigaltstack 131 +#define __NR_utime 132 +#define __NR_mknod 133 +#define __NR_uselib 134 +#define __NR_personality 135 +#define __NR_ustat 136 +#define __NR_statfs 137 +#define __NR_fstatfs 138 +#define __NR_sysfs 139 +#define __NR_getpriority 140 +#define __NR_setpriority 141 +#define __NR_sched_setparam 142 +#define __NR_sched_getparam 143 +#define __NR_sched_setscheduler 144 +#define __NR_sched_getscheduler 145 +#define __NR_sched_get_priority_max 146 +#define __NR_sched_get_priority_min 147 +#define __NR_sched_rr_get_interval 148 +#define __NR_mlock 149 +#define __NR_munlock 150 +#define __NR_mlockall 151 +#define __NR_munlockall 152 +#define __NR_vhangup 153 +#define __NR_modify_ldt 154 +#define __NR_pivot_root 155 +#define __NR__sysctl 156 +#define __NR_prctl 157 +#define __NR_arch_prctl 158 +#define __NR_adjtimex 159 +#define __NR_setrlimit 160 +#define __NR_chroot 161 +#define __NR_sync 162 +#define __NR_acct 163 +#define __NR_settimeofday 164 +#define __NR_mount 165 +#define __NR_umount2 166 +#define __NR_swapon 167 +#define __NR_swapoff 168 +#define __NR_reboot 169 +#define __NR_sethostname 170 +#define __NR_setdomainname 171 +#define __NR_iopl 172 +#define __NR_ioperm 173 +#define __NR_create_module 174 +#define __NR_init_module 175 +#define __NR_delete_module 176 +#define __NR_get_kernel_syms 177 +#define __NR_query_module 178 +#define __NR_quotactl 179 +#define __NR_nfsservctl 180 +#define __NR_getpmsg 181 +#define __NR_putpmsg 182 +#define __NR_afs_syscall 183 +#define __NR_tuxcall 184 +#define __NR_security 185 +#define __NR_gettid 186 +#define __NR_readahead 187 +#define __NR_setxattr 188 +#define __NR_lsetxattr 189 +#define __NR_fsetxattr 190 +#define __NR_getxattr 191 +#define __NR_lgetxattr 192 +#define __NR_fgetxattr 193 +#define __NR_listxattr 194 +#define __NR_llistxattr 195 +#define __NR_flistxattr 196 +#define __NR_removexattr 197 +#define __NR_lremovexattr 198 +#define __NR_fremovexattr 199 +#define __NR_tkill 200 +#define __NR_time 201 +#define __NR_futex 202 +#define __NR_sched_setaffinity 203 +#define __NR_sched_getaffinity 204 +#define __NR_set_thread_area 205 +#define __NR_io_setup 206 +#define __NR_io_destroy 207 +#define __NR_io_getevents 208 +#define __NR_io_submit 209 +#define __NR_io_cancel 210 +#define __NR_get_thread_area 211 +#define __NR_lookup_dcookie 212 +#define __NR_epoll_create 213 +#define __NR_epoll_ctl_old 214 +#define __NR_epoll_wait_old 215 +#define __NR_remap_file_pages 216 +#define __NR_getdents64 217 +#define __NR_set_tid_address 218 +#define __NR_restart_syscall 219 +#define __NR_semtimedop 220 +#define __NR_fadvise64 221 +#define __NR_timer_create 222 +#define __NR_timer_settime 223 +#define __NR_timer_gettime 224 +#define __NR_timer_getoverrun 225 +#define __NR_timer_delete 226 +#define __NR_clock_settime 227 +#define __NR_clock_gettime 228 +#define __NR_clock_getres 229 +#define __NR_clock_nanosleep 230 +#define __NR_exit_group 231 +#define __NR_epoll_wait 232 +#define __NR_epoll_ctl 233 +#define __NR_tgkill 234 +#define __NR_utimes 235 +#define __NR_vserver 236 +#define __NR_mbind 237 +#define __NR_set_mempolicy 238 +#define __NR_get_mempolicy 239 +#define __NR_mq_open 240 +#define __NR_mq_unlink 241 +#define __NR_mq_timedsend 242 +#define __NR_mq_timedreceive 243 +#define __NR_mq_notify 244 +#define __NR_mq_getsetattr 245 +#define __NR_kexec_load 246 +#define __NR_waitid 247 +#define __NR_add_key 248 +#define __NR_request_key 249 +#define __NR_keyctl 250 +#define __NR_ioprio_set 251 +#define __NR_ioprio_get 252 +#define __NR_inotify_init 253 +#define __NR_inotify_add_watch 254 +#define __NR_inotify_rm_watch 255 +#define __NR_migrate_pages 256 +#define __NR_openat 257 +#define __NR_mkdirat 258 +#define __NR_mknodat 259 +#define __NR_fchownat 260 +#define __NR_futimesat 261 +#define __NR_newfstatat 262 +#define __NR_unlinkat 263 +#define __NR_renameat 264 +#define __NR_linkat 265 +#define __NR_symlinkat 266 +#define __NR_readlinkat 267 +#define __NR_fchmodat 268 +#define __NR_faccessat 269 +#define __NR_pselect6 270 +#define __NR_ppoll 271 +#define __NR_unshare 272 +#define __NR_set_robust_list 273 +#define __NR_get_robust_list 274 +#define __NR_splice 275 +#define __NR_tee 276 +#define __NR_sync_file_range 277 +#define __NR_vmsplice 278 +#define __NR_move_pages 279 +#define __NR_utimensat 280 +#define __NR_epoll_pwait 281 +#define __NR_signalfd 282 +#define __NR_timerfd_create 283 +#define __NR_eventfd 284 +#define __NR_fallocate 285 +#define __NR_timerfd_settime 286 +#define __NR_timerfd_gettime 287 +#define __NR_accept4 288 +#define __NR_signalfd4 289 +#define __NR_eventfd2 290 +#define __NR_epoll_create1 291 +#define __NR_dup3 292 +#define __NR_pipe2 293 +#define __NR_inotify_init1 294 +#define __NR_preadv 295 +#define __NR_pwritev 296 +#define __NR_rt_tgsigqueueinfo 297 +#define __NR_perf_event_open 298 +#define __NR_recvmmsg 299 +#define __NR_fanotify_init 300 +#define __NR_fanotify_mark 301 +#define __NR_prlimit64 302 +#define __NR_name_to_handle_at 303 +#define __NR_open_by_handle_at 304 +#define __NR_clock_adjtime 305 +#define __NR_syncfs 306 +#define __NR_sendmmsg 307 +#define __NR_setns 308 +#define __NR_getcpu 309 +#define __NR_process_vm_readv 310 +#define __NR_process_vm_writev 311 +#define __NR_kcmp 312 +#define __NR_finit_module 313 +#define __NR_sched_setattr 314 +#define __NR_sched_getattr 315 +#define __NR_renameat2 316 +#define __NR_seccomp 317 +#define __NR_getrandom 318 +#define __NR_memfd_create 319 +#define __NR_kexec_file_load 320 +#define __NR_bpf 321 +#define __NR_execveat 322 +#define __NR_userfaultfd 323 +#define __NR_membarrier 324 +#define __NR_mlock2 325 +#define __NR_copy_file_range 326 +#define __NR_preadv2 327 +#define __NR_pwritev2 328 +#define __NR_pkey_mprotect 329 +#define __NR_pkey_alloc 330 +#define __NR_pkey_free 331 +#define __NR_statx 332 +#define __NR_io_pgetevents 333 +#define __NR_rseq 334 +#define __NR_pidfd_send_signal 424 +#define __NR_io_uring_setup 425 +#define __NR_io_uring_enter 426 +#define __NR_io_uring_register 427 +#define __NR_open_tree 428 +#define __NR_move_mount 429 +#define __NR_fsopen 430 +#define __NR_fsconfig 431 +#define __NR_fsmount 432 +#define __NR_fspick 433 +#define __NR_pidfd_open 434 +#define __NR_clone3 435 +#define __NR_close_range 436 +#define __NR_openat2 437 +#define __NR_pidfd_getfd 438 +#define __NR_faccessat2 439 + +#define SYS_read 0 +#define SYS_write 1 +#define SYS_open 2 +#define SYS_close 3 +#define SYS_stat 4 +#define SYS_fstat 5 +#define SYS_lstat 6 +#define SYS_poll 7 +#define SYS_lseek 8 +#define SYS_mmap 9 +#define SYS_mprotect 10 +#define SYS_munmap 11 +#define SYS_brk 12 +#define SYS_rt_sigaction 13 +#define SYS_rt_sigprocmask 14 +#define SYS_rt_sigreturn 15 +#define SYS_ioctl 16 +#define SYS_pread64 17 +#define SYS_pwrite64 18 +#define SYS_readv 19 +#define SYS_writev 20 +#define SYS_access 21 +#define SYS_pipe 22 +#define SYS_select 23 +#define SYS_sched_yield 24 +#define SYS_mremap 25 +#define SYS_msync 26 +#define SYS_mincore 27 +#define SYS_madvise 28 +#define SYS_shmget 29 +#define SYS_shmat 30 +#define SYS_shmctl 31 +#define SYS_dup 32 +#define SYS_dup2 33 +#define SYS_pause 34 +#define SYS_nanosleep 35 +#define SYS_getitimer 36 +#define SYS_alarm 37 +#define SYS_setitimer 38 +#define SYS_getpid 39 +#define SYS_sendfile 40 +#define SYS_socket 41 +#define SYS_connect 42 +#define SYS_accept 43 +#define SYS_sendto 44 +#define SYS_recvfrom 45 +#define SYS_sendmsg 46 +#define SYS_recvmsg 47 +#define SYS_shutdown 48 +#define SYS_bind 49 +#define SYS_listen 50 +#define SYS_getsockname 51 +#define SYS_getpeername 52 +#define SYS_socketpair 53 +#define SYS_setsockopt 54 +#define SYS_getsockopt 55 +#define SYS_clone 56 +#define SYS_fork 57 +#define SYS_vfork 58 +#define SYS_execve 59 +#define SYS_exit 60 +#define SYS_wait4 61 +#define SYS_kill 62 +#define SYS_uname 63 +#define SYS_semget 64 +#define SYS_semop 65 +#define SYS_semctl 66 +#define SYS_shmdt 67 +#define SYS_msgget 68 +#define SYS_msgsnd 69 +#define SYS_msgrcv 70 +#define SYS_msgctl 71 +#define SYS_fcntl 72 +#define SYS_flock 73 +#define SYS_fsync 74 +#define SYS_fdatasync 75 +#define SYS_truncate 76 +#define SYS_ftruncate 77 +#define SYS_getdents 78 +#define SYS_getcwd 79 +#define SYS_chdir 80 +#define SYS_fchdir 81 +#define SYS_rename 82 +#define SYS_mkdir 83 +#define SYS_rmdir 84 +#define SYS_creat 85 +#define SYS_link 86 +#define SYS_unlink 87 +#define SYS_symlink 88 +#define SYS_readlink 89 +#define SYS_chmod 90 +#define SYS_fchmod 91 +#define SYS_chown 92 +#define SYS_fchown 93 +#define SYS_lchown 94 +#define SYS_umask 95 +#define SYS_gettimeofday 96 +#define SYS_getrlimit 97 +#define SYS_getrusage 98 +#define SYS_sysinfo 99 +#define SYS_times 100 +#define SYS_ptrace 101 +#define SYS_getuid 102 +#define SYS_syslog 103 +#define SYS_getgid 104 +#define SYS_setuid 105 +#define SYS_setgid 106 +#define SYS_geteuid 107 +#define SYS_getegid 108 +#define SYS_setpgid 109 +#define SYS_getppid 110 +#define SYS_getpgrp 111 +#define SYS_setsid 112 +#define SYS_setreuid 113 +#define SYS_setregid 114 +#define SYS_getgroups 115 +#define SYS_setgroups 116 +#define SYS_setresuid 117 +#define SYS_getresuid 118 +#define SYS_setresgid 119 +#define SYS_getresgid 120 +#define SYS_getpgid 121 +#define SYS_setfsuid 122 +#define SYS_setfsgid 123 +#define SYS_getsid 124 +#define SYS_capget 125 +#define SYS_capset 126 +#define SYS_rt_sigpending 127 +#define SYS_rt_sigtimedwait 128 +#define SYS_rt_sigqueueinfo 129 +#define SYS_rt_sigsuspend 130 +#define SYS_sigaltstack 131 +#define SYS_utime 132 +#define SYS_mknod 133 +#define SYS_uselib 134 +#define SYS_personality 135 +#define SYS_ustat 136 +#define SYS_statfs 137 +#define SYS_fstatfs 138 +#define SYS_sysfs 139 +#define SYS_getpriority 140 +#define SYS_setpriority 141 +#define SYS_sched_setparam 142 +#define SYS_sched_getparam 143 +#define SYS_sched_setscheduler 144 +#define SYS_sched_getscheduler 145 +#define SYS_sched_get_priority_max 146 +#define SYS_sched_get_priority_min 147 +#define SYS_sched_rr_get_interval 148 +#define SYS_mlock 149 +#define SYS_munlock 150 +#define SYS_mlockall 151 +#define SYS_munlockall 152 +#define SYS_vhangup 153 +#define SYS_modify_ldt 154 +#define SYS_pivot_root 155 +#define SYS__sysctl 156 +#define SYS_prctl 157 +#define SYS_arch_prctl 158 +#define SYS_adjtimex 159 +#define SYS_setrlimit 160 +#define SYS_chroot 161 +#define SYS_sync 162 +#define SYS_acct 163 +#define SYS_settimeofday 164 +#define SYS_mount 165 +#define SYS_umount2 166 +#define SYS_swapon 167 +#define SYS_swapoff 168 +#define SYS_reboot 169 +#define SYS_sethostname 170 +#define SYS_setdomainname 171 +#define SYS_iopl 172 +#define SYS_ioperm 173 +#define SYS_create_module 174 +#define SYS_init_module 175 +#define SYS_delete_module 176 +#define SYS_get_kernel_syms 177 +#define SYS_query_module 178 +#define SYS_quotactl 179 +#define SYS_nfsservctl 180 +#define SYS_getpmsg 181 +#define SYS_putpmsg 182 +#define SYS_afs_syscall 183 +#define SYS_tuxcall 184 +#define SYS_security 185 +#define SYS_gettid 186 +#define SYS_readahead 187 +#define SYS_setxattr 188 +#define SYS_lsetxattr 189 +#define SYS_fsetxattr 190 +#define SYS_getxattr 191 +#define SYS_lgetxattr 192 +#define SYS_fgetxattr 193 +#define SYS_listxattr 194 +#define SYS_llistxattr 195 +#define SYS_flistxattr 196 +#define SYS_removexattr 197 +#define SYS_lremovexattr 198 +#define SYS_fremovexattr 199 +#define SYS_tkill 200 +#define SYS_time 201 +#define SYS_futex 202 +#define SYS_sched_setaffinity 203 +#define SYS_sched_getaffinity 204 +#define SYS_set_thread_area 205 +#define SYS_io_setup 206 +#define SYS_io_destroy 207 +#define SYS_io_getevents 208 +#define SYS_io_submit 209 +#define SYS_io_cancel 210 +#define SYS_get_thread_area 211 +#define SYS_lookup_dcookie 212 +#define SYS_epoll_create 213 +#define SYS_epoll_ctl_old 214 +#define SYS_epoll_wait_old 215 +#define SYS_remap_file_pages 216 +#define SYS_getdents64 217 +#define SYS_set_tid_address 218 +#define SYS_restart_syscall 219 +#define SYS_semtimedop 220 +#define SYS_fadvise64 221 +#define SYS_timer_create 222 +#define SYS_timer_settime 223 +#define SYS_timer_gettime 224 +#define SYS_timer_getoverrun 225 +#define SYS_timer_delete 226 +#define SYS_clock_settime 227 +#define SYS_clock_gettime 228 +#define SYS_clock_getres 229 +#define SYS_clock_nanosleep 230 +#define SYS_exit_group 231 +#define SYS_epoll_wait 232 +#define SYS_epoll_ctl 233 +#define SYS_tgkill 234 +#define SYS_utimes 235 +#define SYS_vserver 236 +#define SYS_mbind 237 +#define SYS_set_mempolicy 238 +#define SYS_get_mempolicy 239 +#define SYS_mq_open 240 +#define SYS_mq_unlink 241 +#define SYS_mq_timedsend 242 +#define SYS_mq_timedreceive 243 +#define SYS_mq_notify 244 +#define SYS_mq_getsetattr 245 +#define SYS_kexec_load 246 +#define SYS_waitid 247 +#define SYS_add_key 248 +#define SYS_request_key 249 +#define SYS_keyctl 250 +#define SYS_ioprio_set 251 +#define SYS_ioprio_get 252 +#define SYS_inotify_init 253 +#define SYS_inotify_add_watch 254 +#define SYS_inotify_rm_watch 255 +#define SYS_migrate_pages 256 +#define SYS_openat 257 +#define SYS_mkdirat 258 +#define SYS_mknodat 259 +#define SYS_fchownat 260 +#define SYS_futimesat 261 +#define SYS_newfstatat 262 +#define SYS_unlinkat 263 +#define SYS_renameat 264 +#define SYS_linkat 265 +#define SYS_symlinkat 266 +#define SYS_readlinkat 267 +#define SYS_fchmodat 268 +#define SYS_faccessat 269 +#define SYS_pselect6 270 +#define SYS_ppoll 271 +#define SYS_unshare 272 +#define SYS_set_robust_list 273 +#define SYS_get_robust_list 274 +#define SYS_splice 275 +#define SYS_tee 276 +#define SYS_sync_file_range 277 +#define SYS_vmsplice 278 +#define SYS_move_pages 279 +#define SYS_utimensat 280 +#define SYS_epoll_pwait 281 +#define SYS_signalfd 282 +#define SYS_timerfd_create 283 +#define SYS_eventfd 284 +#define SYS_fallocate 285 +#define SYS_timerfd_settime 286 +#define SYS_timerfd_gettime 287 +#define SYS_accept4 288 +#define SYS_signalfd4 289 +#define SYS_eventfd2 290 +#define SYS_epoll_create1 291 +#define SYS_dup3 292 +#define SYS_pipe2 293 +#define SYS_inotify_init1 294 +#define SYS_preadv 295 +#define SYS_pwritev 296 +#define SYS_rt_tgsigqueueinfo 297 +#define SYS_perf_event_open 298 +#define SYS_recvmmsg 299 +#define SYS_fanotify_init 300 +#define SYS_fanotify_mark 301 +#define SYS_prlimit64 302 +#define SYS_name_to_handle_at 303 +#define SYS_open_by_handle_at 304 +#define SYS_clock_adjtime 305 +#define SYS_syncfs 306 +#define SYS_sendmmsg 307 +#define SYS_setns 308 +#define SYS_getcpu 309 +#define SYS_process_vm_readv 310 +#define SYS_process_vm_writev 311 +#define SYS_kcmp 312 +#define SYS_finit_module 313 +#define SYS_sched_setattr 314 +#define SYS_sched_getattr 315 +#define SYS_renameat2 316 +#define SYS_seccomp 317 +#define SYS_getrandom 318 +#define SYS_memfd_create 319 +#define SYS_kexec_file_load 320 +#define SYS_bpf 321 +#define SYS_execveat 322 +#define SYS_userfaultfd 323 +#define SYS_membarrier 324 +#define SYS_mlock2 325 +#define SYS_copy_file_range 326 +#define SYS_preadv2 327 +#define SYS_pwritev2 328 +#define SYS_pkey_mprotect 329 +#define SYS_pkey_alloc 330 +#define SYS_pkey_free 331 +#define SYS_statx 332 +#define SYS_io_pgetevents 333 +#define SYS_rseq 334 +#define SYS_pidfd_send_signal 424 +#define SYS_io_uring_setup 425 +#define SYS_io_uring_enter 426 +#define SYS_io_uring_register 427 +#define SYS_open_tree 428 +#define SYS_move_mount 429 +#define SYS_fsopen 430 +#define SYS_fsconfig 431 +#define SYS_fsmount 432 +#define SYS_fspick 433 +#define SYS_pidfd_open 434 +#define SYS_clone3 435 +#define SYS_close_range 436 +#define SYS_openat2 437 +#define SYS_pidfd_getfd 438 +#define SYS_faccessat2 439 diff --git a/src/complex/__cexp.c b/src/complex/__cexp.c deleted file mode 100644 index 003d20a..0000000 --- a/src/complex/__cexp.c +++ /dev/null @@ -1,87 +0,0 @@ -/* origin: FreeBSD /usr/src/lib/msun/src/k_exp.c */ -/*- - * Copyright (c) 2011 David Schultz - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS 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 AUTHOR OR CONTRIBUTORS 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_impl.h" - -static const uint32_t k = 1799; /* constant for reduction */ -static const double kln2 = 1246.97177782734161156; /* k * ln2 */ - -/* - * Compute exp(x), scaled to avoid spurious overflow. An exponent is - * returned separately in 'expt'. - * - * Input: ln(DBL_MAX) <= x < ln(2 * DBL_MAX / DBL_MIN_DENORM) ~= 1454.91 - * Output: 2**1023 <= y < 2**1024 - */ -static double __frexp_exp(double x, int *expt) -{ - double exp_x; - uint32_t hx; - - /* - * We use exp(x) = exp(x - kln2) * 2**k, carefully chosen to - * minimize |exp(kln2) - 2**k|. We also scale the exponent of - * exp_x to MAX_EXP so that the result can be multiplied by - * a tiny number without losing accuracy due to denormalization. - */ - exp_x = exp(x - kln2); - GET_HIGH_WORD(hx, exp_x); - *expt = (hx >> 20) - (0x3ff + 1023) + k; - SET_HIGH_WORD(exp_x, (hx & 0xfffff) | ((0x3ff + 1023) << 20)); - return exp_x; -} - -/* - * __ldexp_cexp(x, expt) compute exp(x) * 2**expt. - * It is intended for large arguments (real part >= ln(DBL_MAX)) - * where care is needed to avoid overflow. - * - * The present implementation is narrowly tailored for our hyperbolic and - * exponential functions. We assume expt is small (0 or -1), and the caller - * has filtered out very large x, for which overflow would be inevitable. - */ -double complex __ldexp_cexp(double complex z, int expt) -{ - double x, y, exp_x, scale1, scale2; - int ex_expt, half_expt; - - x = creal(z); - y = cimag(z); - exp_x = __frexp_exp(x, &ex_expt); - expt += ex_expt; - - /* - * Arrange so that scale1 * scale2 == 2**expt. We use this to - * compensate for scalbn being horrendously slow. - */ - half_expt = expt / 2; - INSERT_WORDS(scale1, (0x3ff + half_expt) << 20, 0); - half_expt = expt - half_expt; - INSERT_WORDS(scale2, (0x3ff + half_expt) << 20, 0); - - return CMPLX(cos(y) * exp_x * scale1 * scale2, sin(y) * exp_x * scale1 * scale2); -} diff --git a/src/complex/__cexpf.c b/src/complex/__cexpf.c deleted file mode 100644 index ee5ff2b..0000000 --- a/src/complex/__cexpf.c +++ /dev/null @@ -1,68 +0,0 @@ -/* origin: FreeBSD /usr/src/lib/msun/src/k_expf.c */ -/*- - * Copyright (c) 2011 David Schultz - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS 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 AUTHOR OR CONTRIBUTORS 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_impl.h" - -static const uint32_t k = 235; /* constant for reduction */ -static const float kln2 = 162.88958740F; /* k * ln2 */ - -/* - * See __cexp.c for details. - * - * Input: ln(FLT_MAX) <= x < ln(2 * FLT_MAX / FLT_MIN_DENORM) ~= 192.7 - * Output: 2**127 <= y < 2**128 - */ -static float __frexp_expf(float x, int *expt) -{ - float exp_x; - uint32_t hx; - - exp_x = expf(x - kln2); - GET_FLOAT_WORD(hx, exp_x); - *expt = (hx >> 23) - (0x7f + 127) + k; - SET_FLOAT_WORD(exp_x, (hx & 0x7fffff) | ((0x7f + 127) << 23)); - return exp_x; -} - -float complex __ldexp_cexpf(float complex z, int expt) -{ - float x, y, exp_x, scale1, scale2; - int ex_expt, half_expt; - - x = crealf(z); - y = cimagf(z); - exp_x = __frexp_expf(x, &ex_expt); - expt += ex_expt; - - half_expt = expt / 2; - SET_FLOAT_WORD(scale1, (0x7f + half_expt) << 23); - half_expt = expt - half_expt; - SET_FLOAT_WORD(scale2, (0x7f + half_expt) << 23); - - return CMPLXF(cosf(y) * exp_x * scale1 * scale2, - sinf(y) * exp_x * scale1 * scale2); -} diff --git a/src/complex/cabs.c b/src/complex/cabs.c deleted file mode 100644 index c5ad58a..0000000 --- a/src/complex/cabs.c +++ /dev/null @@ -1,6 +0,0 @@ -#include "complex_impl.h" - -double cabs(double complex z) -{ - return hypot(creal(z), cimag(z)); -} diff --git a/src/complex/cabsf.c b/src/complex/cabsf.c deleted file mode 100644 index 619f28d..0000000 --- a/src/complex/cabsf.c +++ /dev/null @@ -1,6 +0,0 @@ -#include "complex_impl.h" - -float cabsf(float complex z) -{ - return hypotf(crealf(z), cimagf(z)); -} diff --git a/src/complex/cabsl.c b/src/complex/cabsl.c deleted file mode 100644 index d37e3f2..0000000 --- a/src/complex/cabsl.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "complex_impl.h" - -#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024 -long double cabsl(long double complex z) -{ - return cabs(z); -} -#else -long double cabsl(long double complex z) -{ - return hypotl(creall(z), cimagl(z)); -} -#endif diff --git a/src/complex/cacos.c b/src/complex/cacos.c deleted file mode 100644 index c39d257..0000000 --- a/src/complex/cacos.c +++ /dev/null @@ -1,11 +0,0 @@ -#include "complex_impl.h" - -// FIXME: Hull et al. "Implementing the complex arcsine and arccosine functions using exception handling" 1997 - -/* acos(z) = pi/2 - asin(z) */ - -double complex cacos(double complex z) -{ - z = casin(z); - return CMPLX(M_PI_2 - creal(z), -cimag(z)); -} diff --git a/src/complex/cacosf.c b/src/complex/cacosf.c deleted file mode 100644 index 2e04854..0000000 --- a/src/complex/cacosf.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "complex_impl.h" - -// FIXME - -float complex cacosf(float complex z) -{ - z = casinf(z); - return CMPLXF((float)M_PI_2 - crealf(z), -cimagf(z)); -} diff --git a/src/complex/cacosh.c b/src/complex/cacosh.c deleted file mode 100644 index 76127f7..0000000 --- a/src/complex/cacosh.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "complex_impl.h" - -/* acosh(z) = i acos(z) */ - -double complex cacosh(double complex z) -{ - int zineg = signbit(cimag(z)); - - z = cacos(z); - if (zineg) return CMPLX(cimag(z), -creal(z)); - else return CMPLX(-cimag(z), creal(z)); -} diff --git a/src/complex/cacoshf.c b/src/complex/cacoshf.c deleted file mode 100644 index 8bd8058..0000000 --- a/src/complex/cacoshf.c +++ /dev/null @@ -1,10 +0,0 @@ -#include "complex_impl.h" - -float complex cacoshf(float complex z) -{ - int zineg = signbit(cimagf(z)); - - z = cacosf(z); - if (zineg) return CMPLXF(cimagf(z), -crealf(z)); - else return CMPLXF(-cimagf(z), crealf(z)); -} diff --git a/src/complex/cacoshl.c b/src/complex/cacoshl.c deleted file mode 100644 index 3a284be..0000000 --- a/src/complex/cacoshl.c +++ /dev/null @@ -1,17 +0,0 @@ -#include "complex_impl.h" - -#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024 -long double complex cacoshl(long double complex z) -{ - return cacosh(z); -} -#else -long double complex cacoshl(long double complex z) -{ - int zineg = signbit(cimagl(z)); - - z = cacosl(z); - if (zineg) return CMPLXL(cimagl(z), -creall(z)); - else return CMPLXL(-cimagl(z), creall(z)); -} -#endif diff --git a/src/complex/cacosl.c b/src/complex/cacosl.c deleted file mode 100644 index cc20dcd..0000000 --- a/src/complex/cacosl.c +++ /dev/null @@ -1,16 +0,0 @@ -#include "complex_impl.h" - -#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024 -long double complex cacosl(long double complex z) -{ - return cacos(z); -} -#else -// FIXME -#define PI_2 1.57079632679489661923132169163975144L -long double complex cacosl(long double complex z) -{ - z = casinl(z); - return CMPLXL(PI_2 - creall(z), -cimagl(z)); -} -#endif diff --git a/src/complex/carg.c b/src/complex/carg.c deleted file mode 100644 index dfe9b97..0000000 --- a/src/complex/carg.c +++ /dev/null @@ -1,6 +0,0 @@ -#include "complex_impl.h" - -double carg(double complex z) -{ - return atan2(cimag(z), creal(z)); -} diff --git a/src/complex/cargf.c b/src/complex/cargf.c deleted file mode 100644 index 9a6c19b..0000000 --- a/src/complex/cargf.c +++ /dev/null @@ -1,6 +0,0 @@ -#include "complex_impl.h" - -float cargf(float complex z) -{ - return atan2f(cimagf(z), crealf(z)); -} diff --git a/src/complex/cargl.c b/src/complex/cargl.c deleted file mode 100644 index 88f95f9..0000000 --- a/src/complex/cargl.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "complex_impl.h" - -#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024 -long double cargl(long double complex z) -{ - return carg(z); -} -#else -long double cargl(long double complex z) -{ - return atan2l(cimagl(z), creall(z)); -} -#endif diff --git a/src/complex/casin.c b/src/complex/casin.c deleted file mode 100644 index 3244beb..0000000 --- a/src/complex/casin.c +++ /dev/null @@ -1,17 +0,0 @@ -#include "complex_impl.h" - -// FIXME - -/* asin(z) = -i log(i z + sqrt(1 - z*z)) */ - -double complex casin(double complex z) -{ - double complex w; - double x, y; - - x = creal(z); - y = cimag(z); - w = CMPLX(1.0 - (x - y)*(x + y), -2.0*x*y); - double complex r = clog(CMPLX(-y, x) + csqrt(w)); - return CMPLX(cimag(r), -creal(r)); -} diff --git a/src/complex/casinf.c b/src/complex/casinf.c deleted file mode 100644 index 2cda2f0..0000000 --- a/src/complex/casinf.c +++ /dev/null @@ -1,15 +0,0 @@ -#include "complex_impl.h" - -// FIXME - -float complex casinf(float complex z) -{ - float complex w; - float x, y; - - x = crealf(z); - y = cimagf(z); - w = CMPLXF(1.0 - (x - y)*(x + y), -2.0*x*y); - float complex r = clogf(CMPLXF(-y, x) + csqrtf(w)); - return CMPLXF(cimagf(r), -crealf(r)); -} diff --git a/src/complex/casinh.c b/src/complex/casinh.c deleted file mode 100644 index 50bf27c..0000000 --- a/src/complex/casinh.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "complex_impl.h" - -/* asinh(z) = -i asin(i z) */ - -double complex casinh(double complex z) -{ - z = casin(CMPLX(-cimag(z), creal(z))); - return CMPLX(cimag(z), -creal(z)); -} diff --git a/src/complex/casinhf.c b/src/complex/casinhf.c deleted file mode 100644 index 93d82e5..0000000 --- a/src/complex/casinhf.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "complex_impl.h" - -float complex casinhf(float complex z) -{ - z = casinf(CMPLXF(-cimagf(z), crealf(z))); - return CMPLXF(cimagf(z), -crealf(z)); -} diff --git a/src/complex/casinhl.c b/src/complex/casinhl.c deleted file mode 100644 index 68ba3dd..0000000 --- a/src/complex/casinhl.c +++ /dev/null @@ -1,14 +0,0 @@ -#include "complex_impl.h" - -#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024 -long double complex casinhl(long double complex z) -{ - return casinh(z); -} -#else -long double complex casinhl(long double complex z) -{ - z = casinl(CMPLXL(-cimagl(z), creall(z))); - return CMPLXL(cimagl(z), -creall(z)); -} -#endif diff --git a/src/complex/casinl.c b/src/complex/casinl.c deleted file mode 100644 index 072adc4..0000000 --- a/src/complex/casinl.c +++ /dev/null @@ -1,21 +0,0 @@ -#include "complex_impl.h" - -#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024 -long double complex casinl(long double complex z) -{ - return casin(z); -} -#else -// FIXME -long double complex casinl(long double complex z) -{ - long double complex w; - long double x, y; - - x = creall(z); - y = cimagl(z); - w = CMPLXL(1.0 - (x - y)*(x + y), -2.0*x*y); - long double complex r = clogl(CMPLXL(-y, x) + csqrtl(w)); - return CMPLXL(cimagl(r), -creall(r)); -} -#endif diff --git a/src/complex/catan.c b/src/complex/catan.c deleted file mode 100644 index ccc2fb5..0000000 --- a/src/complex/catan.c +++ /dev/null @@ -1,107 +0,0 @@ -/* origin: OpenBSD /usr/src/lib/libm/src/s_catan.c */ -/* - * Copyright (c) 2008 Stephen L. Moshier - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ -/* - * Complex circular arc tangent - * - * - * SYNOPSIS: - * - * double complex catan(); - * double complex z, w; - * - * w = catan (z); - * - * - * DESCRIPTION: - * - * If - * z = x + iy, - * - * then - * 1 ( 2x ) - * Re w = - arctan(-----------) + k PI - * 2 ( 2 2) - * (1 - x - y ) - * - * ( 2 2) - * 1 (x + (y+1) ) - * Im w = - log(------------) - * 4 ( 2 2) - * (x + (y-1) ) - * - * Where k is an arbitrary integer. - * - * catan(z) = -i catanh(iz). - * - * ACCURACY: - * - * Relative error: - * arithmetic domain # trials peak rms - * DEC -10,+10 5900 1.3e-16 7.8e-18 - * IEEE -10,+10 30000 2.3e-15 8.5e-17 - * The check catan( ctan(z) ) = z, with |x| and |y| < PI/2, - * had peak relative error 1.5e-16, rms relative error - * 2.9e-17. See also clog(). - */ - -#include "complex_impl.h" - -#define MAXNUM 1.0e308 - -static const double DP1 = 3.14159265160560607910E0; -static const double DP2 = 1.98418714791870343106E-9; -static const double DP3 = 1.14423774522196636802E-17; - -static double _redupi(double x) -{ - double t; - long i; - - t = x/M_PI; - if (t >= 0.0) - t += 0.5; - else - t -= 0.5; - - i = t; /* the multiple */ - t = i; - t = ((x - t * DP1) - t * DP2) - t * DP3; - return t; -} - -double complex catan(double complex z) -{ - double complex w; - double a, t, x, x2, y; - - x = creal(z); - y = cimag(z); - - x2 = x * x; - a = 1.0 - x2 - (y * y); - - t = 0.5 * atan2(2.0 * x, a); - w = _redupi(t); - - t = y - 1.0; - a = x2 + (t * t); - - t = y + 1.0; - a = (x2 + t * t)/a; - w = CMPLX(w, 0.25 * log(a)); - return w; -} diff --git a/src/complex/catanf.c b/src/complex/catanf.c deleted file mode 100644 index ef3907a..0000000 --- a/src/complex/catanf.c +++ /dev/null @@ -1,103 +0,0 @@ -/* origin: OpenBSD /usr/src/lib/libm/src/s_catanf.c */ -/* - * Copyright (c) 2008 Stephen L. Moshier - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ -/* - * Complex circular arc tangent - * - * - * SYNOPSIS: - * - * float complex catanf(); - * float complex z, w; - * - * w = catanf( z ); - * - * - * DESCRIPTION: - * - * If - * z = x + iy, - * - * then - * 1 ( 2x ) - * Re w = - arctan(-----------) + k PI - * 2 ( 2 2) - * (1 - x - y ) - * - * ( 2 2) - * 1 (x + (y+1) ) - * Im w = - log(------------) - * 4 ( 2 2) - * (x + (y-1) ) - * - * Where k is an arbitrary integer. - * - * - * ACCURACY: - * - * Relative error: - * arithmetic domain # trials peak rms - * IEEE -10,+10 30000 2.3e-6 5.2e-8 - */ - -#include "complex_impl.h" - -#define MAXNUMF 1.0e38F - -static const double DP1 = 3.140625; -static const double DP2 = 9.67502593994140625E-4; -static const double DP3 = 1.509957990978376432E-7; - -static float _redupif(float xx) -{ - float x, t; - long i; - - x = xx; - t = x/(float)M_PI; - if (t >= 0.0f) - t += 0.5f; - else - t -= 0.5f; - - i = t; /* the multiple */ - t = i; - t = ((x - t * DP1) - t * DP2) - t * DP3; - return t; -} - -float complex catanf(float complex z) -{ - float complex w; - float a, t, x, x2, y; - - x = crealf(z); - y = cimagf(z); - - x2 = x * x; - a = 1.0f - x2 - (y * y); - - t = 0.5f * atan2f(2.0f * x, a); - w = _redupif(t); - - t = y - 1.0f; - a = x2 + (t * t); - - t = y + 1.0f; - a = (x2 + (t * t))/a; - w = CMPLXF(w, 0.25f * logf(a)); - return w; -} diff --git a/src/complex/catanh.c b/src/complex/catanh.c deleted file mode 100644 index c324c7f..0000000 --- a/src/complex/catanh.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "complex_impl.h" - -/* atanh = -i atan(i z) */ - -double complex catanh(double complex z) -{ - z = catan(CMPLX(-cimag(z), creal(z))); - return CMPLX(cimag(z), -creal(z)); -} diff --git a/src/complex/catanhf.c b/src/complex/catanhf.c deleted file mode 100644 index b0505f6..0000000 --- a/src/complex/catanhf.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "complex_impl.h" - -float complex catanhf(float complex z) -{ - z = catanf(CMPLXF(-cimagf(z), crealf(z))); - return CMPLXF(cimagf(z), -crealf(z)); -} diff --git a/src/complex/catanhl.c b/src/complex/catanhl.c deleted file mode 100644 index 6025c41..0000000 --- a/src/complex/catanhl.c +++ /dev/null @@ -1,14 +0,0 @@ -#include "complex_impl.h" - -#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024 -long double complex catanhl(long double complex z) -{ - return catanh(z); -} -#else -long double complex catanhl(long double complex z) -{ - z = catanl(CMPLXL(-cimagl(z), creall(z))); - return CMPLXL(cimagl(z), -creall(z)); -} -#endif diff --git a/src/complex/catanl.c b/src/complex/catanl.c deleted file mode 100644 index e62526c..0000000 --- a/src/complex/catanl.c +++ /dev/null @@ -1,114 +0,0 @@ -/* origin: OpenBSD /usr/src/lib/libm/src/s_catanl.c */ -/* - * Copyright (c) 2008 Stephen L. Moshier - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ -/* - * Complex circular arc tangent - * - * - * SYNOPSIS: - * - * long double complex catanl(); - * long double complex z, w; - * - * w = catanl( z ); - * - * - * DESCRIPTION: - * - * If - * z = x + iy, - * - * then - * 1 ( 2x ) - * Re w = - arctan(-----------) + k PI - * 2 ( 2 2) - * (1 - x - y ) - * - * ( 2 2) - * 1 (x + (y+1) ) - * Im w = - log(------------) - * 4 ( 2 2) - * (x + (y-1) ) - * - * Where k is an arbitrary integer. - * - * - * ACCURACY: - * - * Relative error: - * arithmetic domain # trials peak rms - * DEC -10,+10 5900 1.3e-16 7.8e-18 - * IEEE -10,+10 30000 2.3e-15 8.5e-17 - * The check catan( ctan(z) ) = z, with |x| and |y| < PI/2, - * had peak relative error 1.5e-16, rms relative error - * 2.9e-17. See also clog(). - */ - -#include -#include -#include "complex_impl.h" - -#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024 -long double complex catanl(long double complex z) -{ - return catan(z); -} -#else -static const long double PIL = 3.141592653589793238462643383279502884197169L; -static const long double DP1 = 3.14159265358979323829596852490908531763125L; -static const long double DP2 = 1.6667485837041756656403424829301998703007e-19L; -static const long double DP3 = 1.8830410776607851167459095484560349402753e-39L; - -static long double redupil(long double x) -{ - long double t; - long i; - - t = x / PIL; - if (t >= 0.0L) - t += 0.5L; - else - t -= 0.5L; - - i = t; /* the multiple */ - t = i; - t = ((x - t * DP1) - t * DP2) - t * DP3; - return t; -} - -long double complex catanl(long double complex z) -{ - long double complex w; - long double a, t, x, x2, y; - - x = creall(z); - y = cimagl(z); - - x2 = x * x; - a = 1.0L - x2 - (y * y); - - t = atan2l(2.0L * x, a) * 0.5L; - w = redupil(t); - - t = y - 1.0L; - a = x2 + (t * t); - - t = y + 1.0L; - a = (x2 + (t * t)) / a; - w = CMPLXF(w, 0.25L * logl(a)); - return w; -} -#endif diff --git a/src/complex/ccos.c b/src/complex/ccos.c deleted file mode 100644 index f32e1fa..0000000 --- a/src/complex/ccos.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "complex_impl.h" - -/* cos(z) = cosh(i z) */ - -double complex ccos(double complex z) -{ - return ccosh(CMPLX(-cimag(z), creal(z))); -} diff --git a/src/complex/ccosf.c b/src/complex/ccosf.c deleted file mode 100644 index 490be9b..0000000 --- a/src/complex/ccosf.c +++ /dev/null @@ -1,6 +0,0 @@ -#include "complex_impl.h" - -float complex ccosf(float complex z) -{ - return ccoshf(CMPLXF(-cimagf(z), crealf(z))); -} diff --git a/src/complex/ccosh.c b/src/complex/ccosh.c deleted file mode 100644 index c995da7..0000000 --- a/src/complex/ccosh.c +++ /dev/null @@ -1,140 +0,0 @@ -/* origin: FreeBSD /usr/src/lib/msun/src/s_ccosh.c */ -/*- - * Copyright (c) 2005 Bruce D. Evans and Steven G. Kargl - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice unmodified, this list of conditions, and the following - * disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 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 AUTHOR 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. - */ -/* - * Hyperbolic cosine of a complex argument z = x + i y. - * - * cosh(z) = cosh(x+iy) - * = cosh(x) cos(y) + i sinh(x) sin(y). - * - * Exceptional values are noted in the comments within the source code. - * These values and the return value were taken from n1124.pdf. - */ - -#include "complex_impl.h" - -static const double huge = 0x1p1023; - -double complex ccosh(double complex z) -{ - double x, y, h; - int32_t hx, hy, ix, iy, lx, ly; - - x = creal(z); - y = cimag(z); - - EXTRACT_WORDS(hx, lx, x); - EXTRACT_WORDS(hy, ly, y); - - ix = 0x7fffffff & hx; - iy = 0x7fffffff & hy; - - /* Handle the nearly-non-exceptional cases where x and y are finite. */ - if (ix < 0x7ff00000 && iy < 0x7ff00000) { - if ((iy | ly) == 0) - return CMPLX(cosh(x), x * y); - if (ix < 0x40360000) /* small x: normal case */ - return CMPLX(cosh(x) * cos(y), sinh(x) * sin(y)); - - /* |x| >= 22, so cosh(x) ~= exp(|x|) */ - if (ix < 0x40862e42) { - /* x < 710: exp(|x|) won't overflow */ - h = exp(fabs(x)) * 0.5; - return CMPLX(h * cos(y), copysign(h, x) * sin(y)); - } else if (ix < 0x4096bbaa) { - /* x < 1455: scale to avoid overflow */ - z = __ldexp_cexp(CMPLX(fabs(x), y), -1); - return CMPLX(creal(z), cimag(z) * copysign(1, x)); - } else { - /* x >= 1455: the result always overflows */ - h = huge * x; - return CMPLX(h * h * cos(y), h * sin(y)); - } - } - - /* - * cosh(+-0 +- I Inf) = dNaN + I sign(d(+-0, dNaN))0. - * The sign of 0 in the result is unspecified. Choice = normally - * the same as dNaN. Raise the invalid floating-point exception. - * - * cosh(+-0 +- I NaN) = d(NaN) + I sign(d(+-0, NaN))0. - * The sign of 0 in the result is unspecified. Choice = normally - * the same as d(NaN). - */ - if ((ix | lx) == 0 && iy >= 0x7ff00000) - return CMPLX(y - y, copysign(0, x * (y - y))); - - /* - * cosh(+-Inf +- I 0) = +Inf + I (+-)(+-)0. - * - * cosh(NaN +- I 0) = d(NaN) + I sign(d(NaN, +-0))0. - * The sign of 0 in the result is unspecified. - */ - if ((iy | ly) == 0 && ix >= 0x7ff00000) { - if (((hx & 0xfffff) | lx) == 0) - return CMPLX(x * x, copysign(0, x) * y); - return CMPLX(x * x, copysign(0, (x + x) * y)); - } - - /* - * cosh(x +- I Inf) = dNaN + I dNaN. - * Raise the invalid floating-point exception for finite nonzero x. - * - * cosh(x + I NaN) = d(NaN) + I d(NaN). - * Optionally raises the invalid floating-point exception for finite - * nonzero x. Choice = don't raise (except for signaling NaNs). - */ - if (ix < 0x7ff00000 && iy >= 0x7ff00000) - return CMPLX(y - y, x * (y - y)); - - /* - * cosh(+-Inf + I NaN) = +Inf + I d(NaN). - * - * cosh(+-Inf +- I Inf) = +Inf + I dNaN. - * The sign of Inf in the result is unspecified. Choice = always +. - * Raise the invalid floating-point exception. - * - * cosh(+-Inf + I y) = +Inf cos(y) +- I Inf sin(y) - */ - if (ix >= 0x7ff00000 && ((hx & 0xfffff) | lx) == 0) { - if (iy >= 0x7ff00000) - return CMPLX(x * x, x * (y - y)); - return CMPLX((x * x) * cos(y), x * sin(y)); - } - - /* - * cosh(NaN + I NaN) = d(NaN) + I d(NaN). - * - * cosh(NaN +- I Inf) = d(NaN) + I d(NaN). - * Optionally raises the invalid floating-point exception. - * Choice = raise. - * - * cosh(NaN + I y) = d(NaN) + I d(NaN). - * Optionally raises the invalid floating-point exception for finite - * nonzero y. Choice = don't raise (except for signaling NaNs). - */ - return CMPLX((x * x) * (y - y), (x + x) * (y - y)); -} diff --git a/src/complex/ccoshf.c b/src/complex/ccoshf.c deleted file mode 100644 index 189ce94..0000000 --- a/src/complex/ccoshf.c +++ /dev/null @@ -1,90 +0,0 @@ -/* origin: FreeBSD /usr/src/lib/msun/src/s_ccoshf.c */ -/*- - * Copyright (c) 2005 Bruce D. Evans and Steven G. Kargl - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice unmodified, this list of conditions, and the following - * disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 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 AUTHOR 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. - */ -/* - * Hyperbolic cosine of a complex argument. See s_ccosh.c for details. - */ - -#include "complex_impl.h" - -static const float huge = 0x1p127; - -float complex ccoshf(float complex z) -{ - float x, y, h; - int32_t hx, hy, ix, iy; - - x = crealf(z); - y = cimagf(z); - - GET_FLOAT_WORD(hx, x); - GET_FLOAT_WORD(hy, y); - - ix = 0x7fffffff & hx; - iy = 0x7fffffff & hy; - - if (ix < 0x7f800000 && iy < 0x7f800000) { - if (iy == 0) - return CMPLXF(coshf(x), x * y); - if (ix < 0x41100000) /* small x: normal case */ - return CMPLXF(coshf(x) * cosf(y), sinhf(x) * sinf(y)); - - /* |x| >= 9, so cosh(x) ~= exp(|x|) */ - if (ix < 0x42b17218) { - /* x < 88.7: expf(|x|) won't overflow */ - h = expf(fabsf(x)) * 0.5f; - return CMPLXF(h * cosf(y), copysignf(h, x) * sinf(y)); - } else if (ix < 0x4340b1e7) { - /* x < 192.7: scale to avoid overflow */ - z = __ldexp_cexpf(CMPLXF(fabsf(x), y), -1); - return CMPLXF(crealf(z), cimagf(z) * copysignf(1, x)); - } else { - /* x >= 192.7: the result always overflows */ - h = huge * x; - return CMPLXF(h * h * cosf(y), h * sinf(y)); - } - } - - if (ix == 0 && iy >= 0x7f800000) - return CMPLXF(y - y, copysignf(0, x * (y - y))); - - if (iy == 0 && ix >= 0x7f800000) { - if ((hx & 0x7fffff) == 0) - return CMPLXF(x * x, copysignf(0, x) * y); - return CMPLXF(x * x, copysignf(0, (x + x) * y)); - } - - if (ix < 0x7f800000 && iy >= 0x7f800000) - return CMPLXF(y - y, x * (y - y)); - - if (ix >= 0x7f800000 && (hx & 0x7fffff) == 0) { - if (iy >= 0x7f800000) - return CMPLXF(x * x, x * (y - y)); - return CMPLXF((x * x) * cosf(y), x * sinf(y)); - } - - return CMPLXF((x * x) * (y - y), (x + x) * (y - y)); -} diff --git a/src/complex/ccoshl.c b/src/complex/ccoshl.c deleted file mode 100644 index ffb4d8a..0000000 --- a/src/complex/ccoshl.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "complex_impl.h" - -//FIXME -long double complex ccoshl(long double complex z) -{ - return ccosh(z); -} diff --git a/src/complex/ccosl.c b/src/complex/ccosl.c deleted file mode 100644 index 2530006..0000000 --- a/src/complex/ccosl.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "complex_impl.h" - -#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024 -long double complex ccosl(long double complex z) -{ - return ccos(z); -} -#else -long double complex ccosl(long double complex z) -{ - return ccoshl(CMPLXL(-cimagl(z), creall(z))); -} -#endif diff --git a/src/complex/cexp.c b/src/complex/cexp.c deleted file mode 100644 index 7fb489b..0000000 --- a/src/complex/cexp.c +++ /dev/null @@ -1,83 +0,0 @@ -/* origin: FreeBSD /usr/src/lib/msun/src/s_cexp.c */ -/*- - * Copyright (c) 2011 David Schultz - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS 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 AUTHOR OR CONTRIBUTORS 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_impl.h" - -static const uint32_t -exp_ovfl = 0x40862e42, /* high bits of MAX_EXP * ln2 ~= 710 */ -cexp_ovfl = 0x4096b8e4; /* (MAX_EXP - MIN_DENORM_EXP) * ln2 */ - -double complex cexp(double complex z) -{ - double x, y, exp_x; - uint32_t hx, hy, lx, ly; - - x = creal(z); - y = cimag(z); - - EXTRACT_WORDS(hy, ly, y); - hy &= 0x7fffffff; - - /* cexp(x + I 0) = exp(x) + I 0 */ - if ((hy | ly) == 0) - return CMPLX(exp(x), y); - EXTRACT_WORDS(hx, lx, x); - /* cexp(0 + I y) = cos(y) + I sin(y) */ - if (((hx & 0x7fffffff) | lx) == 0) - return CMPLX(cos(y), sin(y)); - - if (hy >= 0x7ff00000) { - if (lx != 0 || (hx & 0x7fffffff) != 0x7ff00000) { - /* cexp(finite|NaN +- I Inf|NaN) = NaN + I NaN */ - return CMPLX(y - y, y - y); - } else if (hx & 0x80000000) { - /* cexp(-Inf +- I Inf|NaN) = 0 + I 0 */ - return CMPLX(0.0, 0.0); - } else { - /* cexp(+Inf +- I Inf|NaN) = Inf + I NaN */ - return CMPLX(x, y - y); - } - } - - if (hx >= exp_ovfl && hx <= cexp_ovfl) { - /* - * x is between 709.7 and 1454.3, so we must scale to avoid - * overflow in exp(x). - */ - return __ldexp_cexp(z, 0); - } else { - /* - * Cases covered here: - * - x < exp_ovfl and exp(x) won't overflow (common case) - * - x > cexp_ovfl, so exp(x) * s overflows for all s > 0 - * - x = +-Inf (generated by exp()) - * - x = NaN (spurious inexact exception from y) - */ - exp_x = exp(x); - return CMPLX(exp_x * cos(y), exp_x * sin(y)); - } -} diff --git a/src/complex/cexpf.c b/src/complex/cexpf.c deleted file mode 100644 index 00d258f..0000000 --- a/src/complex/cexpf.c +++ /dev/null @@ -1,83 +0,0 @@ -/* origin: FreeBSD /usr/src/lib/msun/src/s_cexpf.c */ -/*- - * Copyright (c) 2011 David Schultz - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS 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 AUTHOR OR CONTRIBUTORS 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_impl.h" - -static const uint32_t -exp_ovfl = 0x42b17218, /* MAX_EXP * ln2 ~= 88.722839355 */ -cexp_ovfl = 0x43400074; /* (MAX_EXP - MIN_DENORM_EXP) * ln2 */ - -float complex cexpf(float complex z) -{ - float x, y, exp_x; - uint32_t hx, hy; - - x = crealf(z); - y = cimagf(z); - - GET_FLOAT_WORD(hy, y); - hy &= 0x7fffffff; - - /* cexp(x + I 0) = exp(x) + I 0 */ - if (hy == 0) - return CMPLXF(expf(x), y); - GET_FLOAT_WORD(hx, x); - /* cexp(0 + I y) = cos(y) + I sin(y) */ - if ((hx & 0x7fffffff) == 0) - return CMPLXF(cosf(y), sinf(y)); - - if (hy >= 0x7f800000) { - if ((hx & 0x7fffffff) != 0x7f800000) { - /* cexp(finite|NaN +- I Inf|NaN) = NaN + I NaN */ - return CMPLXF(y - y, y - y); - } else if (hx & 0x80000000) { - /* cexp(-Inf +- I Inf|NaN) = 0 + I 0 */ - return CMPLXF(0.0, 0.0); - } else { - /* cexp(+Inf +- I Inf|NaN) = Inf + I NaN */ - return CMPLXF(x, y - y); - } - } - - if (hx >= exp_ovfl && hx <= cexp_ovfl) { - /* - * x is between 88.7 and 192, so we must scale to avoid - * overflow in expf(x). - */ - return __ldexp_cexpf(z, 0); - } else { - /* - * Cases covered here: - * - x < exp_ovfl and exp(x) won't overflow (common case) - * - x > cexp_ovfl, so exp(x) * s overflows for all s > 0 - * - x = +-Inf (generated by exp()) - * - x = NaN (spurious inexact exception from y) - */ - exp_x = expf(x); - return CMPLXF(exp_x * cosf(y), exp_x * sinf(y)); - } -} diff --git a/src/complex/cexpl.c b/src/complex/cexpl.c deleted file mode 100644 index d4df950..0000000 --- a/src/complex/cexpl.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "complex_impl.h" - -//FIXME -long double complex cexpl(long double complex z) -{ - return cexp(z); -} diff --git a/src/complex/cimag.c b/src/complex/cimag.c deleted file mode 100644 index d6b0e68..0000000 --- a/src/complex/cimag.c +++ /dev/null @@ -1,6 +0,0 @@ -#include "complex_impl.h" - -double (cimag)(double complex z) -{ - return cimag(z); -} diff --git a/src/complex/cimagf.c b/src/complex/cimagf.c deleted file mode 100644 index b7166dc..0000000 --- a/src/complex/cimagf.c +++ /dev/null @@ -1,6 +0,0 @@ -#include "complex_impl.h" - -float (cimagf)(float complex z) -{ - return cimagf(z); -} diff --git a/src/complex/cimagl.c b/src/complex/cimagl.c deleted file mode 100644 index 4db77f2..0000000 --- a/src/complex/cimagl.c +++ /dev/null @@ -1,6 +0,0 @@ -#include "complex_impl.h" - -long double (cimagl)(long double complex z) -{ - return cimagl(z); -} diff --git a/src/complex/clog.c b/src/complex/clog.c deleted file mode 100644 index b587c29..0000000 --- a/src/complex/clog.c +++ /dev/null @@ -1,14 +0,0 @@ -#include "complex_impl.h" - -// FIXME - -/* log(z) = log(|z|) + i arg(z) */ - -double complex clog(double complex z) -{ - double r, phi; - - r = cabs(z); - phi = carg(z); - return CMPLX(log(r), phi); -} diff --git a/src/complex/clogf.c b/src/complex/clogf.c deleted file mode 100644 index 0389d47..0000000 --- a/src/complex/clogf.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "complex_impl.h" - -// FIXME - -float complex clogf(float complex z) -{ - float r, phi; - - r = cabsf(z); - phi = cargf(z); - return CMPLXF(logf(r), phi); -} diff --git a/src/complex/clogl.c b/src/complex/clogl.c deleted file mode 100644 index 88e83e8..0000000 --- a/src/complex/clogl.c +++ /dev/null @@ -1,18 +0,0 @@ -#include "complex_impl.h" - -#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024 -long double complex clogl(long double complex z) -{ - return clog(z); -} -#else -// FIXME -long double complex clogl(long double complex z) -{ - long double r, phi; - - r = cabsl(z); - phi = cargl(z); - return CMPLXL(logl(r), phi); -} -#endif diff --git a/src/complex/conj.c b/src/complex/conj.c deleted file mode 100644 index a3b19a4..0000000 --- a/src/complex/conj.c +++ /dev/null @@ -1,6 +0,0 @@ -#include "complex_impl.h" - -double complex conj(double complex z) -{ - return CMPLX(creal(z), -cimag(z)); -} diff --git a/src/complex/conjf.c b/src/complex/conjf.c deleted file mode 100644 index b2195c8..0000000 --- a/src/complex/conjf.c +++ /dev/null @@ -1,6 +0,0 @@ -#include "complex_impl.h" - -float complex conjf(float complex z) -{ - return CMPLXF(crealf(z), -cimagf(z)); -} diff --git a/src/complex/conjl.c b/src/complex/conjl.c deleted file mode 100644 index 87a4ebe..0000000 --- a/src/complex/conjl.c +++ /dev/null @@ -1,6 +0,0 @@ -#include "complex_impl.h" - -long double complex conjl(long double complex z) -{ - return CMPLXL(creall(z), -cimagl(z)); -} diff --git a/src/complex/cpow.c b/src/complex/cpow.c deleted file mode 100644 index 1137d39..0000000 --- a/src/complex/cpow.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "complex_impl.h" - -/* pow(z, c) = exp(c log(z)), See C99 G.6.4.1 */ - -double complex cpow(double complex z, double complex c) -{ - return cexp(c * clog(z)); -} diff --git a/src/complex/cpowf.c b/src/complex/cpowf.c deleted file mode 100644 index f3fd4b7..0000000 --- a/src/complex/cpowf.c +++ /dev/null @@ -1,6 +0,0 @@ -#include "complex_impl.h" - -float complex cpowf(float complex z, float complex c) -{ - return cexpf(c * clogf(z)); -} diff --git a/src/complex/cpowl.c b/src/complex/cpowl.c deleted file mode 100644 index be36f04..0000000 --- a/src/complex/cpowl.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "complex_impl.h" - -#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024 -long double complex cpowl(long double complex z, long double complex c) -{ - return cpow(z, c); -} -#else -long double complex cpowl(long double complex z, long double complex c) -{ - return cexpl(c * clogl(z)); -} -#endif diff --git a/src/complex/cproj.c b/src/complex/cproj.c deleted file mode 100644 index 9ae1e17..0000000 --- a/src/complex/cproj.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "complex_impl.h" - -double complex cproj(double complex z) -{ - if (isinf(creal(z)) || isinf(cimag(z))) - return CMPLX(INFINITY, copysign(0.0, creal(z))); - return z; -} diff --git a/src/complex/cprojf.c b/src/complex/cprojf.c deleted file mode 100644 index 03fab33..0000000 --- a/src/complex/cprojf.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "complex_impl.h" - -float complex cprojf(float complex z) -{ - if (isinf(crealf(z)) || isinf(cimagf(z))) - return CMPLXF(INFINITY, copysignf(0.0, crealf(z))); - return z; -} diff --git a/src/complex/cprojl.c b/src/complex/cprojl.c deleted file mode 100644 index 38a494c..0000000 --- a/src/complex/cprojl.c +++ /dev/null @@ -1,15 +0,0 @@ -#include "complex_impl.h" - -#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024 -long double complex cprojl(long double complex z) -{ - return cproj(z); -} -#else -long double complex cprojl(long double complex z) -{ - if (isinf(creall(z)) || isinf(cimagl(z))) - return CMPLXL(INFINITY, copysignl(0.0, creall(z))); - return z; -} -#endif diff --git a/src/complex/creal.c b/src/complex/creal.c deleted file mode 100644 index f670304..0000000 --- a/src/complex/creal.c +++ /dev/null @@ -1,6 +0,0 @@ -#include - -double (creal)(double complex z) -{ - return creal(z); -} diff --git a/src/complex/crealf.c b/src/complex/crealf.c deleted file mode 100644 index 5dc3ff1..0000000 --- a/src/complex/crealf.c +++ /dev/null @@ -1,6 +0,0 @@ -#include - -float (crealf)(float complex z) -{ - return crealf(z); -} diff --git a/src/complex/creall.c b/src/complex/creall.c deleted file mode 100644 index fd9dc34..0000000 --- a/src/complex/creall.c +++ /dev/null @@ -1,6 +0,0 @@ -#include - -long double (creall)(long double complex z) -{ - return creall(z); -} diff --git a/src/complex/csin.c b/src/complex/csin.c deleted file mode 100644 index 535c4bf..0000000 --- a/src/complex/csin.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "complex_impl.h" - -/* sin(z) = -i sinh(i z) */ - -double complex csin(double complex z) -{ - z = csinh(CMPLX(-cimag(z), creal(z))); - return CMPLX(cimag(z), -creal(z)); -} diff --git a/src/complex/csinf.c b/src/complex/csinf.c deleted file mode 100644 index 69f5164..0000000 --- a/src/complex/csinf.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "complex_impl.h" - -float complex csinf(float complex z) -{ - z = csinhf(CMPLXF(-cimagf(z), crealf(z))); - return CMPLXF(cimagf(z), -crealf(z)); -} diff --git a/src/complex/csinh.c b/src/complex/csinh.c deleted file mode 100644 index eda0ab5..0000000 --- a/src/complex/csinh.c +++ /dev/null @@ -1,141 +0,0 @@ -/* origin: FreeBSD /usr/src/lib/msun/src/s_csinh.c */ -/*- - * Copyright (c) 2005 Bruce D. Evans and Steven G. Kargl - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice unmodified, this list of conditions, and the following - * disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 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 AUTHOR 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. - */ -/* - * Hyperbolic sine of a complex argument z = x + i y. - * - * sinh(z) = sinh(x+iy) - * = sinh(x) cos(y) + i cosh(x) sin(y). - * - * Exceptional values are noted in the comments within the source code. - * These values and the return value were taken from n1124.pdf. - */ - -#include "complex_impl.h" - -static const double huge = 0x1p1023; - -double complex csinh(double complex z) -{ - double x, y, h; - int32_t hx, hy, ix, iy, lx, ly; - - x = creal(z); - y = cimag(z); - - EXTRACT_WORDS(hx, lx, x); - EXTRACT_WORDS(hy, ly, y); - - ix = 0x7fffffff & hx; - iy = 0x7fffffff & hy; - - /* Handle the nearly-non-exceptional cases where x and y are finite. */ - if (ix < 0x7ff00000 && iy < 0x7ff00000) { - if ((iy | ly) == 0) - return CMPLX(sinh(x), y); - if (ix < 0x40360000) /* small x: normal case */ - return CMPLX(sinh(x) * cos(y), cosh(x) * sin(y)); - - /* |x| >= 22, so cosh(x) ~= exp(|x|) */ - if (ix < 0x40862e42) { - /* x < 710: exp(|x|) won't overflow */ - h = exp(fabs(x)) * 0.5; - return CMPLX(copysign(h, x) * cos(y), h * sin(y)); - } else if (ix < 0x4096bbaa) { - /* x < 1455: scale to avoid overflow */ - z = __ldexp_cexp(CMPLX(fabs(x), y), -1); - return CMPLX(creal(z) * copysign(1, x), cimag(z)); - } else { - /* x >= 1455: the result always overflows */ - h = huge * x; - return CMPLX(h * cos(y), h * h * sin(y)); - } - } - - /* - * sinh(+-0 +- I Inf) = sign(d(+-0, dNaN))0 + I dNaN. - * The sign of 0 in the result is unspecified. Choice = normally - * the same as dNaN. Raise the invalid floating-point exception. - * - * sinh(+-0 +- I NaN) = sign(d(+-0, NaN))0 + I d(NaN). - * The sign of 0 in the result is unspecified. Choice = normally - * the same as d(NaN). - */ - if ((ix | lx) == 0 && iy >= 0x7ff00000) - return CMPLX(copysign(0, x * (y - y)), y - y); - - /* - * sinh(+-Inf +- I 0) = +-Inf + I +-0. - * - * sinh(NaN +- I 0) = d(NaN) + I +-0. - */ - if ((iy | ly) == 0 && ix >= 0x7ff00000) { - if (((hx & 0xfffff) | lx) == 0) - return CMPLX(x, y); - return CMPLX(x, copysign(0, y)); - } - - /* - * sinh(x +- I Inf) = dNaN + I dNaN. - * Raise the invalid floating-point exception for finite nonzero x. - * - * sinh(x + I NaN) = d(NaN) + I d(NaN). - * Optionally raises the invalid floating-point exception for finite - * nonzero x. Choice = don't raise (except for signaling NaNs). - */ - if (ix < 0x7ff00000 && iy >= 0x7ff00000) - return CMPLX(y - y, x * (y - y)); - - /* - * sinh(+-Inf + I NaN) = +-Inf + I d(NaN). - * The sign of Inf in the result is unspecified. Choice = normally - * the same as d(NaN). - * - * sinh(+-Inf +- I Inf) = +Inf + I dNaN. - * The sign of Inf in the result is unspecified. Choice = always +. - * Raise the invalid floating-point exception. - * - * sinh(+-Inf + I y) = +-Inf cos(y) + I Inf sin(y) - */ - if (ix >= 0x7ff00000 && ((hx & 0xfffff) | lx) == 0) { - if (iy >= 0x7ff00000) - return CMPLX(x * x, x * (y - y)); - return CMPLX(x * cos(y), INFINITY * sin(y)); - } - - /* - * sinh(NaN + I NaN) = d(NaN) + I d(NaN). - * - * sinh(NaN +- I Inf) = d(NaN) + I d(NaN). - * Optionally raises the invalid floating-point exception. - * Choice = raise. - * - * sinh(NaN + I y) = d(NaN) + I d(NaN). - * Optionally raises the invalid floating-point exception for finite - * nonzero y. Choice = don't raise (except for signaling NaNs). - */ - return CMPLX((x * x) * (y - y), (x + x) * (y - y)); -} diff --git a/src/complex/csinhf.c b/src/complex/csinhf.c deleted file mode 100644 index eb1d98c..0000000 --- a/src/complex/csinhf.c +++ /dev/null @@ -1,90 +0,0 @@ -/* origin: FreeBSD /usr/src/lib/msun/src/s_csinhf.c */ -/*- - * Copyright (c) 2005 Bruce D. Evans and Steven G. Kargl - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice unmodified, this list of conditions, and the following - * disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 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 AUTHOR 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. - */ -/* - * Hyperbolic sine of a complex argument z. See s_csinh.c for details. - */ - -#include "complex_impl.h" - -static const float huge = 0x1p127; - -float complex csinhf(float complex z) -{ - float x, y, h; - int32_t hx, hy, ix, iy; - - x = crealf(z); - y = cimagf(z); - - GET_FLOAT_WORD(hx, x); - GET_FLOAT_WORD(hy, y); - - ix = 0x7fffffff & hx; - iy = 0x7fffffff & hy; - - if (ix < 0x7f800000 && iy < 0x7f800000) { - if (iy == 0) - return CMPLXF(sinhf(x), y); - if (ix < 0x41100000) /* small x: normal case */ - return CMPLXF(sinhf(x) * cosf(y), coshf(x) * sinf(y)); - - /* |x| >= 9, so cosh(x) ~= exp(|x|) */ - if (ix < 0x42b17218) { - /* x < 88.7: expf(|x|) won't overflow */ - h = expf(fabsf(x)) * 0.5f; - return CMPLXF(copysignf(h, x) * cosf(y), h * sinf(y)); - } else if (ix < 0x4340b1e7) { - /* x < 192.7: scale to avoid overflow */ - z = __ldexp_cexpf(CMPLXF(fabsf(x), y), -1); - return CMPLXF(crealf(z) * copysignf(1, x), cimagf(z)); - } else { - /* x >= 192.7: the result always overflows */ - h = huge * x; - return CMPLXF(h * cosf(y), h * h * sinf(y)); - } - } - - if (ix == 0 && iy >= 0x7f800000) - return CMPLXF(copysignf(0, x * (y - y)), y - y); - - if (iy == 0 && ix >= 0x7f800000) { - if ((hx & 0x7fffff) == 0) - return CMPLXF(x, y); - return CMPLXF(x, copysignf(0, y)); - } - - if (ix < 0x7f800000 && iy >= 0x7f800000) - return CMPLXF(y - y, x * (y - y)); - - if (ix >= 0x7f800000 && (hx & 0x7fffff) == 0) { - if (iy >= 0x7f800000) - return CMPLXF(x * x, x * (y - y)); - return CMPLXF(x * cosf(y), INFINITY * sinf(y)); - } - - return CMPLXF((x * x) * (y - y), (x + x) * (y - y)); -} diff --git a/src/complex/csinhl.c b/src/complex/csinhl.c deleted file mode 100644 index 09fd18f..0000000 --- a/src/complex/csinhl.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "complex_impl.h" - -//FIXME -long double complex csinhl(long double complex z) -{ - return csinh(z); -} diff --git a/src/complex/csinl.c b/src/complex/csinl.c deleted file mode 100644 index 90a4eb3..0000000 --- a/src/complex/csinl.c +++ /dev/null @@ -1,14 +0,0 @@ -#include "complex_impl.h" - -#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024 -long double complex csinl(long double complex z) -{ - return csin(z); -} -#else -long double complex csinl(long double complex z) -{ - z = csinhl(CMPLXL(-cimagl(z), creall(z))); - return CMPLXL(cimagl(z), -creall(z)); -} -#endif diff --git a/src/complex/csqrt.c b/src/complex/csqrt.c deleted file mode 100644 index c36de00..0000000 --- a/src/complex/csqrt.c +++ /dev/null @@ -1,100 +0,0 @@ -/* origin: FreeBSD /usr/src/lib/msun/src/s_csqrt.c */ -/*- - * Copyright (c) 2007 David Schultz - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS 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 AUTHOR OR CONTRIBUTORS 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_impl.h" - -/* - * gcc doesn't implement complex multiplication or division correctly, - * so we need to handle infinities specially. We turn on this pragma to - * notify conforming c99 compilers that the fast-but-incorrect code that - * gcc generates is acceptable, since the special cases have already been - * handled. - */ -#pragma STDC CX_LIMITED_RANGE ON - -/* We risk spurious overflow for components >= DBL_MAX / (1 + sqrt(2)). */ -#define THRESH 0x1.a827999fcef32p+1022 - -double complex csqrt(double complex z) -{ - double complex result; - double a, b; - double t; - int scale; - - a = creal(z); - b = cimag(z); - - /* Handle special cases. */ - if (z == 0) - return CMPLX(0, b); - if (isinf(b)) - return CMPLX(INFINITY, b); - if (isnan(a)) { - t = (b - b) / (b - b); /* raise invalid if b is not a NaN */ - return CMPLX(a, t); /* return NaN + NaN i */ - } - if (isinf(a)) { - /* - * csqrt(inf + NaN i) = inf + NaN i - * csqrt(inf + y i) = inf + 0 i - * csqrt(-inf + NaN i) = NaN +- inf i - * csqrt(-inf + y i) = 0 + inf i - */ - if (signbit(a)) - return CMPLX(fabs(b - b), copysign(a, b)); - else - return CMPLX(a, copysign(b - b, b)); - } - /* - * The remaining special case (b is NaN) is handled just fine by - * the normal code path below. - */ - - /* Scale to avoid overflow. */ - if (fabs(a) >= THRESH || fabs(b) >= THRESH) { - a *= 0.25; - b *= 0.25; - scale = 1; - } else { - scale = 0; - } - - /* Algorithm 312, CACM vol 10, Oct 1967. */ - if (a >= 0) { - t = sqrt((a + hypot(a, b)) * 0.5); - result = CMPLX(t, b / (2 * t)); - } else { - t = sqrt((-a + hypot(a, b)) * 0.5); - result = CMPLX(fabs(b) / (2 * t), copysign(t, b)); - } - - /* Rescale. */ - if (scale) - result *= 2; - return result; -} diff --git a/src/complex/csqrtf.c b/src/complex/csqrtf.c deleted file mode 100644 index a616397..0000000 --- a/src/complex/csqrtf.c +++ /dev/null @@ -1,82 +0,0 @@ -/* origin: FreeBSD /usr/src/lib/msun/src/s_csqrtf.c */ -/*- - * Copyright (c) 2007 David Schultz - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS 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 AUTHOR OR CONTRIBUTORS 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_impl.h" - -/* - * gcc doesn't implement complex multiplication or division correctly, - * so we need to handle infinities specially. We turn on this pragma to - * notify conforming c99 compilers that the fast-but-incorrect code that - * gcc generates is acceptable, since the special cases have already been - * handled. - */ -#pragma STDC CX_LIMITED_RANGE ON - -float complex csqrtf(float complex z) -{ - float a = crealf(z), b = cimagf(z); - double t; - - /* Handle special cases. */ - if (z == 0) - return CMPLXF(0, b); - if (isinf(b)) - return CMPLXF(INFINITY, b); - if (isnan(a)) { - t = (b - b) / (b - b); /* raise invalid if b is not a NaN */ - return CMPLXF(a, t); /* return NaN + NaN i */ - } - if (isinf(a)) { - /* - * csqrtf(inf + NaN i) = inf + NaN i - * csqrtf(inf + y i) = inf + 0 i - * csqrtf(-inf + NaN i) = NaN +- inf i - * csqrtf(-inf + y i) = 0 + inf i - */ - if (signbit(a)) - return CMPLXF(fabsf(b - b), copysignf(a, b)); - else - return CMPLXF(a, copysignf(b - b, b)); - } - /* - * The remaining special case (b is NaN) is handled just fine by - * the normal code path below. - */ - - /* - * We compute t in double precision to avoid overflow and to - * provide correct rounding in nearly all cases. - * This is Algorithm 312, CACM vol 10, Oct 1967. - */ - if (a >= 0) { - t = sqrt((a + hypot(a, b)) * 0.5); - return CMPLXF(t, b / (2.0 * t)); - } else { - t = sqrt((-a + hypot(a, b)) * 0.5); - return CMPLXF(fabsf(b) / (2.0 * t), copysignf(t, b)); - } -} diff --git a/src/complex/csqrtl.c b/src/complex/csqrtl.c deleted file mode 100644 index 2253937..0000000 --- a/src/complex/csqrtl.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "complex_impl.h" - -//FIXME -long double complex csqrtl(long double complex z) -{ - return csqrt(z); -} diff --git a/src/complex/ctan.c b/src/complex/ctan.c deleted file mode 100644 index 918717b..0000000 --- a/src/complex/ctan.c +++ /dev/null @@ -1,9 +0,0 @@ -#include "complex_impl.h" - -/* tan(z) = -i tanh(i z) */ - -double complex ctan(double complex z) -{ - z = ctanh(CMPLX(-cimag(z), creal(z))); - return CMPLX(cimag(z), -creal(z)); -} diff --git a/src/complex/ctanf.c b/src/complex/ctanf.c deleted file mode 100644 index 04c3ff1..0000000 --- a/src/complex/ctanf.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "complex_impl.h" - -float complex ctanf(float complex z) -{ - z = ctanhf(CMPLXF(-cimagf(z), crealf(z))); - return CMPLXF(cimagf(z), -crealf(z)); -} diff --git a/src/complex/ctanh.c b/src/complex/ctanh.c deleted file mode 100644 index 54004cd..0000000 --- a/src/complex/ctanh.c +++ /dev/null @@ -1,129 +0,0 @@ -/* origin: FreeBSD /usr/src/lib/msun/src/s_ctanh.c */ -/*- - * Copyright (c) 2011 David Schultz - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice unmodified, this list of conditions, and the following - * disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 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 AUTHOR 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. - */ -/* - * Hyperbolic tangent of a complex argument z = x + i y. - * - * The algorithm is from: - * - * W. Kahan. Branch Cuts for Complex Elementary Functions or Much - * Ado About Nothing's Sign Bit. In The State of the Art in - * Numerical Analysis, pp. 165 ff. Iserles and Powell, eds., 1987. - * - * Method: - * - * Let t = tan(x) - * beta = 1/cos^2(y) - * s = sinh(x) - * rho = cosh(x) - * - * We have: - * - * tanh(z) = sinh(z) / cosh(z) - * - * sinh(x) cos(y) + i cosh(x) sin(y) - * = --------------------------------- - * cosh(x) cos(y) + i sinh(x) sin(y) - * - * cosh(x) sinh(x) / cos^2(y) + i tan(y) - * = ------------------------------------- - * 1 + sinh^2(x) / cos^2(y) - * - * beta rho s + i t - * = ---------------- - * 1 + beta s^2 - * - * Modifications: - * - * I omitted the original algorithm's handling of overflow in tan(x) after - * verifying with nearpi.c that this can't happen in IEEE single or double - * precision. I also handle large x differently. - */ - -#include "complex_impl.h" - -double complex ctanh(double complex z) -{ - double x, y; - double t, beta, s, rho, denom; - uint32_t hx, ix, lx; - - x = creal(z); - y = cimag(z); - - EXTRACT_WORDS(hx, lx, x); - ix = hx & 0x7fffffff; - - /* - * ctanh(NaN + i 0) = NaN + i 0 - * - * ctanh(NaN + i y) = NaN + i NaN for y != 0 - * - * The imaginary part has the sign of x*sin(2*y), but there's no - * special effort to get this right. - * - * ctanh(+-Inf +- i Inf) = +-1 +- 0 - * - * ctanh(+-Inf + i y) = +-1 + 0 sin(2y) for y finite - * - * The imaginary part of the sign is unspecified. This special - * case is only needed to avoid a spurious invalid exception when - * y is infinite. - */ - if (ix >= 0x7ff00000) { - if ((ix & 0xfffff) | lx) /* x is NaN */ - return CMPLX(x, (y == 0 ? y : x * y)); - SET_HIGH_WORD(x, hx - 0x40000000); /* x = copysign(1, x) */ - return CMPLX(x, copysign(0, isinf(y) ? y : sin(y) * cos(y))); - } - - /* - * ctanh(+-0 + i NAN) = +-0 + i NaN - * ctanh(+-0 +- i Inf) = +-0 + i NaN - * ctanh(x + i NAN) = NaN + i NaN - * ctanh(x +- i Inf) = NaN + i NaN - */ - if (!isfinite(y)) - return CMPLX(x ? y - y : x, y - y); - - /* - * ctanh(+-huge + i +-y) ~= +-1 +- i 2sin(2y)/exp(2x), using the - * approximation sinh^2(huge) ~= exp(2*huge) / 4. - * We use a modified formula to avoid spurious overflow. - */ - if (ix >= 0x40360000) { /* x >= 22 */ - double exp_mx = exp(-fabs(x)); - return CMPLX(copysign(1, x), 4 * sin(y) * cos(y) * exp_mx * exp_mx); - } - - /* Kahan's algorithm */ - t = tan(y); - beta = 1.0 + t * t; /* = 1 / cos^2(y) */ - s = sinh(x); - rho = sqrt(1 + s * s); /* = cosh(x) */ - denom = 1 + beta * s * s; - return CMPLX((beta * rho * s) / denom, t / denom); -} diff --git a/src/complex/ctanhf.c b/src/complex/ctanhf.c deleted file mode 100644 index 7f422ba..0000000 --- a/src/complex/ctanhf.c +++ /dev/null @@ -1,66 +0,0 @@ -/* origin: FreeBSD /usr/src/lib/msun/src/s_ctanhf.c */ -/*- - * Copyright (c) 2011 David Schultz - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice unmodified, this list of conditions, and the following - * disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 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 AUTHOR 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. - */ -/* - * Hyperbolic tangent of a complex argument z. See s_ctanh.c for details. - */ - -#include "complex_impl.h" - -float complex ctanhf(float complex z) -{ - float x, y; - float t, beta, s, rho, denom; - uint32_t hx, ix; - - x = crealf(z); - y = cimagf(z); - - GET_FLOAT_WORD(hx, x); - ix = hx & 0x7fffffff; - - if (ix >= 0x7f800000) { - if (ix & 0x7fffff) - return CMPLXF(x, (y == 0 ? y : x * y)); - SET_FLOAT_WORD(x, hx - 0x40000000); - return CMPLXF(x, copysignf(0, isinf(y) ? y : sinf(y) * cosf(y))); - } - - if (!isfinite(y)) - return CMPLXF(ix ? y - y : x, y - y); - - if (ix >= 0x41300000) { /* x >= 11 */ - float exp_mx = expf(-fabsf(x)); - return CMPLXF(copysignf(1, x), 4 * sinf(y) * cosf(y) * exp_mx * exp_mx); - } - - t = tanf(y); - beta = 1.0 + t * t; - s = sinhf(x); - rho = sqrtf(1 + s * s); - denom = 1 + beta * s * s; - return CMPLXF((beta * rho * s) / denom, t / denom); -} diff --git a/src/complex/ctanhl.c b/src/complex/ctanhl.c deleted file mode 100644 index 45d5862..0000000 --- a/src/complex/ctanhl.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "complex_impl.h" - -//FIXME -long double complex ctanhl(long double complex z) -{ - return ctanh(z); -} diff --git a/src/complex/ctanl.c b/src/complex/ctanl.c deleted file mode 100644 index 4b87420..0000000 --- a/src/complex/ctanl.c +++ /dev/null @@ -1,14 +0,0 @@ -#include "complex_impl.h" - -#if LDBL_MANT_DIG == 53 && LDBL_MAX_EXP == 1024 -long double complex ctanl(long double complex z) -{ - return ctan(z); -} -#else -long double complex ctanl(long double complex z) -{ - z = ctanhl(CMPLXL(-cimagl(z), creall(z))); - return CMPLXL(cimagl(z), -creall(z)); -} -#endif