Remove /src/complex
This commit is contained in:
parent
6c7f6ca83b
commit
96cd685841
3
.gitignore
vendored
3
.gitignore
vendored
@ -50,3 +50,6 @@ modules.order
|
|||||||
Module.symvers
|
Module.symvers
|
||||||
Mkfile.old
|
Mkfile.old
|
||||||
dkms.conf
|
dkms.conf
|
||||||
|
|
||||||
|
# Backup files
|
||||||
|
backup/
|
||||||
|
31
config.mak
Normal file
31
config.mak
Normal file
@ -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
|
415
obj/include/bits/alltypes.h
Normal file
415
obj/include/bits/alltypes.h
Normal file
@ -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
|
703
obj/include/bits/syscall.h
Normal file
703
obj/include/bits/syscall.h
Normal file
@ -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
|
@ -1,87 +0,0 @@
|
|||||||
/* origin: FreeBSD /usr/src/lib/msun/src/k_exp.c */
|
|
||||||
/*-
|
|
||||||
* Copyright (c) 2011 David Schultz <das@FreeBSD.ORG>
|
|
||||||
* 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);
|
|
||||||
}
|
|
@ -1,68 +0,0 @@
|
|||||||
/* origin: FreeBSD /usr/src/lib/msun/src/k_expf.c */
|
|
||||||
/*-
|
|
||||||
* Copyright (c) 2011 David Schultz <das@FreeBSD.ORG>
|
|
||||||
* 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);
|
|
||||||
}
|
|
@ -1,6 +0,0 @@
|
|||||||
#include "complex_impl.h"
|
|
||||||
|
|
||||||
double cabs(double complex z)
|
|
||||||
{
|
|
||||||
return hypot(creal(z), cimag(z));
|
|
||||||
}
|
|
@ -1,6 +0,0 @@
|
|||||||
#include "complex_impl.h"
|
|
||||||
|
|
||||||
float cabsf(float complex z)
|
|
||||||
{
|
|
||||||
return hypotf(crealf(z), cimagf(z));
|
|
||||||
}
|
|
@ -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
|
|
@ -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));
|
|
||||||
}
|
|
@ -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));
|
|
||||||
}
|
|
@ -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));
|
|
||||||
}
|
|
@ -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));
|
|
||||||
}
|
|
@ -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
|
|
@ -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
|
|
@ -1,6 +0,0 @@
|
|||||||
#include "complex_impl.h"
|
|
||||||
|
|
||||||
double carg(double complex z)
|
|
||||||
{
|
|
||||||
return atan2(cimag(z), creal(z));
|
|
||||||
}
|
|
@ -1,6 +0,0 @@
|
|||||||
#include "complex_impl.h"
|
|
||||||
|
|
||||||
float cargf(float complex z)
|
|
||||||
{
|
|
||||||
return atan2f(cimagf(z), crealf(z));
|
|
||||||
}
|
|
@ -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
|
|
@ -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));
|
|
||||||
}
|
|
@ -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));
|
|
||||||
}
|
|
@ -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));
|
|
||||||
}
|
|
@ -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));
|
|
||||||
}
|
|
@ -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
|
|
@ -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
|
|
@ -1,107 +0,0 @@
|
|||||||
/* origin: OpenBSD /usr/src/lib/libm/src/s_catan.c */
|
|
||||||
/*
|
|
||||||
* Copyright (c) 2008 Stephen L. Moshier <steve@moshier.net>
|
|
||||||
*
|
|
||||||
* 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;
|
|
||||||
}
|
|
@ -1,103 +0,0 @@
|
|||||||
/* origin: OpenBSD /usr/src/lib/libm/src/s_catanf.c */
|
|
||||||
/*
|
|
||||||
* Copyright (c) 2008 Stephen L. Moshier <steve@moshier.net>
|
|
||||||
*
|
|
||||||
* 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;
|
|
||||||
}
|
|
@ -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));
|
|
||||||
}
|
|
@ -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));
|
|
||||||
}
|
|
@ -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
|
|
@ -1,114 +0,0 @@
|
|||||||
/* origin: OpenBSD /usr/src/lib/libm/src/s_catanl.c */
|
|
||||||
/*
|
|
||||||
* Copyright (c) 2008 Stephen L. Moshier <steve@moshier.net>
|
|
||||||
*
|
|
||||||
* 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 <complex.h>
|
|
||||||
#include <float.h>
|
|
||||||
#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
|
|
@ -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)));
|
|
||||||
}
|
|
@ -1,6 +0,0 @@
|
|||||||
#include "complex_impl.h"
|
|
||||||
|
|
||||||
float complex ccosf(float complex z)
|
|
||||||
{
|
|
||||||
return ccoshf(CMPLXF(-cimagf(z), crealf(z)));
|
|
||||||
}
|
|
@ -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));
|
|
||||||
}
|
|
@ -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));
|
|
||||||
}
|
|
@ -1,7 +0,0 @@
|
|||||||
#include "complex_impl.h"
|
|
||||||
|
|
||||||
//FIXME
|
|
||||||
long double complex ccoshl(long double complex z)
|
|
||||||
{
|
|
||||||
return ccosh(z);
|
|
||||||
}
|
|
@ -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
|
|
@ -1,83 +0,0 @@
|
|||||||
/* origin: FreeBSD /usr/src/lib/msun/src/s_cexp.c */
|
|
||||||
/*-
|
|
||||||
* Copyright (c) 2011 David Schultz <das@FreeBSD.ORG>
|
|
||||||
* 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));
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,83 +0,0 @@
|
|||||||
/* origin: FreeBSD /usr/src/lib/msun/src/s_cexpf.c */
|
|
||||||
/*-
|
|
||||||
* Copyright (c) 2011 David Schultz <das@FreeBSD.ORG>
|
|
||||||
* 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));
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,7 +0,0 @@
|
|||||||
#include "complex_impl.h"
|
|
||||||
|
|
||||||
//FIXME
|
|
||||||
long double complex cexpl(long double complex z)
|
|
||||||
{
|
|
||||||
return cexp(z);
|
|
||||||
}
|
|
@ -1,6 +0,0 @@
|
|||||||
#include "complex_impl.h"
|
|
||||||
|
|
||||||
double (cimag)(double complex z)
|
|
||||||
{
|
|
||||||
return cimag(z);
|
|
||||||
}
|
|
@ -1,6 +0,0 @@
|
|||||||
#include "complex_impl.h"
|
|
||||||
|
|
||||||
float (cimagf)(float complex z)
|
|
||||||
{
|
|
||||||
return cimagf(z);
|
|
||||||
}
|
|
@ -1,6 +0,0 @@
|
|||||||
#include "complex_impl.h"
|
|
||||||
|
|
||||||
long double (cimagl)(long double complex z)
|
|
||||||
{
|
|
||||||
return cimagl(z);
|
|
||||||
}
|
|
@ -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);
|
|
||||||
}
|
|
@ -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);
|
|
||||||
}
|
|
@ -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
|
|
@ -1,6 +0,0 @@
|
|||||||
#include "complex_impl.h"
|
|
||||||
|
|
||||||
double complex conj(double complex z)
|
|
||||||
{
|
|
||||||
return CMPLX(creal(z), -cimag(z));
|
|
||||||
}
|
|
@ -1,6 +0,0 @@
|
|||||||
#include "complex_impl.h"
|
|
||||||
|
|
||||||
float complex conjf(float complex z)
|
|
||||||
{
|
|
||||||
return CMPLXF(crealf(z), -cimagf(z));
|
|
||||||
}
|
|
@ -1,6 +0,0 @@
|
|||||||
#include "complex_impl.h"
|
|
||||||
|
|
||||||
long double complex conjl(long double complex z)
|
|
||||||
{
|
|
||||||
return CMPLXL(creall(z), -cimagl(z));
|
|
||||||
}
|
|
@ -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));
|
|
||||||
}
|
|
@ -1,6 +0,0 @@
|
|||||||
#include "complex_impl.h"
|
|
||||||
|
|
||||||
float complex cpowf(float complex z, float complex c)
|
|
||||||
{
|
|
||||||
return cexpf(c * clogf(z));
|
|
||||||
}
|
|
@ -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
|
|
@ -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;
|
|
||||||
}
|
|
@ -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;
|
|
||||||
}
|
|
@ -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
|
|
@ -1,6 +0,0 @@
|
|||||||
#include <complex.h>
|
|
||||||
|
|
||||||
double (creal)(double complex z)
|
|
||||||
{
|
|
||||||
return creal(z);
|
|
||||||
}
|
|
@ -1,6 +0,0 @@
|
|||||||
#include <complex.h>
|
|
||||||
|
|
||||||
float (crealf)(float complex z)
|
|
||||||
{
|
|
||||||
return crealf(z);
|
|
||||||
}
|
|
@ -1,6 +0,0 @@
|
|||||||
#include <complex.h>
|
|
||||||
|
|
||||||
long double (creall)(long double complex z)
|
|
||||||
{
|
|
||||||
return creall(z);
|
|
||||||
}
|
|
@ -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));
|
|
||||||
}
|
|
@ -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));
|
|
||||||
}
|
|
@ -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));
|
|
||||||
}
|
|
@ -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));
|
|
||||||
}
|
|
@ -1,7 +0,0 @@
|
|||||||
#include "complex_impl.h"
|
|
||||||
|
|
||||||
//FIXME
|
|
||||||
long double complex csinhl(long double complex z)
|
|
||||||
{
|
|
||||||
return csinh(z);
|
|
||||||
}
|
|
@ -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
|
|
@ -1,100 +0,0 @@
|
|||||||
/* origin: FreeBSD /usr/src/lib/msun/src/s_csqrt.c */
|
|
||||||
/*-
|
|
||||||
* Copyright (c) 2007 David Schultz <das@FreeBSD.ORG>
|
|
||||||
* 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;
|
|
||||||
}
|
|
@ -1,82 +0,0 @@
|
|||||||
/* origin: FreeBSD /usr/src/lib/msun/src/s_csqrtf.c */
|
|
||||||
/*-
|
|
||||||
* Copyright (c) 2007 David Schultz <das@FreeBSD.ORG>
|
|
||||||
* 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));
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,7 +0,0 @@
|
|||||||
#include "complex_impl.h"
|
|
||||||
|
|
||||||
//FIXME
|
|
||||||
long double complex csqrtl(long double complex z)
|
|
||||||
{
|
|
||||||
return csqrt(z);
|
|
||||||
}
|
|
@ -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));
|
|
||||||
}
|
|
@ -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));
|
|
||||||
}
|
|
@ -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);
|
|
||||||
}
|
|
@ -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);
|
|
||||||
}
|
|
@ -1,7 +0,0 @@
|
|||||||
#include "complex_impl.h"
|
|
||||||
|
|
||||||
//FIXME
|
|
||||||
long double complex ctanhl(long double complex z)
|
|
||||||
{
|
|
||||||
return ctanh(z);
|
|
||||||
}
|
|
@ -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
|
|
Loading…
Reference in New Issue
Block a user