Upgrade libm.
This brings us up to date with FreeBSD HEAD, fixes various bugs, unifies the set of functions we support on ARM, MIPS, and x86, fixes "long double", adds ISO C99 support, and adds basic unit tests. It turns out that our "long double" functions have always been broken for non-normal numbers. This patch fixes that by not using the upstream implementations and just forwarding to the regular "double" implementation instead (since "long double" on Android is just "double" anyway, which is what BSD doesn't support). All the tests pass on ARM, MIPS, and x86, plus glibc on x86-64. Bug: 3169850 Bug: 8012787 Bug: https://code.google.com/p/android/issues/detail?id=6697 Change-Id: If0c343030959c24bfc50d4d21c9530052c581837
This commit is contained in:
parent
a990cf5b33
commit
a0ee07829a
@ -87,6 +87,8 @@ typedef unsigned long __psize_t;
|
||||
/* Standard system types */
|
||||
typedef int __clock_t;
|
||||
typedef int __clockid_t;
|
||||
typedef double __double_t;
|
||||
typedef float __float_t;
|
||||
typedef long __ptrdiff_t;
|
||||
typedef int __time_t;
|
||||
typedef int __timer_t;
|
||||
|
@ -87,6 +87,8 @@ typedef unsigned long __psize_t;
|
||||
/* Standard system types */
|
||||
typedef int __clock_t;
|
||||
typedef int __clockid_t;
|
||||
typedef double __double_t;
|
||||
typedef float __float_t;
|
||||
typedef long __ptrdiff_t;
|
||||
typedef int __time_t;
|
||||
typedef int __timer_t;
|
||||
|
@ -177,6 +177,8 @@
|
||||
#define __unused /* delete */
|
||||
#endif
|
||||
|
||||
#define __pure2 __attribute__((__const__)) /* Android-added: used by FreeBSD libm */
|
||||
|
||||
#if __GNUC_PREREQ__(3, 1)
|
||||
#define __used __attribute__((__used__))
|
||||
#else
|
||||
@ -313,6 +315,12 @@
|
||||
#define __purefunc
|
||||
#endif
|
||||
|
||||
#if __GNUC_PREREQ__(3, 1)
|
||||
#define __always_inline __attribute__((__always_inline__))
|
||||
#else
|
||||
#define __always_inline
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Macros for manipulating "link sets". Link sets are arrays of pointers
|
||||
* to objects, which are gathered up by the linker.
|
||||
@ -510,4 +518,11 @@
|
||||
#define __BIONIC_FORTIFY_UNKNOWN_SIZE ((size_t) -1)
|
||||
#endif
|
||||
|
||||
/* Android-added: for FreeBSD's libm. */
|
||||
#define __weak_reference(sym,alias) \
|
||||
__asm__(".weak " #alias); \
|
||||
__asm__(".equ " #alias ", " #sym)
|
||||
#define __strong_reference(sym,aliassym) \
|
||||
extern __typeof (sym) aliassym __attribute__ ((__alias__ (#sym)))
|
||||
|
||||
#endif /* !_SYS_CDEFS_H_ */
|
||||
|
64
libc/tools/check-symbols.py
Executable file
64
libc/tools/check-symbols.py
Executable file
@ -0,0 +1,64 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
import glob
|
||||
import os
|
||||
import re
|
||||
import string
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
toolchain = os.environ['ANDROID_TOOLCHAIN']
|
||||
arch = re.sub(r'.*/linux-x86/([^/]+)/.*', r'\1', toolchain)
|
||||
|
||||
sys.stderr.write('Checking symbols for arch "%s"...\n' % arch)
|
||||
|
||||
def GetSymbols(library, functions_or_variables):
|
||||
api = '9'
|
||||
if library == 'libm' and arch == 'arm':
|
||||
api = '3'
|
||||
path = '%s/development/ndk/platforms/android-%s/arch-%s/symbols/%s.so.%s.txt' % (os.environ['ANDROID_BUILD_TOP'], api, arch, library, functions_or_variables)
|
||||
symbols = set()
|
||||
for line in open(path, 'r'):
|
||||
symbols.add(line.rstrip())
|
||||
#sys.stdout.write('%d %s in %s for %s\n' % (len(symbols), functions_or_variables, library, arch))
|
||||
return symbols
|
||||
|
||||
def CheckSymbols(library, functions_or_variables):
|
||||
expected_symbols = GetSymbols(library, functions_or_variables)
|
||||
|
||||
so_file = '%s/system/lib/%s.so' % (os.environ['ANDROID_PRODUCT_OUT'], library)
|
||||
|
||||
# Example readelf output:
|
||||
# 264: 0001623c 4 FUNC GLOBAL DEFAULT 8 cabsf
|
||||
# 266: 00016244 4 FUNC GLOBAL DEFAULT 8 dremf
|
||||
# 267: 00019018 4 OBJECT GLOBAL DEFAULT 11 __fe_dfl_env
|
||||
# 268: 00000000 0 FUNC GLOBAL DEFAULT UND __aeabi_dcmplt
|
||||
|
||||
|
||||
r = re.compile(r' +\d+: [0-9a-f]+ +\d+ (FUNC|OBJECT) +\S+ +\S+ +\d+ (\S+)')
|
||||
|
||||
actual_symbols = set()
|
||||
for line in subprocess.check_output(['readelf', '--dyn-syms', so_file]).split('\n'):
|
||||
m = r.match(line)
|
||||
if m:
|
||||
if m.group(1) == 'FUNC' and functions_or_variables == 'functions':
|
||||
actual_symbols.add(m.group(2))
|
||||
elif m.group(1) == 'OBJECT' and functions_or_variables == 'variables':
|
||||
actual_symbols.add(m.group(2))
|
||||
#else:
|
||||
#print 'ignoring: ' % line
|
||||
|
||||
missing = expected_symbols - actual_symbols
|
||||
if len(missing) > 0:
|
||||
sys.stderr.write('%d missing %s in %s for %s:\n' % (len(missing), functions_or_variables, library, arch))
|
||||
for miss in sorted(missing):
|
||||
sys.stderr.write(' %s\n' % miss)
|
||||
|
||||
return len(missing) == 0
|
||||
|
||||
CheckSymbols("libc", "functions")
|
||||
CheckSymbols("libc", "variables")
|
||||
CheckSymbols("libm", "functions")
|
||||
CheckSymbols("libm", "variables")
|
||||
|
||||
sys.exit(0)
|
435
libm/Android.mk
435
libm/Android.mk
@ -1,229 +1,254 @@
|
||||
LOCAL_PATH:= $(call my-dir)
|
||||
|
||||
# TODO: these come from from upstream's libc, not libm!
|
||||
libm_common_src_files := \
|
||||
isinf.c \
|
||||
digittoint.c \
|
||||
fpclassify.c \
|
||||
isinf.c \
|
||||
|
||||
# TODO: this is not in the BSDs.
|
||||
libm_common_src_files += \
|
||||
sincos.c \
|
||||
bsdsrc/b_exp.c \
|
||||
bsdsrc/b_log.c \
|
||||
bsdsrc/b_tgamma.c \
|
||||
src/e_acos.c \
|
||||
src/e_acosf.c \
|
||||
src/e_acosh.c \
|
||||
src/e_acoshf.c \
|
||||
src/e_asin.c \
|
||||
src/e_asinf.c \
|
||||
src/e_atan2.c \
|
||||
src/e_atan2f.c \
|
||||
src/e_atanh.c \
|
||||
src/e_atanhf.c \
|
||||
src/e_cosh.c \
|
||||
src/e_coshf.c \
|
||||
src/e_exp.c \
|
||||
src/e_expf.c \
|
||||
src/e_fmod.c \
|
||||
src/e_fmodf.c \
|
||||
src/e_gamma.c \
|
||||
src/e_gamma_r.c \
|
||||
src/e_gammaf.c \
|
||||
src/e_gammaf_r.c \
|
||||
src/e_hypot.c \
|
||||
src/e_hypotf.c \
|
||||
src/e_j0.c \
|
||||
src/e_j0f.c \
|
||||
src/e_j1.c \
|
||||
src/e_j1f.c \
|
||||
src/e_jn.c \
|
||||
src/e_jnf.c \
|
||||
src/e_lgamma.c \
|
||||
src/e_lgamma_r.c \
|
||||
src/e_lgammaf.c \
|
||||
src/e_lgammaf_r.c \
|
||||
src/e_log.c \
|
||||
src/e_log10.c \
|
||||
src/e_log10f.c \
|
||||
src/e_logf.c \
|
||||
src/e_pow.c \
|
||||
src/e_powf.c \
|
||||
src/e_rem_pio2.c \
|
||||
src/e_rem_pio2f.c \
|
||||
src/e_remainder.c \
|
||||
src/e_remainderf.c \
|
||||
src/e_scalb.c \
|
||||
src/e_scalbf.c \
|
||||
src/e_sinh.c \
|
||||
src/e_sinhf.c \
|
||||
src/e_sqrt.c \
|
||||
src/k_cos.c \
|
||||
src/k_cosf.c \
|
||||
src/k_rem_pio2.c \
|
||||
src/k_sin.c \
|
||||
src/k_sinf.c \
|
||||
src/k_tan.c \
|
||||
src/k_tanf.c \
|
||||
src/s_asinh.c \
|
||||
src/s_asinhf.c \
|
||||
src/s_atan.c \
|
||||
src/s_atanf.c \
|
||||
src/s_cbrt.c \
|
||||
src/s_cbrtf.c \
|
||||
src/s_ceil.c \
|
||||
src/s_ceilf.c \
|
||||
src/s_ceill.c \
|
||||
src/s_copysign.c \
|
||||
src/s_copysignf.c \
|
||||
src/s_cos.c \
|
||||
src/s_cosf.c \
|
||||
src/s_erf.c \
|
||||
src/s_erff.c \
|
||||
src/s_exp2.c \
|
||||
src/s_exp2f.c \
|
||||
src/s_expm1.c \
|
||||
src/s_expm1f.c \
|
||||
src/s_fabsf.c \
|
||||
src/s_fdim.c \
|
||||
src/s_finite.c \
|
||||
src/s_finitef.c \
|
||||
src/s_floor.c \
|
||||
src/s_floorf.c \
|
||||
src/s_floorl.c \
|
||||
src/s_fma.c \
|
||||
src/s_fmaf.c \
|
||||
src/s_fmax.c \
|
||||
src/s_fmaxf.c \
|
||||
src/s_fmaxl.c \
|
||||
src/s_fmin.c \
|
||||
src/s_fminf.c \
|
||||
src/s_fminl.c \
|
||||
src/s_frexpf.c \
|
||||
src/s_ilogb.c \
|
||||
src/s_ilogbf.c \
|
||||
src/s_ilogbl.c \
|
||||
src/s_isfinite.c \
|
||||
src/s_isnormal.c \
|
||||
src/s_llrint.c \
|
||||
src/s_llrintf.c \
|
||||
src/s_llround.c \
|
||||
src/s_llroundf.c \
|
||||
src/s_llroundl.c \
|
||||
src/s_log1p.c \
|
||||
src/s_log1pf.c \
|
||||
src/s_logb.c \
|
||||
src/s_logbf.c \
|
||||
src/s_lrint.c \
|
||||
src/s_lrintf.c \
|
||||
src/s_lround.c \
|
||||
src/s_lroundf.c \
|
||||
src/s_lroundl.c \
|
||||
src/s_modff.c \
|
||||
src/s_nan.c \
|
||||
src/s_nearbyint.c \
|
||||
src/s_nextafter.c \
|
||||
src/s_nextafterf.c \
|
||||
src/s_nexttowardf.c \
|
||||
src/s_remquo.c \
|
||||
src/s_remquof.c \
|
||||
src/s_rint.c \
|
||||
src/s_rintf.c \
|
||||
src/s_round.c \
|
||||
src/s_roundf.c \
|
||||
src/s_roundl.c \
|
||||
src/s_signbit.c \
|
||||
src/s_signgam.c \
|
||||
src/s_significand.c \
|
||||
src/s_significandf.c \
|
||||
src/s_sin.c \
|
||||
src/s_sinf.c \
|
||||
src/s_tan.c \
|
||||
src/s_tanf.c \
|
||||
src/s_tanh.c \
|
||||
src/s_tanhf.c \
|
||||
src/s_tgammaf.c \
|
||||
src/s_trunc.c \
|
||||
src/s_truncf.c \
|
||||
src/s_truncl.c \
|
||||
src/w_drem.c \
|
||||
src/w_dremf.c \
|
||||
src/s_copysignl.c \
|
||||
src/s_fabsl.c \
|
||||
src/s_fabs.c \
|
||||
src/s_frexp.c \
|
||||
src/s_isnan.c \
|
||||
src/s_modf.c
|
||||
|
||||
libm_common_cflags :=
|
||||
|
||||
ifeq ($(TARGET_ARCH),arm)
|
||||
libm_common_src_files += \
|
||||
arm/fenv.c \
|
||||
src/e_ldexpf.c \
|
||||
src/s_scalbln.c \
|
||||
src/s_scalbn.c \
|
||||
src/s_scalbnf.c \
|
||||
src/e_sqrtf.c
|
||||
upstream-freebsd/lib/msun/bsdsrc/b_exp.c \
|
||||
upstream-freebsd/lib/msun/bsdsrc/b_log.c \
|
||||
upstream-freebsd/lib/msun/bsdsrc/b_tgamma.c \
|
||||
upstream-freebsd/lib/msun/src/e_acos.c \
|
||||
upstream-freebsd/lib/msun/src/e_acosf.c \
|
||||
upstream-freebsd/lib/msun/src/e_acosh.c \
|
||||
upstream-freebsd/lib/msun/src/e_acoshf.c \
|
||||
upstream-freebsd/lib/msun/src/e_asin.c \
|
||||
upstream-freebsd/lib/msun/src/e_asinf.c \
|
||||
upstream-freebsd/lib/msun/src/e_atan2.c \
|
||||
upstream-freebsd/lib/msun/src/e_atan2f.c \
|
||||
upstream-freebsd/lib/msun/src/e_atanh.c \
|
||||
upstream-freebsd/lib/msun/src/e_atanhf.c \
|
||||
upstream-freebsd/lib/msun/src/e_cosh.c \
|
||||
upstream-freebsd/lib/msun/src/e_coshf.c \
|
||||
upstream-freebsd/lib/msun/src/e_exp.c \
|
||||
upstream-freebsd/lib/msun/src/e_expf.c \
|
||||
upstream-freebsd/lib/msun/src/e_fmod.c \
|
||||
upstream-freebsd/lib/msun/src/e_fmodf.c \
|
||||
upstream-freebsd/lib/msun/src/e_gamma.c \
|
||||
upstream-freebsd/lib/msun/src/e_gammaf.c \
|
||||
upstream-freebsd/lib/msun/src/e_gammaf_r.c \
|
||||
upstream-freebsd/lib/msun/src/e_gamma_r.c \
|
||||
upstream-freebsd/lib/msun/src/e_hypot.c \
|
||||
upstream-freebsd/lib/msun/src/e_hypotf.c \
|
||||
upstream-freebsd/lib/msun/src/e_j0.c \
|
||||
upstream-freebsd/lib/msun/src/e_j0f.c \
|
||||
upstream-freebsd/lib/msun/src/e_j1.c \
|
||||
upstream-freebsd/lib/msun/src/e_j1f.c \
|
||||
upstream-freebsd/lib/msun/src/e_jn.c \
|
||||
upstream-freebsd/lib/msun/src/e_jnf.c \
|
||||
upstream-freebsd/lib/msun/src/e_lgamma.c \
|
||||
upstream-freebsd/lib/msun/src/e_lgammaf.c \
|
||||
upstream-freebsd/lib/msun/src/e_lgammaf_r.c \
|
||||
upstream-freebsd/lib/msun/src/e_lgamma_r.c \
|
||||
upstream-freebsd/lib/msun/src/e_log10.c \
|
||||
upstream-freebsd/lib/msun/src/e_log10f.c \
|
||||
upstream-freebsd/lib/msun/src/e_log2.c \
|
||||
upstream-freebsd/lib/msun/src/e_log2f.c \
|
||||
upstream-freebsd/lib/msun/src/e_log.c \
|
||||
upstream-freebsd/lib/msun/src/e_logf.c \
|
||||
upstream-freebsd/lib/msun/src/e_pow.c \
|
||||
upstream-freebsd/lib/msun/src/e_powf.c \
|
||||
upstream-freebsd/lib/msun/src/e_remainder.c \
|
||||
upstream-freebsd/lib/msun/src/e_remainderf.c \
|
||||
upstream-freebsd/lib/msun/src/e_rem_pio2.c \
|
||||
upstream-freebsd/lib/msun/src/e_rem_pio2f.c \
|
||||
upstream-freebsd/lib/msun/src/e_scalb.c \
|
||||
upstream-freebsd/lib/msun/src/e_scalbf.c \
|
||||
upstream-freebsd/lib/msun/src/e_sinh.c \
|
||||
upstream-freebsd/lib/msun/src/e_sinhf.c \
|
||||
upstream-freebsd/lib/msun/src/e_sqrt.c \
|
||||
upstream-freebsd/lib/msun/src/e_sqrtf.c \
|
||||
upstream-freebsd/lib/msun/src/k_cos.c \
|
||||
upstream-freebsd/lib/msun/src/k_cosf.c \
|
||||
upstream-freebsd/lib/msun/src/k_exp.c \
|
||||
upstream-freebsd/lib/msun/src/k_expf.c \
|
||||
upstream-freebsd/lib/msun/src/k_rem_pio2.c \
|
||||
upstream-freebsd/lib/msun/src/k_sin.c \
|
||||
upstream-freebsd/lib/msun/src/k_sinf.c \
|
||||
upstream-freebsd/lib/msun/src/k_tan.c \
|
||||
upstream-freebsd/lib/msun/src/k_tanf.c \
|
||||
upstream-freebsd/lib/msun/src/s_asinh.c \
|
||||
upstream-freebsd/lib/msun/src/s_asinhf.c \
|
||||
upstream-freebsd/lib/msun/src/s_atan.c \
|
||||
upstream-freebsd/lib/msun/src/s_atanf.c \
|
||||
upstream-freebsd/lib/msun/src/s_carg.c \
|
||||
upstream-freebsd/lib/msun/src/s_cargf.c \
|
||||
upstream-freebsd/lib/msun/src/s_cbrt.c \
|
||||
upstream-freebsd/lib/msun/src/s_cbrtf.c \
|
||||
upstream-freebsd/lib/msun/src/s_ccosh.c \
|
||||
upstream-freebsd/lib/msun/src/s_ccoshf.c \
|
||||
upstream-freebsd/lib/msun/src/s_ceil.c \
|
||||
upstream-freebsd/lib/msun/src/s_ceilf.c \
|
||||
upstream-freebsd/lib/msun/src/s_cexp.c \
|
||||
upstream-freebsd/lib/msun/src/s_cexpf.c \
|
||||
upstream-freebsd/lib/msun/src/s_cimag.c \
|
||||
upstream-freebsd/lib/msun/src/s_cimagf.c \
|
||||
upstream-freebsd/lib/msun/src/s_conj.c \
|
||||
upstream-freebsd/lib/msun/src/s_conjf.c \
|
||||
upstream-freebsd/lib/msun/src/s_copysign.c \
|
||||
upstream-freebsd/lib/msun/src/s_copysignf.c \
|
||||
upstream-freebsd/lib/msun/src/s_cos.c \
|
||||
upstream-freebsd/lib/msun/src/s_cosf.c \
|
||||
upstream-freebsd/lib/msun/src/s_cproj.c \
|
||||
upstream-freebsd/lib/msun/src/s_cprojf.c \
|
||||
upstream-freebsd/lib/msun/src/s_creal.c \
|
||||
upstream-freebsd/lib/msun/src/s_crealf.c \
|
||||
upstream-freebsd/lib/msun/src/s_csinh.c \
|
||||
upstream-freebsd/lib/msun/src/s_csinhf.c \
|
||||
upstream-freebsd/lib/msun/src/s_csqrt.c \
|
||||
upstream-freebsd/lib/msun/src/s_csqrtf.c \
|
||||
upstream-freebsd/lib/msun/src/s_ctanh.c \
|
||||
upstream-freebsd/lib/msun/src/s_ctanhf.c \
|
||||
upstream-freebsd/lib/msun/src/s_erf.c \
|
||||
upstream-freebsd/lib/msun/src/s_erff.c \
|
||||
upstream-freebsd/lib/msun/src/s_exp2.c \
|
||||
upstream-freebsd/lib/msun/src/s_exp2f.c \
|
||||
upstream-freebsd/lib/msun/src/s_expm1.c \
|
||||
upstream-freebsd/lib/msun/src/s_expm1f.c \
|
||||
upstream-freebsd/lib/msun/src/s_fabs.c \
|
||||
upstream-freebsd/lib/msun/src/s_fabsf.c \
|
||||
upstream-freebsd/lib/msun/src/s_fdim.c \
|
||||
upstream-freebsd/lib/msun/src/s_finite.c \
|
||||
upstream-freebsd/lib/msun/src/s_finitef.c \
|
||||
upstream-freebsd/lib/msun/src/s_floor.c \
|
||||
upstream-freebsd/lib/msun/src/s_floorf.c \
|
||||
upstream-freebsd/lib/msun/src/s_fma.c \
|
||||
upstream-freebsd/lib/msun/src/s_fmaf.c \
|
||||
upstream-freebsd/lib/msun/src/s_fmax.c \
|
||||
upstream-freebsd/lib/msun/src/s_fmaxf.c \
|
||||
upstream-freebsd/lib/msun/src/s_fmin.c \
|
||||
upstream-freebsd/lib/msun/src/s_fminf.c \
|
||||
upstream-freebsd/lib/msun/src/s_frexp.c \
|
||||
upstream-freebsd/lib/msun/src/s_frexpf.c \
|
||||
upstream-freebsd/lib/msun/src/s_ilogb.c \
|
||||
upstream-freebsd/lib/msun/src/s_ilogbf.c \
|
||||
upstream-freebsd/lib/msun/src/s_isfinite.c \
|
||||
upstream-freebsd/lib/msun/src/s_isnan.c \
|
||||
upstream-freebsd/lib/msun/src/s_isnormal.c \
|
||||
upstream-freebsd/lib/msun/src/s_llrint.c \
|
||||
upstream-freebsd/lib/msun/src/s_llrintf.c \
|
||||
upstream-freebsd/lib/msun/src/s_llround.c \
|
||||
upstream-freebsd/lib/msun/src/s_llroundf.c \
|
||||
upstream-freebsd/lib/msun/src/s_log1p.c \
|
||||
upstream-freebsd/lib/msun/src/s_log1pf.c \
|
||||
upstream-freebsd/lib/msun/src/s_logb.c \
|
||||
upstream-freebsd/lib/msun/src/s_logbf.c \
|
||||
upstream-freebsd/lib/msun/src/s_lrint.c \
|
||||
upstream-freebsd/lib/msun/src/s_lrintf.c \
|
||||
upstream-freebsd/lib/msun/src/s_lround.c \
|
||||
upstream-freebsd/lib/msun/src/s_lroundf.c \
|
||||
upstream-freebsd/lib/msun/src/s_modf.c \
|
||||
upstream-freebsd/lib/msun/src/s_modff.c \
|
||||
upstream-freebsd/lib/msun/src/s_nan.c \
|
||||
upstream-freebsd/lib/msun/src/s_nearbyint.c \
|
||||
upstream-freebsd/lib/msun/src/s_nextafter.c \
|
||||
upstream-freebsd/lib/msun/src/s_nextafterf.c \
|
||||
upstream-freebsd/lib/msun/src/s_nexttowardf.c \
|
||||
upstream-freebsd/lib/msun/src/s_remquo.c \
|
||||
upstream-freebsd/lib/msun/src/s_remquof.c \
|
||||
upstream-freebsd/lib/msun/src/s_rint.c \
|
||||
upstream-freebsd/lib/msun/src/s_rintf.c \
|
||||
upstream-freebsd/lib/msun/src/s_round.c \
|
||||
upstream-freebsd/lib/msun/src/s_roundf.c \
|
||||
upstream-freebsd/lib/msun/src/s_scalbln.c \
|
||||
upstream-freebsd/lib/msun/src/s_scalbn.c \
|
||||
upstream-freebsd/lib/msun/src/s_scalbnf.c \
|
||||
upstream-freebsd/lib/msun/src/s_signbit.c \
|
||||
upstream-freebsd/lib/msun/src/s_signgam.c \
|
||||
upstream-freebsd/lib/msun/src/s_significand.c \
|
||||
upstream-freebsd/lib/msun/src/s_significandf.c \
|
||||
upstream-freebsd/lib/msun/src/s_sin.c \
|
||||
upstream-freebsd/lib/msun/src/s_sinf.c \
|
||||
upstream-freebsd/lib/msun/src/s_tan.c \
|
||||
upstream-freebsd/lib/msun/src/s_tanf.c \
|
||||
upstream-freebsd/lib/msun/src/s_tanh.c \
|
||||
upstream-freebsd/lib/msun/src/s_tanhf.c \
|
||||
upstream-freebsd/lib/msun/src/s_tgammaf.c \
|
||||
upstream-freebsd/lib/msun/src/s_trunc.c \
|
||||
upstream-freebsd/lib/msun/src/s_truncf.c \
|
||||
upstream-freebsd/lib/msun/src/w_cabs.c \
|
||||
upstream-freebsd/lib/msun/src/w_cabsf.c \
|
||||
upstream-freebsd/lib/msun/src/w_drem.c \
|
||||
upstream-freebsd/lib/msun/src/w_dremf.c \
|
||||
|
||||
libm_common_includes = $(LOCAL_PATH)/arm
|
||||
endif
|
||||
libm_common_src_files += fake_long_double.c
|
||||
|
||||
ifeq ($(TARGET_OS)-$(TARGET_ARCH),linux-x86)
|
||||
libm_common_src_files += \
|
||||
i387/fenv.c \
|
||||
i387/s_scalbnl.S \
|
||||
i387/s_scalbn.S \
|
||||
i387/s_scalbnf.S \
|
||||
i387/e_sqrtf.S
|
||||
# TODO: on Android, "long double" is "double".
|
||||
# upstream-freebsd/lib/msun/src/e_acosl.c \
|
||||
# upstream-freebsd/lib/msun/src/e_asinl.c \
|
||||
# upstream-freebsd/lib/msun/src/e_atan2l.c \
|
||||
# upstream-freebsd/lib/msun/src/e_fmodl.c \
|
||||
# upstream-freebsd/lib/msun/src/e_hypotl.c \
|
||||
# upstream-freebsd/lib/msun/src/e_remainderl.c \
|
||||
# upstream-freebsd/lib/msun/src/e_sqrtl.c \
|
||||
# upstream-freebsd/lib/msun/src/s_atanl.c \
|
||||
# upstream-freebsd/lib/msun/src/s_cbrtl.c \
|
||||
# upstream-freebsd/lib/msun/src/s_ceill.c \
|
||||
# upstream-freebsd/lib/msun/src/s_copysignl.c \
|
||||
# upstream-freebsd/lib/msun/src/s_cosl.c \
|
||||
# upstream-freebsd/lib/msun/src/s_fabsl.c \
|
||||
# upstream-freebsd/lib/msun/src/s_floorl.c \
|
||||
# upstream-freebsd/lib/msun/src/s_fmal.c \
|
||||
# upstream-freebsd/lib/msun/src/s_fmaxl.c \
|
||||
# upstream-freebsd/lib/msun/src/s_fminl.c \
|
||||
# upstream-freebsd/lib/msun/src/s_frexpl.c \
|
||||
# upstream-freebsd/lib/msun/src/s_ilogbl.c \
|
||||
# upstream-freebsd/lib/msun/src/s_llrintl.c \
|
||||
# upstream-freebsd/lib/msun/src/s_llroundl.c \
|
||||
# upstream-freebsd/lib/msun/src/s_logbl.c \
|
||||
# upstream-freebsd/lib/msun/src/s_lrintl.c \
|
||||
# upstream-freebsd/lib/msun/src/s_lroundl.c \
|
||||
# upstream-freebsd/lib/msun/src/s_modfl.c \
|
||||
# upstream-freebsd/lib/msun/src/s_nextafterl.c \
|
||||
# upstream-freebsd/lib/msun/src/s_nexttoward.c \
|
||||
# upstream-freebsd/lib/msun/src/s_remquol.c \
|
||||
# upstream-freebsd/lib/msun/src/s_rintl.c \
|
||||
# upstream-freebsd/lib/msun/src/s_roundl.c \
|
||||
# upstream-freebsd/lib/msun/src/s_scalbnl.c \
|
||||
# upstream-freebsd/lib/msun/src/s_sinl.c \
|
||||
# upstream-freebsd/lib/msun/src/s_tanl.c \
|
||||
# upstream-freebsd/lib/msun/src/s_truncl.c \
|
||||
|
||||
libm_common_includes = $(LOCAL_PATH)/i386 $(LOCAL_PATH)/i387
|
||||
endif
|
||||
ifeq ($(TARGET_ARCH),mips)
|
||||
libm_common_src_files += \
|
||||
mips/fenv.c \
|
||||
src/e_ldexpf.c \
|
||||
src/s_scalbln.c \
|
||||
src/s_scalbn.c \
|
||||
src/s_scalbnf.c \
|
||||
src/e_sqrtf.c
|
||||
# TODO: re-enable i387/e_sqrtf.S for x86, and maybe others.
|
||||
|
||||
libm_common_includes = $(LOCAL_PATH)/mips
|
||||
# Need to build *rint* functions
|
||||
libm_common_cflags += -fno-builtin-rintf -fno-builtin-rint
|
||||
endif
|
||||
libm_common_cflags := -DFLT_EVAL_METHOD=0
|
||||
libm_common_includes := $(LOCAL_PATH)/upstream-freebsd/lib/msun/src/
|
||||
|
||||
# libm.a
|
||||
# ========================================================
|
||||
libm_arm_includes := $(LOCAL_PATH)/arm
|
||||
libm_arm_src_files := arm/fenv.c
|
||||
|
||||
libm_x86_includes := $(LOCAL_PATH)/i386 $(LOCAL_PATH)/i387
|
||||
libm_x86_src_files := i387/fenv.c
|
||||
|
||||
libm_mips_cflags := -fno-builtin-rintf -fno-builtin-rint
|
||||
libm_mips_includes := $(LOCAL_PATH)/mips
|
||||
libm_mips_src_files := mips/fenv.c
|
||||
|
||||
#
|
||||
# libm.a for target.
|
||||
#
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
LOCAL_SRC_FILES := \
|
||||
$(libm_common_src_files)
|
||||
|
||||
LOCAL_ARM_MODE := arm
|
||||
LOCAL_C_INCLUDES += $(libm_common_includes)
|
||||
LOCAL_CFLAGS := $(libm_common_cflags)
|
||||
|
||||
LOCAL_MODULE:= libm
|
||||
LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
|
||||
|
||||
LOCAL_ARM_MODE := arm
|
||||
LOCAL_CFLAGS := $(libm_common_cflags) $(libm_$(TARGET_ARCH)_cflags)
|
||||
LOCAL_C_INCLUDES += $(libm_common_includes) $(libm_$(TARGET_ARCH)_includes)
|
||||
LOCAL_SRC_FILES := $(libm_common_src_files) $(libm_$(TARGET_ARCH)_src_files)
|
||||
LOCAL_SYSTEM_SHARED_LIBRARIES := libc
|
||||
|
||||
include $(BUILD_STATIC_LIBRARY)
|
||||
|
||||
# libm.so
|
||||
# ========================================================
|
||||
|
||||
#
|
||||
# libm.so for target.
|
||||
#
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
LOCAL_SRC_FILES := \
|
||||
$(libm_common_src_files)
|
||||
|
||||
LOCAL_ARM_MODE := arm
|
||||
|
||||
LOCAL_C_INCLUDES += $(libm_common_includes)
|
||||
LOCAL_CFLAGS := $(libm_common_cflags)
|
||||
|
||||
LOCAL_MODULE:= libm
|
||||
LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
|
||||
|
||||
LOCAL_SYSTEM_SHARED_LIBRARIES := libc
|
||||
|
||||
LOCAL_WHOLE_STATIC_LIBRARIES := libm
|
||||
include $(BUILD_SHARED_LIBRARY)
|
||||
|
@ -23,18 +23,29 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $FreeBSD: src/lib/libc/arm/_fpmath.h,v 1.4 2005/03/20 00:53:52 cognet Exp $
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#if defined(__VFP_FP__)
|
||||
#define _IEEE_WORD_ORDER _BYTE_ORDER
|
||||
#else
|
||||
#define _IEEE_WORD_ORDER _BIG_ENDIAN
|
||||
#endif
|
||||
|
||||
union IEEEl2bits {
|
||||
long double e;
|
||||
struct {
|
||||
#ifndef __ARMEB__
|
||||
#if _BYTE_ORDER == _LITTLE_ENDIAN
|
||||
#if _IEEE_WORD_ORDER == _LITTLE_ENDIAN
|
||||
unsigned int manl :32;
|
||||
#endif
|
||||
unsigned int manh :20;
|
||||
unsigned int exp :11;
|
||||
unsigned int sign :1;
|
||||
#else
|
||||
#if _IEEE_WORD_ORDER == _BIG_ENDIAN
|
||||
unsigned int manl :32;
|
||||
#endif
|
||||
#else /* _BYTE_ORDER == _LITTLE_ENDIAN */
|
||||
unsigned int sign :1;
|
||||
unsigned int exp :11;
|
||||
unsigned int manh :20;
|
||||
@ -44,9 +55,10 @@ union IEEEl2bits {
|
||||
};
|
||||
|
||||
#define LDBL_NBIT 0
|
||||
#define LDBL_IMPLICIT_NBIT
|
||||
#define mask_nbit_l(u) ((void)0)
|
||||
|
||||
#define LDBL_MANH_SIZE 32
|
||||
#define LDBL_MANH_SIZE 20
|
||||
#define LDBL_MANL_SIZE 32
|
||||
|
||||
#define LDBL_TO_ARRAY32(u, a) do { \
|
||||
|
46
libm/digittoint.c
Normal file
46
libm/digittoint.c
Normal file
@ -0,0 +1,46 @@
|
||||
/*-
|
||||
* Copyright (c) 2007 David Schultz
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY 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 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.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
/* digittoint is in the FreeBSD C library, but implemented in terms of locale stuff. */
|
||||
__LIBC_HIDDEN__ int digittoint(char ch) {
|
||||
int d = ch - '0';
|
||||
if ((unsigned) d < 10) {
|
||||
return d;
|
||||
}
|
||||
d = ch - 'a';
|
||||
if ((unsigned) d < 6) {
|
||||
return d + 10;
|
||||
}
|
||||
d = ch - 'A';
|
||||
if ((unsigned) d < 6) {
|
||||
return d + 10;
|
||||
}
|
||||
return -1;
|
||||
}
|
68
libm/fake_long_double.c
Normal file
68
libm/fake_long_double.c
Normal file
@ -0,0 +1,68 @@
|
||||
/*
|
||||
* Copyright (C) 2013 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include <float.h>
|
||||
#include <math.h>
|
||||
|
||||
extern int __isinf(double); /* isinf.c */
|
||||
int (isinf)(double a1) { return __isinf(a1); }
|
||||
|
||||
/*
|
||||
* The BSD "long double" functions are broken when sizeof(long double) == sizeof(double).
|
||||
* Android works around those cases by replacing the broken functions with our own trivial stubs
|
||||
* that call the regular "double" function.
|
||||
*/
|
||||
|
||||
int __fpclassifyl(long double a1) { return __fpclassifyd(a1); }
|
||||
int __isfinitel(long double a1) { return __isfinite(a1); }
|
||||
int __isinfl(long double a1) { return __isinf(a1); }
|
||||
int __isnanl(long double a1) { return isnan(a1); }
|
||||
int __isnormall(long double a1) { return __isnormal(a1); }
|
||||
int __signbitl(long double a1) { return __signbit(a1); }
|
||||
|
||||
long double acoshl(long double a1) { return acosh(a1); }
|
||||
long double asinhl(long double a1) { return asinh(a1); }
|
||||
long double atanhl(long double a1) { return atanh(a1); }
|
||||
long double cbrtl(long double a1) { return cbrt(a1); }
|
||||
long double copysignl(long double a1, long double a2) { return copysign(a1, a2); }
|
||||
long double coshl(long double a1) { return cosh(a1); }
|
||||
long double erfcl(long double a1) { return erfc(a1); }
|
||||
long double erfl(long double a1) { return erf(a1); }
|
||||
long double expm1l(long double a1) { return expm1(a1); }
|
||||
long double fabsl(long double a1) { return fabs(a1); }
|
||||
long double fmaxl(long double a1, long double a2) { return fmax(a1, a2); }
|
||||
long double fmodl(long double a1, long double a2) { return fmod(a1, a2); }
|
||||
long double fminl(long double a1, long double a2) { return fmin(a1, a2); }
|
||||
int ilogbl(long double a1) { return ilogb(a1); }
|
||||
long double lgammal(long double a1) { return lgamma(a1); }
|
||||
long long llrintl(long double a1) { return llrint(a1); }
|
||||
long double log10l(long double a1) { return log10(a1); }
|
||||
long double log1pl(long double a1) { return log1p(a1); }
|
||||
long double log2l(long double a1) { return log2(a1); }
|
||||
long double logl(long double a1) { return log(a1); }
|
||||
long lrintl(long double a1) { return lrint(a1); }
|
||||
long long llroundl(long double a1) { return llround(a1); }
|
||||
long lroundl(long double a1) { return lround(a1); }
|
||||
long double modfl(long double a1, long double* a2) { return modf(a1, (double*) a2); }
|
||||
long double powl(long double a1, long double a2) { return pow(a1, a2); }
|
||||
long double rintl(long double a1) { return rint(a1); }
|
||||
long double roundl(long double a1) { return round(a1); }
|
||||
long double scalbnl(long double a1, int a2) { return scalbn(a1, a2); }
|
||||
long double significandl(long double a1) { return significand(a1); }
|
||||
long double sinhl(long double a1) { return sinh(a1); }
|
||||
long double sqrtl(long double a1) { return sqrt(a1); }
|
||||
long double tanhl(long double a1) { return tanh(a1); }
|
||||
long double tgammal(long double a1) { return tgamma(a1); }
|
@ -32,7 +32,7 @@
|
||||
#include <math.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include "src/fpmath.h"
|
||||
#include "fpmath.h"
|
||||
|
||||
int
|
||||
__fpclassifyf(float f)
|
||||
|
@ -70,3 +70,15 @@ union IEEEd2bits {
|
||||
#endif
|
||||
} bits;
|
||||
};
|
||||
|
||||
/*
|
||||
* The BSD "long double" functions are broken when sizeof(long double) == sizeof(double).
|
||||
* Android works around those cases by replacing the broken functions with our own trivial stubs
|
||||
* that call the regular "double" function.
|
||||
*/
|
||||
#define __fpclassifyl __broken__fpclassify
|
||||
#define __isfinitel __broken__isfinitel
|
||||
#define __isinfl __broken__isinfl
|
||||
#define __isnanl __broken__isnanl
|
||||
#define __isnormall __broken__isnormall
|
||||
#define __signbitl __broken_signbitl
|
@ -23,7 +23,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $FreeBSD: src/lib/libc/i386/_fpmath.h,v 1.5 2005/03/07 04:55:22 das Exp $
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
union IEEEl2bits {
|
||||
@ -35,6 +35,11 @@ union IEEEl2bits {
|
||||
unsigned int sign :1;
|
||||
unsigned int junk :16;
|
||||
} bits;
|
||||
struct {
|
||||
unsigned long long man :64;
|
||||
unsigned int expsign :16;
|
||||
unsigned int junk :16;
|
||||
} xbits;
|
||||
};
|
||||
|
||||
#define LDBL_NBIT 0x80000000
|
||||
|
92
libm/include/complex.h
Normal file
92
libm/include/complex.h
Normal file
@ -0,0 +1,92 @@
|
||||
/*-
|
||||
* Copyright (c) 2001-2011 The FreeBSD Project.
|
||||
* 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.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _COMPLEX_H
|
||||
#define _COMPLEX_H
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
#ifdef __GNUC__
|
||||
#if __STDC_VERSION__ < 199901
|
||||
#define _Complex __complex__
|
||||
#endif
|
||||
#define _Complex_I ((float _Complex)1.0i)
|
||||
#endif
|
||||
|
||||
#ifdef __generic
|
||||
_Static_assert(__generic(_Complex_I, float _Complex, 1, 0),
|
||||
"_Complex_I must be of type float _Complex");
|
||||
#endif
|
||||
|
||||
#define complex _Complex
|
||||
#define I _Complex_I
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
double cabs(double complex);
|
||||
float cabsf(float complex);
|
||||
long double cabsl(long double complex);
|
||||
double carg(double complex);
|
||||
float cargf(float complex);
|
||||
long double cargl(long double complex);
|
||||
double complex ccos(double complex);
|
||||
float complex ccosf(float complex);
|
||||
double complex ccosh(double complex);
|
||||
float complex ccoshf(float complex);
|
||||
double complex cexp(double complex);
|
||||
float complex cexpf(float complex);
|
||||
double cimag(double complex) __pure2;
|
||||
float cimagf(float complex) __pure2;
|
||||
long double cimagl(long double complex) __pure2;
|
||||
double complex conj(double complex) __pure2;
|
||||
float complex conjf(float complex) __pure2;
|
||||
long double complex
|
||||
conjl(long double complex) __pure2;
|
||||
float complex cprojf(float complex) __pure2;
|
||||
double complex cproj(double complex) __pure2;
|
||||
long double complex
|
||||
cprojl(long double complex) __pure2;
|
||||
double creal(double complex) __pure2;
|
||||
float crealf(float complex) __pure2;
|
||||
long double creall(long double complex) __pure2;
|
||||
double complex csin(double complex);
|
||||
float complex csinf(float complex);
|
||||
double complex csinh(double complex);
|
||||
float complex csinhf(float complex);
|
||||
double complex csqrt(double complex);
|
||||
float complex csqrtf(float complex);
|
||||
long double complex
|
||||
csqrtl(long double complex);
|
||||
double complex ctan(double complex);
|
||||
float complex ctanf(float complex);
|
||||
double complex ctanh(double complex);
|
||||
float complex ctanhf(float complex);
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* _COMPLEX_H */
|
@ -11,18 +11,16 @@
|
||||
|
||||
/*
|
||||
* from: @(#)fdlibm.h 5.1 93/09/24
|
||||
* $FreeBSD: src/lib/msun/src/math.h,v 1.61 2005/04/16 21:12:47 das Exp $
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MATH_H_
|
||||
#define _MATH_H_
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/_types.h>
|
||||
#include <limits.h>
|
||||
|
||||
#define __pure2
|
||||
|
||||
/*
|
||||
* ANSI/POSIX
|
||||
*/
|
||||
@ -36,37 +34,29 @@ extern const union __nan_un {
|
||||
float __uf;
|
||||
} __nan;
|
||||
|
||||
/* #if __GNUC_PREREQ__(3, 3) || (defined(__INTEL_COMPILER) && __INTEL_COMPILER >= 800) */
|
||||
#if 1
|
||||
#if __GNUC_PREREQ__(3, 3) || (defined(__INTEL_COMPILER) && __INTEL_COMPILER >= 800)
|
||||
#define __MATH_BUILTIN_CONSTANTS
|
||||
#endif
|
||||
|
||||
/* #if __GNUC_PREREQ__(3, 0) && !defined(__INTEL_COMPILER) */
|
||||
#if 1
|
||||
#if __GNUC_PREREQ__(3, 0) && !defined(__INTEL_COMPILER)
|
||||
#define __MATH_BUILTIN_RELOPS
|
||||
#endif
|
||||
|
||||
/* #ifdef __MATH_BUILTIN_CONSTANTS */
|
||||
#if 1
|
||||
#ifdef __MATH_BUILTIN_CONSTANTS
|
||||
#define HUGE_VAL __builtin_huge_val()
|
||||
#else
|
||||
#define HUGE_VAL (__infinity.__ud)
|
||||
#endif
|
||||
|
||||
/* #if __ISO_C_VISIBLE >= 1999 */
|
||||
#if 0
|
||||
#define FP_ILOGB0 (-__INT_MAX)
|
||||
#define FP_ILOGBNAN __INT_MAX
|
||||
#else
|
||||
#define FP_ILOGB0 (-INT_MAX)
|
||||
#define FP_ILOGBNAN INT_MAX
|
||||
#endif
|
||||
#if __ISO_C_VISIBLE >= 1999
|
||||
#define FP_ILOGB0 (-INT_MAX) /* Android-changed */
|
||||
#define FP_ILOGBNAN INT_MAX /* Android-changed */
|
||||
|
||||
#ifdef __MATH_BUILTIN_CONSTANTS
|
||||
#define HUGE_VALF __builtin_huge_valf()
|
||||
#define HUGE_VALL __builtin_huge_vall()
|
||||
#define INFINITY __builtin_inf()
|
||||
#define NAN __builtin_nan("")
|
||||
#define INFINITY __builtin_inff()
|
||||
#define NAN __builtin_nanf("")
|
||||
#else
|
||||
#define HUGE_VALF (float)HUGE_VAL
|
||||
#define HUGE_VALL (long double)HUGE_VAL
|
||||
@ -78,14 +68,11 @@ extern const union __nan_un {
|
||||
#define MATH_ERREXCEPT 2
|
||||
#define math_errhandling MATH_ERREXCEPT
|
||||
|
||||
/* XXX We need a <machine/math.h>. */
|
||||
#if defined(__ia64__) || defined(__sparc64__)
|
||||
#define FP_FAST_FMA
|
||||
#endif
|
||||
#define FP_FAST_FMAF 1
|
||||
#ifdef __ia64__
|
||||
#define FP_FAST_FMAL
|
||||
#define FP_FAST_FMA 1
|
||||
#define FP_FAST_FMAL 1
|
||||
#endif
|
||||
#define FP_FAST_FMAF
|
||||
|
||||
/* Symbolic constants to classify floating point numbers. */
|
||||
#define FP_INFINITE 0x01
|
||||
@ -104,10 +91,10 @@ extern const union __nan_un {
|
||||
: __isfinitel(x))
|
||||
#define isinf(x) \
|
||||
((sizeof (x) == sizeof (float)) ? __isinff(x) \
|
||||
: (sizeof (x) == sizeof (double)) ? __isinf(x) \
|
||||
: (sizeof (x) == sizeof (double)) ? isinf(x) \
|
||||
: __isinfl(x))
|
||||
#define isnan(x) \
|
||||
((sizeof (x) == sizeof (float)) ? isnanf(x) \
|
||||
((sizeof (x) == sizeof (float)) ? __isnanf(x) \
|
||||
: (sizeof (x) == sizeof (double)) ? isnan(x) \
|
||||
: __isnanl(x))
|
||||
#define isnormal(x) \
|
||||
@ -137,16 +124,14 @@ extern const union __nan_un {
|
||||
: (sizeof (x) == sizeof (double)) ? __signbit(x) \
|
||||
: __signbitl(x))
|
||||
|
||||
#if 0
|
||||
typedef __double_t double_t;
|
||||
typedef __float_t float_t;
|
||||
#endif
|
||||
/* #endif */ /* __ISO_C_VISIBLE >= 1999 */
|
||||
#endif /* __ISO_C_VISIBLE >= 1999 */
|
||||
|
||||
/*
|
||||
* XOPEN/SVID
|
||||
*/
|
||||
/* #if __BSD_VISIBLE || __XSI_VISIBLE */
|
||||
#if __BSD_VISIBLE || __XSI_VISIBLE
|
||||
#define M_E 2.7182818284590452354 /* e */
|
||||
#define M_LOG2E 1.4426950408889634074 /* log 2e */
|
||||
#define M_LOG10E 0.43429448190325182765 /* log 10e */
|
||||
@ -163,7 +148,7 @@ typedef __float_t float_t;
|
||||
|
||||
#define MAXFLOAT ((float)3.40282346638528860e+38)
|
||||
extern int signgam;
|
||||
/* #endif */ /* __BSD_VISIBLE || __XSI_VISIBLE */
|
||||
#endif /* __BSD_VISIBLE || __XSI_VISIBLE */
|
||||
|
||||
#if __BSD_VISIBLE
|
||||
#if 0
|
||||
@ -190,8 +175,8 @@ int __isfinitef(float) __pure2;
|
||||
int __isfinite(double) __pure2;
|
||||
int __isfinitel(long double) __pure2;
|
||||
int __isinff(float) __pure2;
|
||||
int __isinf(double) __pure2;
|
||||
int __isinfl(long double) __pure2;
|
||||
int __isnanf(float) __pure2;
|
||||
int __isnanl(long double) __pure2;
|
||||
int __isnormalf(float) __pure2;
|
||||
int __isnormal(double) __pure2;
|
||||
@ -230,7 +215,7 @@ double fmod(double, double);
|
||||
/*
|
||||
* These functions are not in C90.
|
||||
*/
|
||||
/* #if __BSD_VISIBLE || __ISO_C_VISIBLE >= 1999 || __XSI_VISIBLE */
|
||||
#if __BSD_VISIBLE || __ISO_C_VISIBLE >= 1999 || __XSI_VISIBLE
|
||||
double acosh(double);
|
||||
double asinh(double);
|
||||
double atanh(double);
|
||||
@ -242,12 +227,13 @@ double expm1(double);
|
||||
double fma(double, double, double);
|
||||
double hypot(double, double);
|
||||
int ilogb(double) __pure2;
|
||||
/* int (isinf)(double) __pure2; */
|
||||
int (isinf)(double) __pure2;
|
||||
int (isnan)(double) __pure2;
|
||||
double lgamma(double);
|
||||
long long llrint(double);
|
||||
long long llround(double);
|
||||
double log1p(double);
|
||||
double log2(double);
|
||||
double logb(double);
|
||||
long lrint(double);
|
||||
long lround(double);
|
||||
@ -256,23 +242,26 @@ double nextafter(double, double);
|
||||
double remainder(double, double);
|
||||
double remquo(double, double, int *);
|
||||
double rint(double);
|
||||
/* #endif */ /* __BSD_VISIBLE || __ISO_C_VISIBLE >= 1999 || __XSI_VISIBLE */
|
||||
#endif /* __BSD_VISIBLE || __ISO_C_VISIBLE >= 1999 || __XSI_VISIBLE */
|
||||
|
||||
/* #if __BSD_VISIBLE || __XSI_VISIBLE */
|
||||
#if __BSD_VISIBLE || __XSI_VISIBLE
|
||||
double j0(double);
|
||||
double j1(double);
|
||||
double jn(int, double);
|
||||
double scalb(double, double);
|
||||
double y0(double);
|
||||
double y1(double);
|
||||
double yn(int, double);
|
||||
|
||||
/* #if __XSI_VISIBLE <= 500 || __BSD_VISIBLE */
|
||||
#if __XSI_VISIBLE <= 500 || __BSD_VISIBLE
|
||||
double gamma(double);
|
||||
/* #endif */
|
||||
/* #endif */ /* __BSD_VISIBLE || __XSI_VISIBLE */
|
||||
#endif
|
||||
|
||||
/* #if __BSD_VISIBLE || __ISO_C_VISIBLE >= 1999 */
|
||||
#if __XSI_VISIBLE <= 600 || __BSD_VISIBLE
|
||||
double scalb(double, double);
|
||||
#endif
|
||||
#endif /* __BSD_VISIBLE || __XSI_VISIBLE */
|
||||
|
||||
#if __BSD_VISIBLE || __ISO_C_VISIBLE >= 1999
|
||||
double copysign(double, double) __pure2;
|
||||
double fdim(double, double);
|
||||
double fmax(double, double) __pure2;
|
||||
@ -283,12 +272,12 @@ double scalbln(double, long);
|
||||
double scalbn(double, int);
|
||||
double tgamma(double);
|
||||
double trunc(double);
|
||||
/* #endif */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* BSD math library entry points
|
||||
*/
|
||||
/* #if __BSD_VISIBLE */
|
||||
#if __BSD_VISIBLE
|
||||
double drem(double, double);
|
||||
int finite(double) __pure2;
|
||||
int isnanf(float) __pure2;
|
||||
@ -304,10 +293,10 @@ double lgamma_r(double, int *);
|
||||
* IEEE Test Vector
|
||||
*/
|
||||
double significand(double);
|
||||
/* #endif */ /* __BSD_VISIBLE */
|
||||
#endif /* __BSD_VISIBLE */
|
||||
|
||||
/* float versions of ANSI/POSIX functions */
|
||||
/*#if __ISO_C_VISIBLE >= 1999 */
|
||||
#if __ISO_C_VISIBLE >= 1999
|
||||
float acosf(float);
|
||||
float asinf(float);
|
||||
float atanf(float);
|
||||
@ -328,6 +317,7 @@ int ilogbf(float) __pure2;
|
||||
float ldexpf(float, int);
|
||||
float log10f(float);
|
||||
float log1pf(float);
|
||||
float log2f(float);
|
||||
float logf(float);
|
||||
float modff(float, float *); /* fundamentally !__pure2 */
|
||||
|
||||
@ -370,12 +360,12 @@ float fdimf(float, float);
|
||||
float fmaf(float, float, float);
|
||||
float fmaxf(float, float) __pure2;
|
||||
float fminf(float, float) __pure2;
|
||||
/* #endif */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* float versions of BSD math library entry points
|
||||
*/
|
||||
/* #if __BSD_VISIBLE */
|
||||
#if __BSD_VISIBLE
|
||||
float dremf(float, float);
|
||||
int finitef(float) __pure2;
|
||||
float gammaf(float);
|
||||
@ -399,98 +389,92 @@ float lgammaf_r(float, int *);
|
||||
* float version of IEEE Test Vector
|
||||
*/
|
||||
float significandf(float);
|
||||
/* #endif */ /* __BSD_VISIBLE */
|
||||
#endif /* __BSD_VISIBLE */
|
||||
|
||||
/*
|
||||
* long double versions of ISO/POSIX math functions
|
||||
*/
|
||||
/* #if __ISO_C_VISIBLE >= 1999 */
|
||||
#if 0
|
||||
long double acoshl(long double);
|
||||
#if __ISO_C_VISIBLE >= 1999
|
||||
long double acosl(long double);
|
||||
long double asinhl(long double);
|
||||
long double asinl(long double);
|
||||
long double atan2l(long double, long double);
|
||||
long double atanhl(long double);
|
||||
long double atanl(long double);
|
||||
long double cbrtl(long double);
|
||||
#endif
|
||||
long double ceill(long double);
|
||||
long double copysignl(long double, long double) __pure2;
|
||||
#if 0
|
||||
long double coshl(long double);
|
||||
long double cosl(long double);
|
||||
long double erfcl(long double);
|
||||
long double erfl(long double);
|
||||
long double exp2l(long double);
|
||||
long double expl(long double);
|
||||
long double expm1l(long double);
|
||||
#endif
|
||||
long double fabsl(long double) __pure2;
|
||||
long double fdiml(long double, long double);
|
||||
long double floorl(long double);
|
||||
long double fmal(long double, long double, long double);
|
||||
long double fmaxl(long double, long double) __pure2;
|
||||
long double fminl(long double, long double) __pure2;
|
||||
#if 0
|
||||
long double fmodl(long double, long double);
|
||||
#endif
|
||||
long double frexpl(long double value, int *); /* fundamentally !__pure2 */
|
||||
#if 0
|
||||
long double hypotl(long double, long double);
|
||||
#endif
|
||||
int ilogbl(long double) __pure2;
|
||||
long double ldexpl(long double, int);
|
||||
#if 0
|
||||
long double lgammal(long double);
|
||||
long long llrintl(long double);
|
||||
#endif
|
||||
long long llroundl(long double);
|
||||
#if 0
|
||||
long double log10l(long double);
|
||||
long double log1pl(long double);
|
||||
long double log2l(long double);
|
||||
long double logbl(long double);
|
||||
long double logl(long double);
|
||||
long lrintl(long double);
|
||||
#endif
|
||||
long lroundl(long double);
|
||||
#if 0
|
||||
long double modfl(long double, long double *); /* fundamentally !__pure2 */
|
||||
long double nanl(const char *) __pure2;
|
||||
long double nearbyintl(long double);
|
||||
#endif
|
||||
long double nextafterl(long double, long double);
|
||||
double nexttoward(double, long double);
|
||||
float nexttowardf(float, long double);
|
||||
long double nexttowardl(long double, long double);
|
||||
#if 0
|
||||
long double powl(long double, long double);
|
||||
long double remainderl(long double, long double);
|
||||
long double remquol(long double, long double, int *);
|
||||
long double rintl(long double);
|
||||
#endif
|
||||
long double roundl(long double);
|
||||
long double scalblnl(long double, long);
|
||||
long double scalbnl(long double, int);
|
||||
#if 0
|
||||
long double sinhl(long double);
|
||||
long double sinl(long double);
|
||||
long double sqrtl(long double);
|
||||
long double tanhl(long double);
|
||||
long double tanl(long double);
|
||||
long double tgammal(long double);
|
||||
#endif
|
||||
long double truncl(long double);
|
||||
|
||||
/* BIONIC: GLibc compatibility - required by the ARM toolchain */
|
||||
#ifdef _GNU_SOURCE
|
||||
void sincos(double x, double *sin, double *cos);
|
||||
void sincosf(float x, float *sin, float *cos);
|
||||
void sincosl(long double x, long double *sin, long double *cos);
|
||||
#endif
|
||||
|
||||
/* #endif */ /* __ISO_C_VISIBLE >= 1999 */
|
||||
#endif /* __ISO_C_VISIBLE >= 1999 */
|
||||
__END_DECLS
|
||||
|
||||
#endif /* !_MATH_H_ */
|
||||
|
||||
/* separate header for cmath */
|
||||
#ifndef _MATH_EXTRA_H_
|
||||
#if __ISO_C_VISIBLE >= 1999
|
||||
#if _DECLARE_C99_LDBL_MATH
|
||||
|
||||
#define _MATH_EXTRA_H_
|
||||
|
||||
/*
|
||||
* extra long double versions of math functions for C99 and cmath
|
||||
*/
|
||||
__BEGIN_DECLS
|
||||
|
||||
long double acoshl(long double);
|
||||
long double asinhl(long double);
|
||||
long double atanhl(long double);
|
||||
long double coshl(long double);
|
||||
long double erfcl(long double);
|
||||
long double erfl(long double);
|
||||
long double expm1l(long double);
|
||||
long double lgammal(long double);
|
||||
long double log10l(long double);
|
||||
long double log1pl(long double);
|
||||
long double log2l(long double);
|
||||
long double logl(long double);
|
||||
long double powl(long double, long double);
|
||||
long double sinhl(long double);
|
||||
long double tanhl(long double);
|
||||
long double tgammal(long double);
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* !_DECLARE_C99_LDBL_MATH */
|
||||
#endif /* __ISO_C_VISIBLE >= 1999 */
|
||||
#endif /* !_MATH_EXTRA_H_ */
|
||||
|
@ -28,7 +28,7 @@
|
||||
|
||||
#include <math.h>
|
||||
#include <sys/cdefs.h>
|
||||
#include "src/fpmath.h"
|
||||
#include "fpmath.h"
|
||||
|
||||
/*
|
||||
* XXX These routines belong in libm, but they must remain in libc for
|
||||
@ -66,4 +66,3 @@ __isinfl(long double e)
|
||||
return (u.bits.exp == 2047 && u.bits.manl == 0 && u.bits.manh == 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -1,92 +0,0 @@
|
||||
.\" Copyright (c) 1991 The Regents of the University of California.
|
||||
.\" 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.
|
||||
.\" 3. All advertising materials mentioning features or use of this software
|
||||
.\" must display the following acknowledgement:
|
||||
.\" This product includes software developed by the University of
|
||||
.\" California, Berkeley and its contributors.
|
||||
.\" 4. Neither the name of the University nor the names of its contributors
|
||||
.\" may be used to endorse or promote products derived from this software
|
||||
.\" without specific prior written permission.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
|
||||
.\"
|
||||
.\" from: @(#)acos.3 5.1 (Berkeley) 5/2/91
|
||||
.\" $FreeBSD: src/lib/msun/man/acos.3,v 1.13 2005/01/14 23:28:28 das Exp $
|
||||
.\"
|
||||
.Dd January 14, 2005
|
||||
.Dt ACOS 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm acos ,
|
||||
.Nm acosf
|
||||
.Nd arc cosine functions
|
||||
.Sh LIBRARY
|
||||
.Lb libm
|
||||
.Sh SYNOPSIS
|
||||
.In math.h
|
||||
.Ft double
|
||||
.Fn acos "double x"
|
||||
.Ft float
|
||||
.Fn acosf "float x"
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Fn acos
|
||||
and the
|
||||
.Fn acosf
|
||||
functions compute the principal value of the arc cosine of
|
||||
.Fa x .
|
||||
A domain error occurs for arguments not in the range
|
||||
.Bq -1 , +1 .
|
||||
For a discussion of error due to roundoff, see
|
||||
.Xr math 3 .
|
||||
.Sh RETURN VALUES
|
||||
The
|
||||
.Fn acos
|
||||
and the
|
||||
.Fn acosf
|
||||
functions return the arc cosine in the range
|
||||
.Bq 0 , \*(Pi
|
||||
radians.
|
||||
If:
|
||||
.Bd -unfilled -offset indent
|
||||
.Pf \&| Ns Ar x Ns \&| > 1 ,
|
||||
.Ed
|
||||
.Pp
|
||||
.Fn acos x
|
||||
raises an invalid exception and returns an \*(Na.
|
||||
.Sh SEE ALSO
|
||||
.Xr asin 3 ,
|
||||
.Xr atan 3 ,
|
||||
.Xr atan2 3 ,
|
||||
.Xr cos 3 ,
|
||||
.Xr cosh 3 ,
|
||||
.Xr fenv 3 ,
|
||||
.Xr math 3 ,
|
||||
.Xr sin 3 ,
|
||||
.Xr sinh 3 ,
|
||||
.Xr tan 3 ,
|
||||
.Xr tanh 3
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Fn acos
|
||||
function conforms to
|
||||
.St -isoC .
|
@ -1,82 +0,0 @@
|
||||
.\" Copyright (c) 1991 Regents of the University of California.
|
||||
.\" 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.
|
||||
.\" 3. All advertising materials mentioning features or use of this software
|
||||
.\" must display the following acknowledgement:
|
||||
.\" This product includes software developed by the University of
|
||||
.\" California, Berkeley and its contributors.
|
||||
.\" 4. Neither the name of the University nor the names of its contributors
|
||||
.\" may be used to endorse or promote products derived from this software
|
||||
.\" without specific prior written permission.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
|
||||
.\"
|
||||
.\" from: @(#)acosh.3 5.2 (Berkeley) 5/6/91
|
||||
.\" $FreeBSD: src/lib/msun/man/acosh.3,v 1.11 2005/01/14 23:28:28 das Exp $
|
||||
.\"
|
||||
.Dd January 14, 2005
|
||||
.Dt ACOSH 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm acosh ,
|
||||
.Nm acoshf
|
||||
.Nd inverse hyperbolic cosine functions
|
||||
.Sh LIBRARY
|
||||
.Lb libm
|
||||
.Sh SYNOPSIS
|
||||
.In math.h
|
||||
.Ft double
|
||||
.Fn acosh "double x"
|
||||
.Ft float
|
||||
.Fn acoshf "float x"
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Fn acosh
|
||||
and the
|
||||
.Fn acoshf
|
||||
functions compute the inverse hyperbolic cosine
|
||||
of the real
|
||||
argument
|
||||
.Ar x .
|
||||
For a discussion of error due to roundoff, see
|
||||
.Xr math 3 .
|
||||
.Sh RETURN VALUES
|
||||
The
|
||||
.Fn acosh
|
||||
and the
|
||||
.Fn acoshf
|
||||
functions
|
||||
return the inverse hyperbolic cosine of
|
||||
.Ar x .
|
||||
If the argument is less than 1,
|
||||
.Fn acosh
|
||||
raises an invalid exception and returns an \*(Na.
|
||||
.Sh SEE ALSO
|
||||
.Xr asinh 3 ,
|
||||
.Xr atanh 3 ,
|
||||
.Xr exp 3 ,
|
||||
.Xr fenv 3 ,
|
||||
.Xr math 3
|
||||
.Sh HISTORY
|
||||
The
|
||||
.Fn acosh
|
||||
function appeared in
|
||||
.Bx 4.3 .
|
@ -1,94 +0,0 @@
|
||||
.\" Copyright (c) 1991 The Regents of the University of California.
|
||||
.\" 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.
|
||||
.\" 3. All advertising materials mentioning features or use of this software
|
||||
.\" must display the following acknowledgement:
|
||||
.\" This product includes software developed by the University of
|
||||
.\" California, Berkeley and its contributors.
|
||||
.\" 4. Neither the name of the University nor the names of its contributors
|
||||
.\" may be used to endorse or promote products derived from this software
|
||||
.\" without specific prior written permission.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
|
||||
.\"
|
||||
.\" from: @(#)asin.3 5.1 (Berkeley) 5/2/91
|
||||
.\" $FreeBSD: src/lib/msun/man/asin.3,v 1.15 2005/01/14 23:28:28 das Exp $
|
||||
.\"
|
||||
.Dd January 14, 2005
|
||||
.Dt ASIN 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm asin ,
|
||||
.Nm asinf
|
||||
.Nd arc sine functions
|
||||
.Sh LIBRARY
|
||||
.Lb libm
|
||||
.Sh SYNOPSIS
|
||||
.In math.h
|
||||
.Ft double
|
||||
.Fn asin "double x"
|
||||
.Ft float
|
||||
.Fn asinf "float x"
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Fn asin
|
||||
and the
|
||||
.Fn asinf
|
||||
functions compute the principal value of the arc sine of
|
||||
.Fa x .
|
||||
A domain error occurs for arguments not in the range
|
||||
.Bq -1 , +1 .
|
||||
For a discussion of error due to roundoff, see
|
||||
.Xr math 3 .
|
||||
.Sh RETURN VALUES
|
||||
The
|
||||
.Fn asin
|
||||
and the
|
||||
.Fn asinf
|
||||
functions return the arc sine in the range
|
||||
.Bk -words
|
||||
.Bq -\*(Pi/2 , +\*(Pi/2
|
||||
.Ek
|
||||
radians.
|
||||
If:
|
||||
.Bd -unfilled -offset indent
|
||||
.Pf \&| Ns Ar x Ns \&| > 1
|
||||
.Ed
|
||||
.Pp
|
||||
.Fn asin x
|
||||
raises an invalid exception and returns an \*(Na.
|
||||
.Sh SEE ALSO
|
||||
.Xr acos 3 ,
|
||||
.Xr atan 3 ,
|
||||
.Xr atan2 3 ,
|
||||
.Xr cos 3 ,
|
||||
.Xr cosh 3 ,
|
||||
.Xr fenv 3 ,
|
||||
.Xr math 3 ,
|
||||
.Xr sin 3 ,
|
||||
.Xr sinh 3 ,
|
||||
.Xr tan 3 ,
|
||||
.Xr tanh 3
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Fn asin
|
||||
function conforms to
|
||||
.St -isoC .
|
@ -1,78 +0,0 @@
|
||||
.\" Copyright (c) 1985, 1991 Regents of the University of California.
|
||||
.\" 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.
|
||||
.\" 3. All advertising materials mentioning features or use of this software
|
||||
.\" must display the following acknowledgement:
|
||||
.\" This product includes software developed by the University of
|
||||
.\" California, Berkeley and its contributors.
|
||||
.\" 4. Neither the name of the University nor the names of its contributors
|
||||
.\" may be used to endorse or promote products derived from this software
|
||||
.\" without specific prior written permission.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
|
||||
.\"
|
||||
.\" from: @(#)asinh.3 6.4 (Berkeley) 5/6/91
|
||||
.\" $FreeBSD: src/lib/msun/man/asinh.3,v 1.10 2001/10/13 12:23:22 bde Exp $
|
||||
.\"
|
||||
.Dd May 6, 1991
|
||||
.Dt ASINH 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm asinh ,
|
||||
.Nm asinhf
|
||||
.Nd inverse hyperbolic sine functions
|
||||
.Sh LIBRARY
|
||||
.Lb libm
|
||||
.Sh SYNOPSIS
|
||||
.In math.h
|
||||
.Ft double
|
||||
.Fn asinh "double x"
|
||||
.Ft float
|
||||
.Fn asinhf "float x"
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Fn asinh
|
||||
and the
|
||||
.Fn asinhf
|
||||
functions compute the inverse hyperbolic sine
|
||||
of the real
|
||||
argument
|
||||
.Ar x .
|
||||
For a discussion of error due to roundoff, see
|
||||
.Xr math 3 .
|
||||
.Sh RETURN VALUES
|
||||
The
|
||||
.Fn asinh
|
||||
and the
|
||||
.Fn asinhf
|
||||
functions
|
||||
return the inverse hyperbolic sine of
|
||||
.Ar x .
|
||||
.Sh SEE ALSO
|
||||
.Xr acosh 3 ,
|
||||
.Xr atanh 3 ,
|
||||
.Xr exp 3 ,
|
||||
.Xr math 3
|
||||
.Sh HISTORY
|
||||
The
|
||||
.Fn asinh
|
||||
function appeared in
|
||||
.Bx 4.3 .
|
@ -1,84 +0,0 @@
|
||||
.\" Copyright (c) 1991 The Regents of the University of California.
|
||||
.\" 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.
|
||||
.\" 3. All advertising materials mentioning features or use of this software
|
||||
.\" must display the following acknowledgement:
|
||||
.\" This product includes software developed by the University of
|
||||
.\" California, Berkeley and its contributors.
|
||||
.\" 4. Neither the name of the University nor the names of its contributors
|
||||
.\" may be used to endorse or promote products derived from this software
|
||||
.\" without specific prior written permission.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
|
||||
.\"
|
||||
.\" from: @(#)atan.3 5.1 (Berkeley) 5/2/91
|
||||
.\" $FreeBSD: src/lib/msun/man/atan.3,v 1.10 2001/10/13 12:23:22 bde Exp $
|
||||
.\"
|
||||
.Dd May 2, 1991
|
||||
.Dt ATAN 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm atan ,
|
||||
.Nm atanf
|
||||
.Nd arc tangent functions of one variable
|
||||
.Sh LIBRARY
|
||||
.Lb libm
|
||||
.Sh SYNOPSIS
|
||||
.In math.h
|
||||
.Ft double
|
||||
.Fn atan "double x"
|
||||
.Ft float
|
||||
.Fn atanf "float x"
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Fn atan
|
||||
and the
|
||||
.Fn atanf
|
||||
functions compute the principal value of the arc tangent of
|
||||
.Fa x .
|
||||
For a discussion of error due to roundoff, see
|
||||
.Xr math 3 .
|
||||
.Sh RETURN VALUES
|
||||
The
|
||||
.Fn atan
|
||||
and the
|
||||
.Fn atanf
|
||||
function returns the arc tangent in the range
|
||||
.Bk -words
|
||||
.Bq -\*(Pi/2 , +\*(Pi/2
|
||||
.Ek
|
||||
radians.
|
||||
.Sh SEE ALSO
|
||||
.Xr acos 3 ,
|
||||
.Xr asin 3 ,
|
||||
.Xr atan2 3 ,
|
||||
.Xr cos 3 ,
|
||||
.Xr cosh 3 ,
|
||||
.Xr math 3 ,
|
||||
.Xr sin 3 ,
|
||||
.Xr sinh 3 ,
|
||||
.Xr tan 3 ,
|
||||
.Xr tanh 3
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Fn atan
|
||||
function conforms to
|
||||
.St -isoC .
|
187
libm/man/atan2.3
187
libm/man/atan2.3
@ -1,187 +0,0 @@
|
||||
.\" Copyright (c) 1991 The Regents of the University of California.
|
||||
.\" 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.
|
||||
.\" 3. All advertising materials mentioning features or use of this software
|
||||
.\" must display the following acknowledgement:
|
||||
.\" This product includes software developed by the University of
|
||||
.\" California, Berkeley and its contributors.
|
||||
.\" 4. Neither the name of the University nor the names of its contributors
|
||||
.\" may be used to endorse or promote products derived from this software
|
||||
.\" without specific prior written permission.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
|
||||
.\"
|
||||
.\" from: @(#)atan2.3 5.1 (Berkeley) 5/2/91
|
||||
.\" $FreeBSD: src/lib/msun/man/atan2.3,v 1.14 2005/01/28 21:13:34 ru Exp $
|
||||
.\"
|
||||
.Dd January 14, 2005
|
||||
.Dt ATAN2 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm atan2 ,
|
||||
.Nm atan2f
|
||||
.Nd arc tangent functions of two variables
|
||||
.Sh LIBRARY
|
||||
.Lb libm
|
||||
.Sh SYNOPSIS
|
||||
.In math.h
|
||||
.Ft double
|
||||
.Fn atan2 "double y" "double x"
|
||||
.Ft float
|
||||
.Fn atan2f "float y" "float x"
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Fn atan2
|
||||
and the
|
||||
.Fn atan2f
|
||||
functions compute the principal value of the arc tangent of
|
||||
.Fa y/ Ns Ar x ,
|
||||
using the signs of both arguments to determine the quadrant of
|
||||
the return value.
|
||||
.Sh RETURN VALUES
|
||||
The
|
||||
.Fn atan2
|
||||
and the
|
||||
.Fn atan2f
|
||||
functions, if successful,
|
||||
return the arc tangent of
|
||||
.Fa y/ Ns Ar x
|
||||
in the range
|
||||
.Bk -words
|
||||
.Bq \&- Ns \*(Pi , \&+ Ns \*(Pi
|
||||
.Ek
|
||||
radians.
|
||||
Here are some of the special cases:
|
||||
.Bl -column atan_(y,x)_:=____ sign(y)_(Pi_atan2(Xy_xX))___
|
||||
.It Fn atan2 y x No := Ta
|
||||
.Fn atan y/x Ta
|
||||
if
|
||||
.Ar x
|
||||
> 0,
|
||||
.It Ta sign( Ns Ar y Ns )*(\*(Pi -
|
||||
.Fn atan "\\*(Bay/x\\*(Ba" ) Ta
|
||||
if
|
||||
.Ar x
|
||||
< 0,
|
||||
.It Ta
|
||||
.No 0 Ta
|
||||
if x = y = 0, or
|
||||
.It Ta
|
||||
.Pf sign( Ar y Ns )*\\*(Pi/2 Ta
|
||||
if
|
||||
.Ar x
|
||||
= 0 \(!=
|
||||
.Ar y .
|
||||
.El
|
||||
.Sh NOTES
|
||||
The function
|
||||
.Fn atan2
|
||||
defines "if x > 0,"
|
||||
.Fn atan2 0 0
|
||||
= 0 despite that previously
|
||||
.Fn atan2 0 0
|
||||
may have generated an error message.
|
||||
The reasons for assigning a value to
|
||||
.Fn atan2 0 0
|
||||
are these:
|
||||
.Bl -enum -offset indent
|
||||
.It
|
||||
Programs that test arguments to avoid computing
|
||||
.Fn atan2 0 0
|
||||
must be indifferent to its value.
|
||||
Programs that require it to be invalid are vulnerable
|
||||
to diverse reactions to that invalidity on diverse computer systems.
|
||||
.It
|
||||
The
|
||||
.Fn atan2
|
||||
function is used mostly to convert from rectangular (x,y)
|
||||
to polar
|
||||
.if n\
|
||||
(r,theta)
|
||||
.if t\
|
||||
(r,\(*h)
|
||||
coordinates that must satisfy x =
|
||||
.if n\
|
||||
r\(**cos theta
|
||||
.if t\
|
||||
r\(**cos\(*h
|
||||
and y =
|
||||
.if n\
|
||||
r\(**sin theta.
|
||||
.if t\
|
||||
r\(**sin\(*h.
|
||||
These equations are satisfied when (x=0,y=0)
|
||||
is mapped to
|
||||
.if n \
|
||||
(r=0,theta=0).
|
||||
.if t \
|
||||
(r=0,\(*h=0).
|
||||
In general, conversions to polar coordinates
|
||||
should be computed thus:
|
||||
.Bd -unfilled -offset indent
|
||||
.if n \{\
|
||||
r := hypot(x,y); ... := sqrt(x\(**x+y\(**y)
|
||||
theta := atan2(y,x).
|
||||
.\}
|
||||
.if t \{\
|
||||
r := hypot(x,y); ... := \(sr(x\u\s82\s10\d+y\u\s82\s10\d)
|
||||
\(*h := atan2(y,x).
|
||||
.\}
|
||||
.Ed
|
||||
.It
|
||||
The foregoing formulas need not be altered to cope in a
|
||||
reasonable way with signed zeros and infinities
|
||||
on a machine that conforms to
|
||||
.Tn IEEE 754 ;
|
||||
the versions of
|
||||
.Xr hypot 3
|
||||
and
|
||||
.Fn atan2
|
||||
provided for
|
||||
such a machine are designed to handle all cases.
|
||||
That is why
|
||||
.Fn atan2 \(+-0 \-0
|
||||
= \(+-\*(Pi
|
||||
for instance.
|
||||
In general the formulas above are equivalent to these:
|
||||
.Bd -unfilled -offset indent
|
||||
.if n \
|
||||
r := sqrt(x\(**x+y\(**y); if r = 0 then x := copysign(1,x);
|
||||
.if t \
|
||||
r := \(sr(x\(**x+y\(**y);\0\0if r = 0 then x := copysign(1,x);
|
||||
.Ed
|
||||
.El
|
||||
.Sh SEE ALSO
|
||||
.Xr acos 3 ,
|
||||
.Xr asin 3 ,
|
||||
.Xr atan 3 ,
|
||||
.Xr cos 3 ,
|
||||
.Xr cosh 3 ,
|
||||
.Xr math 3 ,
|
||||
.Xr sin 3 ,
|
||||
.Xr sinh 3 ,
|
||||
.Xr tan 3 ,
|
||||
.Xr tanh 3
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Fn atan2
|
||||
function conforms to
|
||||
.St -isoC .
|
@ -1,85 +0,0 @@
|
||||
.\" Copyright (c) 1985, 1991 Regents of the University of California.
|
||||
.\" 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.
|
||||
.\" 3. All advertising materials mentioning features or use of this software
|
||||
.\" must display the following acknowledgement:
|
||||
.\" This product includes software developed by the University of
|
||||
.\" California, Berkeley and its contributors.
|
||||
.\" 4. Neither the name of the University nor the names of its contributors
|
||||
.\" may be used to endorse or promote products derived from this software
|
||||
.\" without specific prior written permission.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
|
||||
.\"
|
||||
.\" from: @(#)atanh.3 5.2 (Berkeley) 5/6/91
|
||||
.\" $FreeBSD: src/lib/msun/man/atanh.3,v 1.13 2005/01/28 21:14:16 ru Exp $
|
||||
.\"
|
||||
.Dd January 14, 2005
|
||||
.Dt ATANH 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm atanh ,
|
||||
.Nm atanhf
|
||||
.Nd inverse hyperbolic tangent functions
|
||||
.Sh LIBRARY
|
||||
.Lb libm
|
||||
.Sh SYNOPSIS
|
||||
.In math.h
|
||||
.Ft double
|
||||
.Fn atanh "double x"
|
||||
.Ft float
|
||||
.Fn atanhf "float x"
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Fn atanh
|
||||
and the
|
||||
.Fn atanhf
|
||||
functions compute the inverse hyperbolic tangent
|
||||
of the real
|
||||
argument
|
||||
.Ar x .
|
||||
For a discussion of error due to roundoff, see
|
||||
.Xr math 3 .
|
||||
.Sh RETURN VALUES
|
||||
The
|
||||
.Fn atanh
|
||||
and the
|
||||
.Fn atanhf
|
||||
functions
|
||||
return the inverse hyperbolic tangent of
|
||||
.Ar x
|
||||
if successful.
|
||||
If the argument has absolute value 1, a divide-by-zero exception
|
||||
is raised and an infinity is returned.
|
||||
If
|
||||
.Ar |x|
|
||||
> 1, an invalid exception is raised and an \*(Na is returned.
|
||||
.Sh SEE ALSO
|
||||
.Xr acosh 3 ,
|
||||
.Xr asinh 3 ,
|
||||
.Xr exp 3 ,
|
||||
.Xr fenv 3 ,
|
||||
.Xr math 3
|
||||
.Sh HISTORY
|
||||
The
|
||||
.Fn atanh
|
||||
function appeared in
|
||||
.Bx 4.3 .
|
@ -1,82 +0,0 @@
|
||||
.\" Copyright (c) 1991 The Regents of the University of California.
|
||||
.\" 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.
|
||||
.\" 3. All advertising materials mentioning features or use of this software
|
||||
.\" must display the following acknowledgement:
|
||||
.\" This product includes software developed by the University of
|
||||
.\" California, Berkeley and its contributors.
|
||||
.\" 4. Neither the name of the University nor the names of its contributors
|
||||
.\" may be used to endorse or promote products derived from this software
|
||||
.\" without specific prior written permission.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
|
||||
.\"
|
||||
.\" from: @(#)ceil.3 5.1 (Berkeley) 5/2/91
|
||||
.\" $FreeBSD: src/lib/msun/man/ceil.3,v 1.15 2005/01/13 20:33:42 stefanf Exp $
|
||||
.\"
|
||||
.Dd January 13, 2005
|
||||
.Dt CEIL 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm ceil ,
|
||||
.Nm ceilf ,
|
||||
.Nm ceill
|
||||
.Nd smallest integral value greater than or equal to x
|
||||
.Sh LIBRARY
|
||||
.Lb libm
|
||||
.Sh SYNOPSIS
|
||||
.In math.h
|
||||
.Ft double
|
||||
.Fn ceil "double x"
|
||||
.Ft float
|
||||
.Fn ceilf "float x"
|
||||
.Ft "long double"
|
||||
.Fn ceill "long double x"
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Fn ceil ,
|
||||
.Fn ceilf
|
||||
and
|
||||
.Fn ceill
|
||||
functions return the smallest integral value
|
||||
greater than or equal to
|
||||
.Fa x ,
|
||||
expressed as a floating-point number.
|
||||
.Sh SEE ALSO
|
||||
.Xr abs 3 ,
|
||||
.Xr fabs 3 ,
|
||||
.Xr floor 3 ,
|
||||
.Xr ieee 3 ,
|
||||
.Xr math 3 ,
|
||||
.Xr rint 3 ,
|
||||
.Xr round 3 ,
|
||||
.Xr trunc 3
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Fn ceil
|
||||
function conforms to
|
||||
.St -isoC .
|
||||
The
|
||||
.Fn ceilf
|
||||
and
|
||||
.Fn ceill
|
||||
functions conform to
|
||||
.St -isoC-99 .
|
@ -1,96 +0,0 @@
|
||||
.\" Copyright (c) 2004 Stefan Farfeleder
|
||||
.\" 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.
|
||||
.\"
|
||||
.\" $FreeBSD: src/lib/msun/man/cimag.3,v 1.2 2005/01/13 10:43:01 ru Exp $
|
||||
.\"
|
||||
.Dd August 7, 2004
|
||||
.Dt CIMAG 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm cimag , cimagf , cimagl ,
|
||||
.Nm conj , conjf , conjl ,
|
||||
.Nm creal , crealf , creall
|
||||
.Nd "functions to manipulate complex numbers"
|
||||
.Sh LIBRARY
|
||||
.Lb libm
|
||||
.Sh SYNOPSIS
|
||||
.In complex.h
|
||||
.Ft double
|
||||
.Fn cimag "double complex z"
|
||||
.Ft float
|
||||
.Fn cimagf "float complex z"
|
||||
.Ft "long double"
|
||||
.Fn cimagl "long double complex z"
|
||||
.Ft "double complex"
|
||||
.Fn conj "double complex z"
|
||||
.Ft "float complex"
|
||||
.Fn conjf "float complex z"
|
||||
.Ft "long double complex"
|
||||
.Fn conjl "long double complex z"
|
||||
.Ft double
|
||||
.Fn creal "double complex z"
|
||||
.Ft float
|
||||
.Fn crealf "float complex z"
|
||||
.Ft "long double"
|
||||
.Fn creall "long double complex z"
|
||||
.Sh DESCRIPTION
|
||||
Let
|
||||
.Sm off
|
||||
.Fa a + b * Em i
|
||||
.Sm on
|
||||
denote the complex number
|
||||
.Fa z .
|
||||
.Pp
|
||||
The
|
||||
.Fn cimag
|
||||
functions return the imaginary part
|
||||
.Fa b .
|
||||
.Pp
|
||||
The
|
||||
.Fn conj
|
||||
functions return the complex conjugate
|
||||
.Sm off
|
||||
.Fa a - b * Em i .
|
||||
.Sm on
|
||||
.Pp
|
||||
The
|
||||
.Fn creal
|
||||
functions return the real part
|
||||
.Fa a .
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Fn cimag ,
|
||||
.Fn conj
|
||||
and
|
||||
.Fn creal
|
||||
functions conform to
|
||||
.St -isoC-99 .
|
||||
.Sh HISTORY
|
||||
The
|
||||
.Fn cimag ,
|
||||
.Fn conj
|
||||
and
|
||||
.Fn creal
|
||||
functions first appeared in
|
||||
.Fx 5.3 .
|
@ -1,90 +0,0 @@
|
||||
.\" Copyright (c) 1985, 1991 Regents of the University of California.
|
||||
.\" 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.
|
||||
.\" 3. All advertising materials mentioning features or use of this software
|
||||
.\" must display the following acknowledgement:
|
||||
.\" This product includes software developed by the University of
|
||||
.\" California, Berkeley and its contributors.
|
||||
.\" 4. Neither the name of the University nor the names of its contributors
|
||||
.\" may be used to endorse or promote products derived from this software
|
||||
.\" without specific prior written permission.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
|
||||
.\"
|
||||
.\" from: @(#)ieee.3 6.4 (Berkeley) 5/6/91
|
||||
.\" $FreeBSD: src/lib/msun/man/copysign.3,v 1.1 2005/01/27 05:46:16 das Exp $
|
||||
.\"
|
||||
.Dd January 26, 2005
|
||||
.Dt COPYSIGN 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm copysign ,
|
||||
.Nm copysignf ,
|
||||
.Nm copysignl
|
||||
.Nd copy sign
|
||||
.Sh LIBRARY
|
||||
.Lb libm
|
||||
.Sh SYNOPSIS
|
||||
.In math.h
|
||||
.Ft double
|
||||
.Fn copysign "double x" "double y"
|
||||
.Ft float
|
||||
.Fn copysignf "float x" "float y"
|
||||
.Ft long double
|
||||
.Fn copysignl "long double x" "long double y"
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Fn copysign ,
|
||||
.Fn copysignf
|
||||
and
|
||||
.Fn copysignl
|
||||
functions
|
||||
return
|
||||
.Fa x
|
||||
with its sign changed to
|
||||
.Fa y Ns 's .
|
||||
.Sh SEE ALSO
|
||||
.Xr fabs 3 ,
|
||||
.Xr fdim 3 ,
|
||||
.Xr ieee 3 ,
|
||||
.Xr math 3
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Fn copysign ,
|
||||
.Fn copysignf ,
|
||||
and
|
||||
.Fn copysignl
|
||||
routines conform to
|
||||
.St -isoC-99 .
|
||||
They implement the Copysign function recommended by
|
||||
.St -ieee754 .
|
||||
.Sh HISTORY
|
||||
The
|
||||
.Fn copysign ,
|
||||
.Fn copysignf ,
|
||||
and
|
||||
.Fn copysignl
|
||||
functions appeared in
|
||||
.Bx 4.3 ,
|
||||
.Fx 2.0 ,
|
||||
and
|
||||
.Fx 5.3 ,
|
||||
respectively.
|
@ -1,83 +0,0 @@
|
||||
.\" Copyright (c) 1991 The Regents of the University of California.
|
||||
.\" 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.
|
||||
.\" 3. All advertising materials mentioning features or use of this software
|
||||
.\" must display the following acknowledgement:
|
||||
.\" This product includes software developed by the University of
|
||||
.\" California, Berkeley and its contributors.
|
||||
.\" 4. Neither the name of the University nor the names of its contributors
|
||||
.\" may be used to endorse or promote products derived from this software
|
||||
.\" without specific prior written permission.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
|
||||
.\"
|
||||
.\" from: @(#)cos.3 5.1 (Berkeley) 5/2/91
|
||||
.\" $FreeBSD: src/lib/msun/man/cos.3,v 1.11 2001/10/13 12:23:23 bde Exp $
|
||||
.\"
|
||||
.Dd May 2, 1991
|
||||
.Dt COS 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm cos ,
|
||||
.Nm cosf
|
||||
.Nd cosine functions
|
||||
.Sh LIBRARY
|
||||
.Lb libm
|
||||
.Sh SYNOPSIS
|
||||
.In math.h
|
||||
.Ft double
|
||||
.Fn cos "double x"
|
||||
.Ft float
|
||||
.Fn cosf "float x"
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Fn cos
|
||||
and the
|
||||
.Fn cosf
|
||||
functions compute the cosine of
|
||||
.Fa x
|
||||
(measured in radians).
|
||||
A large magnitude argument may yield a result with little or no
|
||||
significance.
|
||||
For a discussion of error due to roundoff, see
|
||||
.Xr math 3 .
|
||||
.Sh RETURN VALUES
|
||||
The
|
||||
.Fn cos
|
||||
and the
|
||||
.Fn cosf
|
||||
functions return the cosine value.
|
||||
.Sh SEE ALSO
|
||||
.Xr acos 3 ,
|
||||
.Xr asin 3 ,
|
||||
.Xr atan 3 ,
|
||||
.Xr atan2 3 ,
|
||||
.Xr cosh 3 ,
|
||||
.Xr math 3 ,
|
||||
.Xr sin 3 ,
|
||||
.Xr sinh 3 ,
|
||||
.Xr tan 3 ,
|
||||
.Xr tanh 3
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Fn cos
|
||||
function conforms to
|
||||
.St -isoC .
|
@ -1,72 +0,0 @@
|
||||
.\" Copyright (c) 1989, 1991 The Regents of the University of California.
|
||||
.\" 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.
|
||||
.\" 3. All advertising materials mentioning features or use of this software
|
||||
.\" must display the following acknowledgement:
|
||||
.\" This product includes software developed by the University of
|
||||
.\" California, Berkeley and its contributors.
|
||||
.\" 4. Neither the name of the University nor the names of its contributors
|
||||
.\" may be used to endorse or promote products derived from this software
|
||||
.\" without specific prior written permission.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
|
||||
.\"
|
||||
.\" from: @(#)cosh.3 5.1 (Berkeley) 5/2/91
|
||||
.\" $FreeBSD: src/lib/msun/man/cosh.3,v 1.12 2005/01/14 23:28:28 das Exp $
|
||||
.\"
|
||||
.Dd January 14, 2005
|
||||
.Dt COSH 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm cosh ,
|
||||
.Nm coshf
|
||||
.Nd hyperbolic cosine functions
|
||||
.Sh LIBRARY
|
||||
.Lb libm
|
||||
.Sh SYNOPSIS
|
||||
.In math.h
|
||||
.Ft double
|
||||
.Fn cosh "double x"
|
||||
.Ft float
|
||||
.Fn coshf "float x"
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Fn cosh
|
||||
and the
|
||||
.Fn coshf
|
||||
functions compute the hyperbolic cosine of
|
||||
.Fa x .
|
||||
.Sh SEE ALSO
|
||||
.Xr acos 3 ,
|
||||
.Xr asin 3 ,
|
||||
.Xr atan 3 ,
|
||||
.Xr atan2 3 ,
|
||||
.Xr cos 3 ,
|
||||
.Xr math 3 ,
|
||||
.Xr sin 3 ,
|
||||
.Xr sinh 3 ,
|
||||
.Xr tan 3 ,
|
||||
.Xr tanh 3
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Fn cosh
|
||||
function conforms to
|
||||
.St -isoC .
|
@ -1,97 +0,0 @@
|
||||
.\" Copyright (c) 1985, 1991 Regents of the University of California.
|
||||
.\" 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.
|
||||
.\" 3. All advertising materials mentioning features or use of this software
|
||||
.\" must display the following acknowledgement:
|
||||
.\" This product includes software developed by the University of
|
||||
.\" California, Berkeley and its contributors.
|
||||
.\" 4. Neither the name of the University nor the names of its contributors
|
||||
.\" may be used to endorse or promote products derived from this software
|
||||
.\" without specific prior written permission.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
|
||||
.\"
|
||||
.\" from: @(#)erf.3 6.4 (Berkeley) 4/20/91
|
||||
.\" $FreeBSD: src/lib/msun/man/erf.3,v 1.11 2004/07/02 23:52:20 ru Exp $
|
||||
.\"
|
||||
.Dd April 20, 1991
|
||||
.Dt ERF 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm erf ,
|
||||
.Nm erff ,
|
||||
.Nm erfc ,
|
||||
.Nm erfcf
|
||||
.Nd error function operators
|
||||
.Sh LIBRARY
|
||||
.Lb libm
|
||||
.Sh SYNOPSIS
|
||||
.In math.h
|
||||
.Ft double
|
||||
.Fn erf "double x"
|
||||
.Ft float
|
||||
.Fn erff "float x"
|
||||
.Ft double
|
||||
.Fn erfc "double x"
|
||||
.Ft float
|
||||
.Fn erfcf "float x"
|
||||
.Sh DESCRIPTION
|
||||
These functions calculate the error function of
|
||||
.Fa x .
|
||||
.Pp
|
||||
The
|
||||
.Fn erf
|
||||
and the
|
||||
.Fn erff
|
||||
functions calculate the error function of x; where
|
||||
.Bd -ragged -offset indent
|
||||
.if n \{\
|
||||
erf(x) = 2/sqrt(pi)\(**\|integral from 0 to x of exp(\-t\(**t) dt.
|
||||
\}
|
||||
.if t \{\
|
||||
erf\|(x) :=
|
||||
(2/\(sr\(*p)\|\(is\d\s8\z0\s10\u\u\s8x\s10\d\|exp(\-t\u\s82\s10\d)\|dt.
|
||||
\}
|
||||
.Ed
|
||||
.Pp
|
||||
The
|
||||
.Fn erfc
|
||||
and the
|
||||
.Fn erfcf
|
||||
functions calculate the complementary error function of
|
||||
.Fa x ;
|
||||
that is
|
||||
.Fn erfc
|
||||
subtracts the result of the error function
|
||||
.Fn erf x
|
||||
from 1.0.
|
||||
This is useful, since for large
|
||||
.Fa x
|
||||
places disappear.
|
||||
.Sh SEE ALSO
|
||||
.Xr math 3
|
||||
.Sh HISTORY
|
||||
The
|
||||
.Fn erf
|
||||
and
|
||||
.Fn erfc
|
||||
functions appeared in
|
||||
.Bx 4.3 .
|
236
libm/man/exp.3
236
libm/man/exp.3
@ -1,236 +0,0 @@
|
||||
.\" Copyright (c) 1985, 1991 Regents of the University of California.
|
||||
.\" 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.
|
||||
.\" 3. All advertising materials mentioning features or use of this software
|
||||
.\" must display the following acknowledgement:
|
||||
.\" This product includes software developed by the University of
|
||||
.\" California, Berkeley and its contributors.
|
||||
.\" 4. Neither the name of the University nor the names of its contributors
|
||||
.\" may be used to endorse or promote products derived from this software
|
||||
.\" without specific prior written permission.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
|
||||
.\"
|
||||
.\" from: @(#)exp.3 6.12 (Berkeley) 7/31/91
|
||||
.\" $FreeBSD: src/lib/msun/man/exp.3,v 1.22 2005/04/05 02:57:28 das Exp $
|
||||
.\"
|
||||
.Dd April 5, 2005
|
||||
.Dt EXP 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm exp ,
|
||||
.Nm expf ,
|
||||
.\" The sorting error is intentional. exp and expf should be adjacent.
|
||||
.Nm exp2 ,
|
||||
.Nm exp2f ,
|
||||
.Nm expm1 ,
|
||||
.Nm expm1f ,
|
||||
.Nm log ,
|
||||
.Nm logf ,
|
||||
.Nm log10 ,
|
||||
.Nm log10f ,
|
||||
.Nm log1p ,
|
||||
.Nm log1pf ,
|
||||
.Nm pow ,
|
||||
.Nm powf
|
||||
.Nd exponential, logarithm, power functions
|
||||
.Sh LIBRARY
|
||||
.Lb libm
|
||||
.Sh SYNOPSIS
|
||||
.In math.h
|
||||
.Ft double
|
||||
.Fn exp "double x"
|
||||
.Ft float
|
||||
.Fn expf "float x"
|
||||
.Ft double
|
||||
.Fn exp2 "double x"
|
||||
.Ft float
|
||||
.Fn exp2f "float x"
|
||||
.Ft double
|
||||
.Fn expm1 "double x"
|
||||
.Ft float
|
||||
.Fn expm1f "float x"
|
||||
.Ft double
|
||||
.Fn log "double x"
|
||||
.Ft float
|
||||
.Fn logf "float x"
|
||||
.Ft double
|
||||
.Fn log10 "double x"
|
||||
.Ft float
|
||||
.Fn log10f "float x"
|
||||
.Ft double
|
||||
.Fn log1p "double x"
|
||||
.Ft float
|
||||
.Fn log1pf "float x"
|
||||
.Ft double
|
||||
.Fn pow "double x" "double y"
|
||||
.Ft float
|
||||
.Fn powf "float x" "float y"
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Fn exp
|
||||
and the
|
||||
.Fn expf
|
||||
functions compute the base
|
||||
.Ms e
|
||||
exponential value of the given argument
|
||||
.Fa x .
|
||||
.Pp
|
||||
The
|
||||
.Fn exp2
|
||||
and the
|
||||
.Fn exp2f
|
||||
functions compute the base 2 exponential of the given argument
|
||||
.Fa x .
|
||||
.Pp
|
||||
The
|
||||
.Fn expm1
|
||||
and the
|
||||
.Fn expm1f
|
||||
functions compute the value exp(x)\-1 accurately even for tiny argument
|
||||
.Fa x .
|
||||
.Pp
|
||||
The
|
||||
.Fn log
|
||||
and the
|
||||
.Fn logf
|
||||
functions compute the value of the natural logarithm of argument
|
||||
.Fa x .
|
||||
.Pp
|
||||
The
|
||||
.Fn log10
|
||||
and the
|
||||
.Fn log10f
|
||||
functions compute the value of the logarithm of argument
|
||||
.Fa x
|
||||
to base 10.
|
||||
.Pp
|
||||
The
|
||||
.Fn log1p
|
||||
and the
|
||||
.Fn log1pf
|
||||
functions compute
|
||||
the value of log(1+x) accurately even for tiny argument
|
||||
.Fa x .
|
||||
.Pp
|
||||
The
|
||||
.Fn pow
|
||||
and the
|
||||
.Fn powf
|
||||
functions compute the value
|
||||
of
|
||||
.Ar x
|
||||
to the exponent
|
||||
.Ar y .
|
||||
.Sh ERROR (due to Roundoff etc.)
|
||||
The values of
|
||||
.Fn exp 0 ,
|
||||
.Fn expm1 0 ,
|
||||
.Fn exp2 integer ,
|
||||
and
|
||||
.Fn pow integer integer
|
||||
are exact provided that they are representable.
|
||||
.\" XXX Is this really true for pow()?
|
||||
Otherwise the error in these functions is generally below one
|
||||
.Em ulp .
|
||||
.Sh RETURN VALUES
|
||||
These functions will return the appropriate computation unless an error
|
||||
occurs or an argument is out of range.
|
||||
The functions
|
||||
.Fn pow x y
|
||||
and
|
||||
.Fn powf x y
|
||||
raise an invalid exception and return an \*(Na if
|
||||
.Fa x
|
||||
< 0 and
|
||||
.Fa y
|
||||
is not an integer.
|
||||
An attempt to take the logarithm of \*(Pm0 will result in
|
||||
a divide-by-zero exception, and an infinity will be returned.
|
||||
An attempt to take the logarithm of a negative number will
|
||||
result in an invalid exception, and an \*(Na will be generated.
|
||||
.Sh NOTES
|
||||
The functions exp(x)\-1 and log(1+x) are called
|
||||
expm1 and logp1 in
|
||||
.Tn BASIC
|
||||
on the Hewlett\-Packard
|
||||
.Tn HP Ns \-71B
|
||||
and
|
||||
.Tn APPLE
|
||||
Macintosh,
|
||||
.Tn EXP1
|
||||
and
|
||||
.Tn LN1
|
||||
in Pascal, exp1 and log1 in C
|
||||
on
|
||||
.Tn APPLE
|
||||
Macintoshes, where they have been provided to make
|
||||
sure financial calculations of ((1+x)**n\-1)/x, namely
|
||||
expm1(n\(**log1p(x))/x, will be accurate when x is tiny.
|
||||
They also provide accurate inverse hyperbolic functions.
|
||||
.Pp
|
||||
The function
|
||||
.Fn pow x 0
|
||||
returns x**0 = 1 for all x including x = 0, \*(If, and \*(Na .
|
||||
Previous implementations of pow may
|
||||
have defined x**0 to be undefined in some or all of these
|
||||
cases.
|
||||
Here are reasons for returning x**0 = 1 always:
|
||||
.Bl -enum -width indent
|
||||
.It
|
||||
Any program that already tests whether x is zero (or
|
||||
infinite or \*(Na) before computing x**0 cannot care
|
||||
whether 0**0 = 1 or not.
|
||||
Any program that depends
|
||||
upon 0**0 to be invalid is dubious anyway since that
|
||||
expression's meaning and, if invalid, its consequences
|
||||
vary from one computer system to another.
|
||||
.It
|
||||
Some Algebra texts (e.g.\& Sigler's) define x**0 = 1 for
|
||||
all x, including x = 0.
|
||||
This is compatible with the convention that accepts a[0]
|
||||
as the value of polynomial
|
||||
.Bd -literal -offset indent
|
||||
p(x) = a[0]\(**x**0 + a[1]\(**x**1 + a[2]\(**x**2 +...+ a[n]\(**x**n
|
||||
.Ed
|
||||
.Pp
|
||||
at x = 0 rather than reject a[0]\(**0**0 as invalid.
|
||||
.It
|
||||
Analysts will accept 0**0 = 1 despite that x**y can
|
||||
approach anything or nothing as x and y approach 0
|
||||
independently.
|
||||
The reason for setting 0**0 = 1 anyway is this:
|
||||
.Bd -ragged -offset indent
|
||||
If x(z) and y(z) are
|
||||
.Em any
|
||||
functions analytic (expandable
|
||||
in power series) in z around z = 0, and if there
|
||||
x(0) = y(0) = 0, then x(z)**y(z) \(-> 1 as z \(-> 0.
|
||||
.Ed
|
||||
.It
|
||||
If 0**0 = 1, then
|
||||
\*(If**0 = 1/0**0 = 1 too; and
|
||||
then \*(Na**0 = 1 too because x**0 = 1 for all finite
|
||||
and infinite x, i.e., independently of x.
|
||||
.El
|
||||
.Sh SEE ALSO
|
||||
.Xr fenv 3 ,
|
||||
.Xr math 3
|
@ -1,87 +0,0 @@
|
||||
.\" Copyright (c) 1991 The Regents of the University of California.
|
||||
.\" All rights reserved.
|
||||
.\"
|
||||
.\" @(#)fabs.3 5.1 (Berkeley) 5/2/91
|
||||
.\" 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.
|
||||
.\" 3. All advertising materials mentioning features or use of this software
|
||||
.\" must display the following acknowledgement:
|
||||
.\" This product includes software developed by the University of
|
||||
.\" California, Berkeley and its contributors.
|
||||
.\" 4. Neither the name of the University nor the names of its contributors
|
||||
.\" may be used to endorse or promote products derived from this software
|
||||
.\" without specific prior written permission.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
|
||||
.\"
|
||||
.\" from: @(#)fabs.3 5.1 (Berkeley) 5/2/91
|
||||
.\" $FreeBSD: src/lib/msun/man/fabs.3,v 1.11 2004/07/01 18:20:57 ru Exp $
|
||||
.\"
|
||||
.Dd October 25, 2003
|
||||
.Dt FABS 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm fabs ,
|
||||
.Nm fabsf ,
|
||||
.Nm fabsl
|
||||
.Nd floating-point absolute value functions
|
||||
.Sh LIBRARY
|
||||
.Lb libm
|
||||
.Sh SYNOPSIS
|
||||
.In math.h
|
||||
.Ft double
|
||||
.Fn fabs "double x"
|
||||
.Ft float
|
||||
.Fn fabsf "float x"
|
||||
.Ft long double
|
||||
.Fn fabsl "long double x"
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Fn fabs ,
|
||||
.Fn fabsf
|
||||
and
|
||||
.Fn fabsl
|
||||
functions compute the absolute value of a floating-point number
|
||||
.Fa x .
|
||||
.Sh RETURN VALUES
|
||||
The
|
||||
.Fn fabs ,
|
||||
.Fn fabsf
|
||||
and
|
||||
.Fn fabsl
|
||||
functions return the absolute value of
|
||||
.Fa x .
|
||||
.Sh SEE ALSO
|
||||
.Xr abs 3 ,
|
||||
.Xr ceil 3 ,
|
||||
.Xr floor 3 ,
|
||||
.Xr ieee 3 ,
|
||||
.Xr math 3 ,
|
||||
.Xr rint 3
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Fn fabs
|
||||
function conforms to
|
||||
.St -isoC .
|
||||
The
|
||||
.Fn fabsf
|
||||
and
|
||||
.Fn fabsl
|
||||
functions conform to
|
||||
.St -isoC-99 .
|
@ -1,86 +0,0 @@
|
||||
.\" Copyright (c) 2004 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.
|
||||
.\"
|
||||
.\" $FreeBSD: src/lib/msun/man/fdim.3,v 1.1 2004/06/30 07:04:01 das Exp $
|
||||
.\"
|
||||
.Dd June 29, 2004
|
||||
.Dt FDIM 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm fdim ,
|
||||
.Nm fdimf ,
|
||||
.Nm fdiml
|
||||
.Nd positive difference functions
|
||||
.Sh LIBRARY
|
||||
.Lb libm
|
||||
.Sh SYNOPSIS
|
||||
.In math.h
|
||||
.Ft double
|
||||
.Fn fdim "double x" "double y"
|
||||
.Ft float
|
||||
.Fn fdimf "float x" "float y"
|
||||
.Ft long double
|
||||
.Fn fdiml "long double x" "long double y"
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Fn fdim ,
|
||||
.Fn fdimf ,
|
||||
and
|
||||
.Fn fdiml
|
||||
functions return the positive difference between
|
||||
.Fa x
|
||||
and
|
||||
.Fa y .
|
||||
That is, if
|
||||
.Fa x\- Ns Fa y
|
||||
is positive, then
|
||||
.Fa x\- Ns Fa y
|
||||
is returned.
|
||||
If either
|
||||
.Fa x
|
||||
or
|
||||
.Fa y
|
||||
is an \*(Na, then an \*(Na is returned.
|
||||
Otherwise, the result is
|
||||
.Li +0.0 .
|
||||
.Pp
|
||||
Overflow or underflow may occur iff the exact result is not
|
||||
representable in the return type.
|
||||
No other exceptions are raised.
|
||||
.Sh SEE ALSO
|
||||
.Xr fabs 3 ,
|
||||
.Xr fmax 3 ,
|
||||
.Xr fmin 3 ,
|
||||
.Xr math 3
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Fn fdim ,
|
||||
.Fn fdimf ,
|
||||
and
|
||||
.Fn fdiml
|
||||
functions conform to
|
||||
.St -isoC-99 .
|
||||
.Sh HISTORY
|
||||
These routines first appeared in
|
||||
.Fx 5.3 .
|
@ -1,139 +0,0 @@
|
||||
.\" Copyright (c) 2004 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.
|
||||
.\"
|
||||
.\" $FreeBSD: src/lib/msun/man/feclearexcept.3,v 1.3 2005/01/14 09:12:05 ru Exp $
|
||||
.\"
|
||||
.Dd May 8, 2004
|
||||
.Dt FECLEAREXCEPT 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm feclearexcept ,
|
||||
.Nm fegetexceptflag ,
|
||||
.Nm feraiseexcept ,
|
||||
.Nm fesetexceptflag ,
|
||||
.Nm fetestexcept
|
||||
.Nd floating-point exception flag manipulation
|
||||
.Sh LIBRARY
|
||||
.Lb libm
|
||||
.Sh SYNOPSIS
|
||||
.In fenv.h
|
||||
.Fd "#pragma STDC FENV_ACCESS ON"
|
||||
.Ft int
|
||||
.Fn feclearexcept "int excepts"
|
||||
.Ft int
|
||||
.Fn fegetexceptflag "fexcept_t *flagp" "int excepts"
|
||||
.Ft int
|
||||
.Fn feraiseexcept "int excepts"
|
||||
.Ft int
|
||||
.Fn fesetexceptflag "const fexcept_t *flagp" "int excepts"
|
||||
.Ft int
|
||||
.Fn fetestexcept "int excepts"
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Fn feclearexcept
|
||||
routine clears the floating-point exception flags specified by
|
||||
.Fa excepts ,
|
||||
whereas
|
||||
.Fn feraiseexcept
|
||||
raises the specified exceptions.
|
||||
Raising an exception causes the corresponding flag to be set,
|
||||
and a
|
||||
.Dv SIGFPE
|
||||
is delivered to the process if the exception is unmasked.
|
||||
.Pp
|
||||
The
|
||||
.Fn fetestexcept
|
||||
function determines which flags are currently set, of those specified by
|
||||
.Fa excepts .
|
||||
.Pp
|
||||
The
|
||||
.Fn fegetexceptflag
|
||||
function stores the state of the exception flags specified in
|
||||
.Fa excepts
|
||||
in the opaque object pointed to by
|
||||
.Fa flagp .
|
||||
Similarly,
|
||||
.Fn fesetexceptflag
|
||||
changes the specified exception flags to reflect the state stored in
|
||||
the object pointed to by
|
||||
.Fa flagp .
|
||||
Note that the flags restored with
|
||||
.Fn fesetexceptflag
|
||||
must be a (not necessarily proper) subset of the flags recorded by
|
||||
a prior call to
|
||||
.Fn fegetexceptflag .
|
||||
.Pp
|
||||
For all of these functions, the possible types of exceptions
|
||||
include those described in
|
||||
.Xr fenv 3 .
|
||||
Some architectures may define other types of floating-point exceptions.
|
||||
.Sh IMPLEMENTATION NOTES
|
||||
On some architectures, raising an overflow or underflow exception
|
||||
also causes an inexact exception to be raised.
|
||||
In these cases, the overflow or underflow will be raised first.
|
||||
.Pp
|
||||
The
|
||||
.Fn fegetexceptflag
|
||||
and
|
||||
.Fn fesetexceptflag
|
||||
routines are preferred to
|
||||
.Fn fetestexcept
|
||||
and
|
||||
.Fn feraiseexcept ,
|
||||
respectively, for saving and restoring exception flags.
|
||||
The latter do not re-raise exceptions and may preserve
|
||||
architecture-specific information such as addresses where
|
||||
exceptions occurred.
|
||||
.Sh RETURN VALUES
|
||||
The
|
||||
.Fn feclearexcept ,
|
||||
.Fn fegetexceptflag ,
|
||||
.Fn feraiseexcept ,
|
||||
and
|
||||
.Fn fesetexceptflag
|
||||
functions return 0 upon success, and non-zero otherwise.
|
||||
The
|
||||
.Fn fetestexcept
|
||||
function returns the bitwise OR of the values of the current exception
|
||||
flags that were requested.
|
||||
.Sh SEE ALSO
|
||||
.Xr sigaction 2 ,
|
||||
.Xr feholdexcept 3 ,
|
||||
.Xr fenv 3 ,
|
||||
.Xr feupdateenv 3 ,
|
||||
.Xr fpgetsticky 3 ,
|
||||
.Xr fpresetsticky 3
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Fn feclearexcept ,
|
||||
.Fn fegetexceptflag ,
|
||||
.Fn feraiseexcept ,
|
||||
.Fn fesetexceptflag ,
|
||||
and
|
||||
.Fn fetestexcept
|
||||
routines conform to
|
||||
.St -isoC-99 .
|
||||
.Sh HISTORY
|
||||
These functions first appeared in
|
||||
.Fx 5.3 .
|
@ -1,98 +0,0 @@
|
||||
.\" Copyright (c) 2004 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.
|
||||
.\"
|
||||
.\" $FreeBSD: src/lib/msun/man/feenableexcept.3,v 1.1 2005/03/16 19:04:28 das Exp $
|
||||
.\"
|
||||
.Dd March 16, 2005
|
||||
.Dt FEENABLEEXCEPT 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm feenableexcept ,
|
||||
.Nm fedisableexcept ,
|
||||
.Nm fegetexcept
|
||||
.Nd floating-point exception masking
|
||||
.Sh LIBRARY
|
||||
.Lb libm
|
||||
.Sh SYNOPSIS
|
||||
.In fenv.h
|
||||
.Fd "#pragma STDC FENV_ACCESS ON"
|
||||
.Ft int
|
||||
.Fn feenableexcept "int excepts"
|
||||
.Ft int
|
||||
.Fn fedisableexcept "int excepts"
|
||||
.Ft int
|
||||
.Fn fegetexcept "void"
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Fn feenableexcept
|
||||
and
|
||||
.Fn fedisableexcept
|
||||
functions
|
||||
unmask and mask (respectively) exceptions specified in
|
||||
.Fa excepts .
|
||||
The
|
||||
.Fn fegetexcept
|
||||
function
|
||||
returns the current exception mask.
|
||||
All exceptions are masked by default.
|
||||
.Pp
|
||||
Floating-point operations that produce unmasked exceptions will trap, and a
|
||||
.Dv SIGFPE
|
||||
will be delivered to the process.
|
||||
By installing a signal handler for
|
||||
.Dv SIGFPE ,
|
||||
applications can take appropriate action immediately without
|
||||
testing the exception flags after every operation.
|
||||
Note that the trap may not be immediate, but it should occur
|
||||
before the next floating-point instruction is executed.
|
||||
.Pp
|
||||
For all of these functions, the possible types of exceptions
|
||||
include those described in
|
||||
.Xr fenv 3 .
|
||||
Some architectures may define other types of floating-point exceptions.
|
||||
.Sh RETURN VALUES
|
||||
The
|
||||
.Fn feenableexcept ,
|
||||
.Fn fedisableexcept ,
|
||||
and
|
||||
.Fn fegetexcept
|
||||
functions return a bitmap of the exceptions that were unmasked
|
||||
prior to the call.
|
||||
.Sh SEE ALSO
|
||||
.Xr sigaction 2 ,
|
||||
.Xr feclearexcept 3 ,
|
||||
.Xr feholdexcept 3 ,
|
||||
.Xr fenv 3 ,
|
||||
.Xr feupdateenv 3
|
||||
.Sh BUGS
|
||||
Functions in the standard library may trigger exceptions multiple
|
||||
times as a result of intermediate computations;
|
||||
however, they generally do not trigger spurious exceptions.
|
||||
.Pp
|
||||
No interface is provided to permit exceptions to be handled in
|
||||
nontrivial ways.
|
||||
There is no uniform way for an exception handler to access
|
||||
information about the exception-causing instruction, or
|
||||
to determine whether that instruction should be reexecuted
|
||||
after returning from the handler.
|
@ -1,113 +0,0 @@
|
||||
.\" Copyright (c) 2004 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.
|
||||
.\"
|
||||
.\" $FreeBSD: src/lib/msun/man/fegetenv.3,v 1.1 2004/06/06 10:06:26 das Exp $
|
||||
.\"
|
||||
.Dd May 8, 2004
|
||||
.Dt FEGETENV 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm fegetenv ,
|
||||
.Nm feholdexcept ,
|
||||
.Nm fesetenv ,
|
||||
.Nm feupdateenv
|
||||
.Nd floating-point environment save and restore
|
||||
.Sh LIBRARY
|
||||
.Lb libm
|
||||
.Sh SYNOPSIS
|
||||
.In fenv.h
|
||||
.Fd "#pragma STDC FENV_ACCESS ON"
|
||||
.Ft int
|
||||
.Fn fegetenv "fenv_t *envp"
|
||||
.Ft int
|
||||
.Fn feholdexcept "fenv_t *envp"
|
||||
.Ft int
|
||||
.Fn fesetenv "const fenv_t *envp"
|
||||
.Ft int
|
||||
.Fn feupdateenv "const fenv_t *envp"
|
||||
.Sh DESCRIPTION
|
||||
The floating-point environment includes exception flags and masks, the
|
||||
current rounding mode, and other architecture-specific settings.
|
||||
However, it does not include the floating-point register file.
|
||||
.Pp
|
||||
The
|
||||
.Fn fegetenv
|
||||
function stores the current floating-point environment in the object
|
||||
pointed to by
|
||||
.Fa envp ,
|
||||
whereas
|
||||
.Fn feholdexcept
|
||||
saves the current environment, then clears all exception flags
|
||||
and masks all floating-point exceptions.
|
||||
.Pp
|
||||
The
|
||||
.Fn fesetenv
|
||||
function restores a previously saved environment.
|
||||
The
|
||||
.Fn feupdateenv
|
||||
function restores a saved environment as well, but it also
|
||||
raises any exceptions that were set in the environment it
|
||||
replaces.
|
||||
.Pp
|
||||
The
|
||||
.Fn feholdexcept
|
||||
function is often used with
|
||||
.Fn feupdateenv
|
||||
or
|
||||
.Fn fesetenv
|
||||
to suppress spurious exceptions that occur as a result of
|
||||
intermediate computations.
|
||||
An example in
|
||||
.Xr fenv 3
|
||||
demonstrates how to do this.
|
||||
.Sh RETURN VALUES
|
||||
The
|
||||
.Fn fegetenv ,
|
||||
.Fn feholdexcept ,
|
||||
.Fn fesetenv ,
|
||||
and
|
||||
.Fn feupdateenv
|
||||
functions return 0 if they succeed, and non-zero otherwise.
|
||||
.Sh SEE ALSO
|
||||
.Xr feclearexcept 3 ,
|
||||
.Xr fenv 3 ,
|
||||
.Xr feraiseexcept 3 ,
|
||||
.Xr fesetenv 3 ,
|
||||
.Xr fetestexcept 3 ,
|
||||
.Xr fpgetmask 3 ,
|
||||
.Xr fpgetprec 3 ,
|
||||
.Xr fpsetmask 3 ,
|
||||
.Xr fpsetprec 3
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Fn fegetenv ,
|
||||
.Fn feholdexcept ,
|
||||
.Fn fesetenv ,
|
||||
and
|
||||
.Fn feupdateenv
|
||||
functions conform to
|
||||
.St -isoC-99 .
|
||||
.Sh HISTORY
|
||||
These routines first appeared in
|
||||
.Fx 5.3 .
|
@ -1,83 +0,0 @@
|
||||
.\" Copyright (c) 2004 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.
|
||||
.\"
|
||||
.\" $FreeBSD: src/lib/msun/man/fegetround.3,v 1.2 2005/01/14 09:12:05 ru Exp $
|
||||
.\"
|
||||
.Dd May 8, 2004
|
||||
.Dt FEGETROUND 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm fegetround ,
|
||||
.Nm fesetround
|
||||
.Nd floating-point rounding control
|
||||
.Sh LIBRARY
|
||||
.Lb libm
|
||||
.Sh SYNOPSIS
|
||||
.In fenv.h
|
||||
.Fd "#pragma STDC FENV_ACCESS ON"
|
||||
.Ft int
|
||||
.Fn fegetround void
|
||||
.Ft int
|
||||
.Fn fesetround "int round"
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Fn fegetround
|
||||
function determines the current floating-point rounding mode,
|
||||
and the
|
||||
.Fn fesetround
|
||||
function sets the current rounding mode to
|
||||
.Fa round .
|
||||
The rounding mode is one of
|
||||
.Dv FE_TONEAREST , FE_DOWNWARD , FE_UPWARD ,
|
||||
or
|
||||
.Dv FE_TOWARDZERO ,
|
||||
as described in
|
||||
.Xr fenv 3 .
|
||||
.Sh RETURN VALUES
|
||||
The
|
||||
.Fn fegetround
|
||||
routine returns the current rounding mode.
|
||||
The
|
||||
.Fn fesetround
|
||||
function returns 0 on success and non-zero otherwise;
|
||||
however, the present implementation always succeeds.
|
||||
.Sh SEE ALSO
|
||||
.Xr fenv 3 ,
|
||||
.Xr fpgetround 3 ,
|
||||
.Xr fpsetround 3
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Fn fegetround
|
||||
and
|
||||
.Fn fesetround
|
||||
functions conform to
|
||||
.St -isoC-99 .
|
||||
.Sh HISTORY
|
||||
These routines first appeared in
|
||||
.Fx 5.3 .
|
||||
They supersede the non-standard
|
||||
.Xr fpgetround 3
|
||||
and
|
||||
.Xr fpsetround 3
|
||||
functions.
|
289
libm/man/fenv.3
289
libm/man/fenv.3
@ -1,289 +0,0 @@
|
||||
.\" Copyright (c) 2004 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.
|
||||
.\"
|
||||
.\" $FreeBSD: src/lib/msun/man/fenv.3,v 1.5 2005/06/15 19:04:04 ru Exp $
|
||||
.\"
|
||||
.Dd March 16, 2005
|
||||
.Dt FENV 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm feclearexcept ,
|
||||
.Nm fegetexceptflag ,
|
||||
.Nm feraiseexcept ,
|
||||
.Nm fesetexceptflag ,
|
||||
.Nm fetestexcept ,
|
||||
.Nm fegetround ,
|
||||
.Nm fesetround ,
|
||||
.Nm fegetenv ,
|
||||
.Nm feholdexcept ,
|
||||
.Nm fesetenv ,
|
||||
.Nm feupdateenv ,
|
||||
.Nm feenableexcept ,
|
||||
.Nm fedisableexcept ,
|
||||
.Nm fegetexcept
|
||||
.Nd floating-point environment control
|
||||
.Sh LIBRARY
|
||||
.Lb libm
|
||||
.Sh SYNOPSIS
|
||||
.In fenv.h
|
||||
.Fd "#pragma STDC FENV_ACCESS ON"
|
||||
.Ft int
|
||||
.Fn feclearexcept "int excepts"
|
||||
.Ft int
|
||||
.Fn fegetexceptflag "fexcept_t *flagp" "int excepts"
|
||||
.Ft int
|
||||
.Fn feraiseexcept "int excepts"
|
||||
.Ft int
|
||||
.Fn fesetexceptflag "const fexcept_t *flagp" "int excepts"
|
||||
.Ft int
|
||||
.Fn fetestexcept "int excepts"
|
||||
.Ft int
|
||||
.Fn fegetround void
|
||||
.Ft int
|
||||
.Fn fesetround "int round"
|
||||
.Ft int
|
||||
.Fn fegetenv "fenv_t *envp"
|
||||
.Ft int
|
||||
.Fn feholdexcept "fenv_t *envp"
|
||||
.Ft int
|
||||
.Fn fesetenv "const fenv_t *envp"
|
||||
.Ft int
|
||||
.Fn feupdateenv "const fenv_t *envp"
|
||||
.Ft int
|
||||
.Fn feenableexcept "int excepts"
|
||||
.Ft int
|
||||
.Fn fedisableexcept "int excepts"
|
||||
.Ft int
|
||||
.Fn fegetexcept void
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.In fenv.h
|
||||
routines manipulate the floating-point environment,
|
||||
which includes the exception flags and rounding modes defined in
|
||||
.St -ieee754 .
|
||||
.Ss Exceptions
|
||||
Exception flags are set as side-effects of floating-point arithmetic
|
||||
operations and math library routines, and they remain set until
|
||||
explicitly cleared.
|
||||
The following macros expand to bit flags of type
|
||||
.Vt int
|
||||
representing the five standard floating-point exceptions.
|
||||
.Bl -tag -width ".Dv FE_DIVBYZERO"
|
||||
.It Dv FE_DIVBYZERO
|
||||
A divide-by-zero exception occurs when the program attempts to
|
||||
divide a finite non-zero number by zero.
|
||||
.It Dv FE_INEXACT
|
||||
An inexact exception is raised whenever there is a loss of precision
|
||||
due to rounding.
|
||||
.It Dv FE_INVALID
|
||||
Invalid operation exceptions occur when a program attempts to
|
||||
perform calculations for which there is no reasonable representable
|
||||
answer.
|
||||
For instance, subtraction of infinities, division of zero by zero,
|
||||
ordered comparison involving \*(Nas, and taking the square root of a
|
||||
negative number are all invalid operations.
|
||||
.It Dv FE_OVERFLOW
|
||||
An overflow exception occurs when the magnitude of the result of a
|
||||
computation is too large to fit in the destination type.
|
||||
.It Dv FE_UNDERFLOW
|
||||
Underflow occurs when the result of a computation is too close to zero
|
||||
to be represented as a non-zero value in the destination type.
|
||||
.El
|
||||
.Pp
|
||||
Additionally, the
|
||||
.Dv FE_ALL_EXCEPT
|
||||
macro expands to the bitwise OR of the above flags and any
|
||||
architecture-specific flags.
|
||||
Combinations of these flags are passed to the
|
||||
.Fn feclearexcept ,
|
||||
.Fn fegetexceptflag ,
|
||||
.Fn feraiseexcept ,
|
||||
.Fn fesetexceptflag ,
|
||||
and
|
||||
.Fn fetestexcept
|
||||
functions to clear, save, raise, restore, and examine the
|
||||
processor's floating-point exception flags, respectively.
|
||||
.Pp
|
||||
Exceptions may be
|
||||
.Em unmasked
|
||||
with
|
||||
.Fn feenableexcept
|
||||
and masked with
|
||||
.Fn fedisableexcept .
|
||||
Unmasked exceptions cause a trap when they are produced, and
|
||||
all exceptions are masked by default.
|
||||
The current mask can be tested with
|
||||
.Fn fegetexcept .
|
||||
.Ss Rounding Modes
|
||||
.St -ieee754
|
||||
specifies four rounding modes.
|
||||
These modes control the direction in which results are rounded
|
||||
from their exact values in order to fit them into binary
|
||||
floating-point variables.
|
||||
The four modes correspond with the following symbolic constants.
|
||||
.Bl -tag -width ".Dv FE_TOWARDZERO"
|
||||
.It Dv FE_TONEAREST
|
||||
Results are rounded to the closest representable value.
|
||||
If the exact result is exactly half way between two representable
|
||||
values, the value whose last binary digit is even (zero) is chosen.
|
||||
This is the default mode.
|
||||
.It Dv FE_DOWNWARD
|
||||
Results are rounded towards negative \*[If].
|
||||
.It Dv FE_UPWARD
|
||||
Results are rounded towards positive \*[If].
|
||||
.It Dv FE_TOWARDZERO
|
||||
Results are rounded towards zero.
|
||||
.El
|
||||
.Pp
|
||||
The
|
||||
.Fn fegetround
|
||||
and
|
||||
.Fn fesetround
|
||||
functions query and set the rounding mode.
|
||||
.Ss Environment Control
|
||||
The
|
||||
.Fn fegetenv
|
||||
and
|
||||
.Fn fesetenv
|
||||
functions save and restore the floating-point environment,
|
||||
which includes exception flags, the current exception mask,
|
||||
the rounding mode, and possibly other implementation-specific
|
||||
state.
|
||||
The
|
||||
.Fn feholdexcept
|
||||
function behaves like
|
||||
.Fn fegetenv ,
|
||||
but with the additional effect of clearing the exception flags and
|
||||
installing a
|
||||
.Em non-stop
|
||||
mode.
|
||||
In non-stop mode, floating-point operations will set exception flags
|
||||
as usual, but no
|
||||
.Dv SIGFPE
|
||||
signals will be generated as a result.
|
||||
Non-stop mode is the default, but it may be altered by
|
||||
non-standard mechanisms.
|
||||
.\" XXX Mention fe[gs]etmask() here after the interface is finalized
|
||||
.\" XXX and ready to be officially documented.
|
||||
The
|
||||
.Fn feupdateenv
|
||||
function restores a saved environment similarly to
|
||||
.Fn fesetenv ,
|
||||
but it also re-raises any floating-point exceptions from the old
|
||||
environment.
|
||||
.Pp
|
||||
The macro
|
||||
.Dv FE_DFL_ENV
|
||||
expands to a pointer to the default environment.
|
||||
.Sh CAVEATS
|
||||
The FENV_ACCESS pragma can be enabled with
|
||||
.Dl "#pragma STDC FENV_ACCESS ON"
|
||||
and disabled with the
|
||||
.Dl "#pragma STDC FENV_ACCESS OFF"
|
||||
directive.
|
||||
This lexically-scoped annotation tells the compiler that the program
|
||||
may access the floating-point environment, so optimizations that would
|
||||
violate strict IEEE-754 semantics are disabled.
|
||||
If execution reaches a block of code for which
|
||||
.Dv FENV_ACCESS
|
||||
is off, the floating-point environment will become undefined.
|
||||
.Sh EXAMPLES
|
||||
The following routine computes the square root function.
|
||||
It explicitly raises an invalid exception on appropriate inputs using
|
||||
.Fn feraiseexcept .
|
||||
It also defers inexact exceptions while it computes intermediate
|
||||
values, and then it allows an inexact exception to be raised only if
|
||||
the final answer is inexact.
|
||||
.Bd -literal -offset indent
|
||||
#pragma STDC FENV_ACCESS ON
|
||||
double sqrt(double n) {
|
||||
double x = 1.0;
|
||||
fenv_t env;
|
||||
|
||||
if (isnan(n) || n < 0.0) {
|
||||
feraiseexcept(FE_INVALID);
|
||||
return (NAN);
|
||||
}
|
||||
if (isinf(n) || n == 0.0)
|
||||
return (n);
|
||||
feholdexcept(&env);
|
||||
while (fabs((x * x) - n) > DBL_EPSILON * 2 * x)
|
||||
x = (x / 2) + (n / (2 * x));
|
||||
if (x * x == n)
|
||||
feclearexcept(FE_INEXACT);
|
||||
feupdateenv(&env);
|
||||
return (x);
|
||||
}
|
||||
.Ed
|
||||
.Sh SEE ALSO
|
||||
.Xr cc 1 ,
|
||||
.Xr feclearexcept 3 ,
|
||||
.Xr fedisableexcept 3 ,
|
||||
.Xr feenableexcept 3 ,
|
||||
.Xr fegetenv 3 ,
|
||||
.Xr fegetexcept 3 ,
|
||||
.Xr fegetexceptflag 3 ,
|
||||
.Xr fegetround 3 ,
|
||||
.Xr feholdexcept 3 ,
|
||||
.Xr feraiseexcept 3 ,
|
||||
.Xr fesetenv 3 ,
|
||||
.Xr fesetexceptflag 3 ,
|
||||
.Xr fesetround 3 ,
|
||||
.Xr fetestexcept 3 ,
|
||||
.Xr feupdateenv 3 ,
|
||||
.Xr fpgetprec 3 ,
|
||||
.Xr fpsetprec 3
|
||||
.Sh STANDARDS
|
||||
Except as noted below,
|
||||
.In fenv.h
|
||||
conforms to
|
||||
.St -isoC-99 .
|
||||
The
|
||||
.Fn feenableexcept ,
|
||||
.Fn fedisableexcept ,
|
||||
and
|
||||
.Fn fegetexcept
|
||||
routines are extensions.
|
||||
.Sh HISTORY
|
||||
The
|
||||
.In fenv.h
|
||||
header first appeared in
|
||||
.Fx 5.3 .
|
||||
It supersedes the non-standard routines defined in
|
||||
.In ieeefp.h
|
||||
and documented in
|
||||
.Xr fpgetround 3 .
|
||||
.Sh BUGS
|
||||
The
|
||||
.Dv FENV_ACCESS
|
||||
pragma is unimplemented in the system compiler.
|
||||
However, non-constant expressions generally produce the correct
|
||||
side-effects at low optimization levels.
|
||||
.Pp
|
||||
On the Alpha platform,
|
||||
.Xr cc 1
|
||||
must be passed the
|
||||
.Fl mieee-with-inexact mfp-rounding-mode=d
|
||||
options in order to generate code that has the standard
|
||||
side-effects and uses the specified rounding modes.
|
@ -1,82 +0,0 @@
|
||||
.\" Copyright (c) 1985, 1991 The Regents of the University of California.
|
||||
.\" 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.
|
||||
.\" 3. All advertising materials mentioning features or use of this software
|
||||
.\" must display the following acknowledgement:
|
||||
.\" This product includes software developed by the University of
|
||||
.\" California, Berkeley and its contributors.
|
||||
.\" 4. Neither the name of the University nor the names of its contributors
|
||||
.\" may be used to endorse or promote products derived from this software
|
||||
.\" without specific prior written permission.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
|
||||
.\"
|
||||
.\" from: @(#)floor.3 6.5 (Berkeley) 4/19/91
|
||||
.\" $FreeBSD: src/lib/msun/man/floor.3,v 1.17 2005/01/13 09:35:47 ru Exp $
|
||||
.\"
|
||||
.Dd January 13, 2005
|
||||
.Dt FLOOR 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm floor ,
|
||||
.Nm floorf ,
|
||||
.Nm floorl
|
||||
.Nd largest integral value less than or equal to x
|
||||
.Sh LIBRARY
|
||||
.Lb libm
|
||||
.Sh SYNOPSIS
|
||||
.In math.h
|
||||
.Ft double
|
||||
.Fn floor "double x"
|
||||
.Ft float
|
||||
.Fn floorf "float x"
|
||||
.Ft "long double"
|
||||
.Fn floorl "long double x"
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Fn floor ,
|
||||
.Fn floorf
|
||||
and
|
||||
.Fn floorl
|
||||
functions return the largest integral value
|
||||
less than or equal to
|
||||
.Fa x ,
|
||||
expressed as a floating-point number.
|
||||
.Sh SEE ALSO
|
||||
.Xr abs 3 ,
|
||||
.Xr ceil 3 ,
|
||||
.Xr fabs 3 ,
|
||||
.Xr ieee 3 ,
|
||||
.Xr math 3 ,
|
||||
.Xr rint 3 ,
|
||||
.Xr round 3 ,
|
||||
.Xr trunc 3
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Fn floor
|
||||
function conforms to
|
||||
.St -isoC .
|
||||
The
|
||||
.Fn floorf
|
||||
and
|
||||
.Fn floorl
|
||||
functions conform to
|
||||
.St -isoC-99 .
|
116
libm/man/fma.3
116
libm/man/fma.3
@ -1,116 +0,0 @@
|
||||
.\" Copyright (c) 2005 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.
|
||||
.\"
|
||||
.\" $FreeBSD: src/lib/msun/man/fma.3,v 1.3 2005/11/24 09:25:10 joel Exp $
|
||||
.\"
|
||||
.Dd January 22, 2005
|
||||
.Dt FMA 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm fma ,
|
||||
.Nm fmaf ,
|
||||
.Nm fmal
|
||||
.Nd fused multiply-add
|
||||
.Sh LIBRARY
|
||||
.Lb libm
|
||||
.Sh SYNOPSIS
|
||||
.In math.h
|
||||
.Ft double
|
||||
.Fn fma "double x" "double y" "double z"
|
||||
.Ft float
|
||||
.Fn fmaf "float x" "float y" "float z"
|
||||
.Ft long double
|
||||
.Fn fmal "long double x" "long double y" "long double z"
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Fn fma ,
|
||||
.Fn fmaf ,
|
||||
and
|
||||
.Fn fmal
|
||||
functions return
|
||||
.No "(x * y) + z" ,
|
||||
computed with only one rounding error.
|
||||
Using the ordinary multiplication and addition operators, by contrast,
|
||||
results in two roundings: one for the intermediate product and one for
|
||||
the final result.
|
||||
.Pp
|
||||
For instance, the expression
|
||||
.No "1.2e100 * 2.0e208 - 1.4e308"
|
||||
produces \*(If due to overflow in the intermediate product, whereas
|
||||
.No "fma(1.2e100, 2.0e208, -1.4e308)"
|
||||
returns approximately 1.0e308.
|
||||
.Pp
|
||||
The fused multiply-add operation is often used to improve the
|
||||
accuracy of calculations such as dot products.
|
||||
It may also be used to improve performance on machines that implement
|
||||
it natively.
|
||||
The macros
|
||||
.Dv FP_FAST_FMA ,
|
||||
.Dv FP_FAST_FMAF
|
||||
and
|
||||
.Dv FP_FAST_FMAL
|
||||
may be defined in
|
||||
.In math.h
|
||||
to indicate that
|
||||
.Fn fma ,
|
||||
.Fn fmaf ,
|
||||
and
|
||||
.Fn fmal
|
||||
(respectively) have comparable or faster speed than a multiply
|
||||
operation followed by an add operation.
|
||||
.Sh IMPLEMENTATION NOTES
|
||||
In general, these routines will behave as one would expect if
|
||||
.No "x * y + z"
|
||||
were computed with unbounded precision and range,
|
||||
then rounded to the precision of the return type.
|
||||
However, on some platforms, if
|
||||
.Fa z
|
||||
is \*(Na, these functions may not raise an exception even
|
||||
when the computation of
|
||||
.No "x * y"
|
||||
would have otherwise generated an invalid exception.
|
||||
.Sh SEE ALSO
|
||||
.Xr fenv 3 ,
|
||||
.Xr math 3
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Fn fma ,
|
||||
.Fn fmaf ,
|
||||
and
|
||||
.Fn fmal
|
||||
functions conform to
|
||||
.St -isoC-99 .
|
||||
A fused multiply-add operation with virtually identical
|
||||
characteristics appears in IEEE draft standard 754R.
|
||||
.Sh HISTORY
|
||||
The
|
||||
.Fn fma
|
||||
and
|
||||
.Fn fmaf
|
||||
routines first appeared in
|
||||
.Fx 5.4 ,
|
||||
and
|
||||
.Fn fmal
|
||||
appeared in
|
||||
.Fx 6.0 .
|
@ -1,97 +0,0 @@
|
||||
.\" Copyright (c) 2004 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.
|
||||
.\"
|
||||
.\" $FreeBSD: src/lib/msun/man/fmax.3,v 1.2 2005/01/14 09:12:05 ru Exp $
|
||||
.\"
|
||||
.Dd June 29, 2004
|
||||
.Dt FMAX 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm fmax ,
|
||||
.Nm fmaxf ,
|
||||
.Nm fmaxl ,
|
||||
.Nm fmin ,
|
||||
.Nm fminf ,
|
||||
.Nm fminl
|
||||
.Nd floating-point maximum and minimum functions
|
||||
.Sh LIBRARY
|
||||
.Lb libm
|
||||
.Sh SYNOPSIS
|
||||
.In math.h
|
||||
.Ft double
|
||||
.Fn fmax "double x" "double y"
|
||||
.Ft float
|
||||
.Fn fmaxf "float x" "float y"
|
||||
.Ft "long double"
|
||||
.Fn fmaxl "long double x" "long double y"
|
||||
.Ft double
|
||||
.Fn fmin "double x" "double y"
|
||||
.Ft float
|
||||
.Fn fminf "float x" "float y"
|
||||
.Ft "long double"
|
||||
.Fn fminl "long double x" "long double y"
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Fn fmax ,
|
||||
.Fn fmaxf ,
|
||||
and
|
||||
.Fn fmaxl
|
||||
functions return the larger of
|
||||
.Fa x
|
||||
and
|
||||
.Fa y ,
|
||||
and likewise, the
|
||||
.Fn fmin ,
|
||||
.Fn fminf ,
|
||||
and
|
||||
.Fn fminl
|
||||
functions return the smaller of
|
||||
.Fa x
|
||||
and
|
||||
.Fa y .
|
||||
They treat
|
||||
.Li +0.0
|
||||
as being larger than
|
||||
.Li -0.0 .
|
||||
If one argument is an \*(Na, then the other argument is returned.
|
||||
If both arguments are \*(Nas, then the result is an \*(Na.
|
||||
These routines do not raise any floating-point exceptions.
|
||||
.Sh SEE ALSO
|
||||
.Xr fabs 3 ,
|
||||
.Xr fdim 3 ,
|
||||
.Xr math 3
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Fn fmax ,
|
||||
.Fn fmaxf ,
|
||||
.Fn fmaxl ,
|
||||
.Fn fmin ,
|
||||
.Fn fminf ,
|
||||
and
|
||||
.Fn fminl
|
||||
functions conform to
|
||||
.St -isoC-99 .
|
||||
.Sh HISTORY
|
||||
These routines first appeared in
|
||||
.Fx 5.3 .
|
@ -1,87 +0,0 @@
|
||||
.\" Copyright (c) 1991 The Regents of the University of California.
|
||||
.\" 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.
|
||||
.\" 3. All advertising materials mentioning features or use of this software
|
||||
.\" must display the following acknowledgement:
|
||||
.\" This product includes software developed by the University of
|
||||
.\" California, Berkeley and its contributors.
|
||||
.\" 4. Neither the name of the University nor the names of its contributors
|
||||
.\" may be used to endorse or promote products derived from this software
|
||||
.\" without specific prior written permission.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
|
||||
.\"
|
||||
.\" from: @(#)fmod.3 5.1 (Berkeley) 5/2/91
|
||||
.\" $FreeBSD: src/lib/msun/man/fmod.3,v 1.8 2001/10/13 12:23:23 bde Exp $
|
||||
.\"
|
||||
.Dd May 2, 1991
|
||||
.Dt FMOD 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm fmod ,
|
||||
.Nm fmodf
|
||||
.Nd floating-point remainder functions
|
||||
.Sh LIBRARY
|
||||
.Lb libm
|
||||
.Sh SYNOPSIS
|
||||
.In math.h
|
||||
.Ft double
|
||||
.Fn fmod "double x" "double y"
|
||||
.Ft float
|
||||
.Fn fmodf "float x" "float y"
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Fn fmod
|
||||
and the
|
||||
.Fn fmodf
|
||||
functions compute the floating-point remainder of
|
||||
.Fa x Ns / Fa y .
|
||||
.Sh RETURN VALUES
|
||||
The
|
||||
.Fn fmod
|
||||
and the
|
||||
.Fn fmodf
|
||||
functions return the value
|
||||
.Sm off
|
||||
.Fa x - Em i * Fa y ,
|
||||
.Sm on
|
||||
for some integer
|
||||
.Em i
|
||||
such that, if
|
||||
.Fa y
|
||||
is non-zero, the result has the same sign as
|
||||
.Fa x
|
||||
and magnitude less than the magnitude of
|
||||
.Fa y .
|
||||
If
|
||||
.Fa y
|
||||
is zero, whether a domain error occurs or the
|
||||
.Fn fmod
|
||||
and the
|
||||
.Fn fmodf
|
||||
function returns zero is implementation-defined.
|
||||
.Sh SEE ALSO
|
||||
.Xr math 3
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Fn fmod
|
||||
function conforms to
|
||||
.St -isoC .
|
134
libm/man/hypot.3
134
libm/man/hypot.3
@ -1,134 +0,0 @@
|
||||
.\" Copyright (c) 1985, 1991 Regents of the University of California.
|
||||
.\" 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.
|
||||
.\" 3. All advertising materials mentioning features or use of this software
|
||||
.\" must display the following acknowledgement:
|
||||
.\" This product includes software developed by the University of
|
||||
.\" California, Berkeley and its contributors.
|
||||
.\" 4. Neither the name of the University nor the names of its contributors
|
||||
.\" may be used to endorse or promote products derived from this software
|
||||
.\" without specific prior written permission.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
|
||||
.\"
|
||||
.\" from: @(#)hypot.3 6.7 (Berkeley) 5/6/91
|
||||
.\" $FreeBSD: src/lib/msun/man/hypot.3,v 1.13 2005/01/14 23:28:28 das Exp $
|
||||
.\"
|
||||
.Dd January 14, 2005
|
||||
.Dt HYPOT 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm hypot ,
|
||||
.Nm hypotf ,
|
||||
.Nm cabs ,
|
||||
.Nm cabsf
|
||||
.Nd Euclidean distance and complex absolute value functions
|
||||
.Sh LIBRARY
|
||||
.Lb libm
|
||||
.Sh SYNOPSIS
|
||||
.In math.h
|
||||
.Ft double
|
||||
.Fn hypot "double x" "double y"
|
||||
.Ft float
|
||||
.Fn hypotf "float x" "float y"
|
||||
.In complex.h
|
||||
.Ft double
|
||||
.Fn cabs "double complex z"
|
||||
.Ft float
|
||||
.Fn cabsf "float complex z"
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Fn hypot
|
||||
and
|
||||
.Fn hypotf
|
||||
functions
|
||||
compute the
|
||||
sqrt(x*x+y*y)
|
||||
in such a way that underflow will not happen, and overflow
|
||||
occurs only if the final result deserves it.
|
||||
The
|
||||
.Fn cabs
|
||||
and
|
||||
.Fn cabsf
|
||||
functions compute the complex absolute value of
|
||||
.Fa z .
|
||||
.Pp
|
||||
.Fn hypot "\*(If" "v"
|
||||
=
|
||||
.Fn hypot "v" "\*(If"
|
||||
= +\*(If for all
|
||||
.Fa v ,
|
||||
including \*(Na.
|
||||
.Sh ERROR (due to Roundoff, etc.)
|
||||
Below 0.97
|
||||
.Em ulps .
|
||||
Consequently
|
||||
.Fn hypot "5.0" "12.0"
|
||||
= 13.0
|
||||
exactly;
|
||||
in general, hypot and cabs return an integer whenever an
|
||||
integer might be expected.
|
||||
.Pp
|
||||
The same cannot be said for the shorter and faster version of hypot
|
||||
and cabs that is provided in the comments in cabs.c; its error can
|
||||
exceed 1.2
|
||||
.Em ulps .
|
||||
.Sh NOTES
|
||||
As might be expected,
|
||||
.Fn hypot "v" "\*(Na"
|
||||
and
|
||||
.Fn hypot "\*(Na" "v"
|
||||
are \*(Na for all
|
||||
.Em finite
|
||||
.Fa v .
|
||||
But programmers
|
||||
might be surprised at first to discover that
|
||||
.Fn hypot "\(+-\*(If" "\*(Na"
|
||||
= +\*(If.
|
||||
This is intentional; it happens because
|
||||
.Fn hypot "\*(If" "v"
|
||||
= +\*(If
|
||||
for
|
||||
.Em all
|
||||
.Fa v ,
|
||||
finite or infinite.
|
||||
Hence
|
||||
.Fn hypot "\*(If" "v"
|
||||
is independent of
|
||||
.Fa v .
|
||||
Unlike the reserved operand fault on a
|
||||
.Tn VAX ,
|
||||
the
|
||||
.Tn IEEE
|
||||
\*(Na is designed to
|
||||
disappear when it turns out to be irrelevant, as it does in
|
||||
.Fn hypot "\*(If" "\*(Na" .
|
||||
.Sh SEE ALSO
|
||||
.Xr math 3 ,
|
||||
.Xr sqrt 3
|
||||
.Sh HISTORY
|
||||
Both a
|
||||
.Fn hypot
|
||||
function and a
|
||||
.Fn cabs
|
||||
function
|
||||
appeared in
|
||||
.At v7 .
|
448
libm/man/ieee.3
448
libm/man/ieee.3
@ -1,448 +0,0 @@
|
||||
.\" Copyright (c) 1985 Regents of the University of California.
|
||||
.\" 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.
|
||||
.\" 3. All advertising materials mentioning features or use of this software
|
||||
.\" must display the following acknowledgement:
|
||||
.\" This product includes software developed by the University of
|
||||
.\" California, Berkeley and its contributors.
|
||||
.\" 4. Neither the name of the University nor the names of its contributors
|
||||
.\" may be used to endorse or promote products derived from this software
|
||||
.\" without specific prior written permission.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
|
||||
.\"
|
||||
.\" from: @(#)ieee.3 6.4 (Berkeley) 5/6/91
|
||||
.\" $FreeBSD: src/lib/msun/man/ieee.3,v 1.22 2005/06/16 21:55:45 ru Exp $
|
||||
.\"
|
||||
.Dd January 26, 2005
|
||||
.Dt IEEE 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm ieee
|
||||
.Nd IEEE standard 754 for floating-point arithmetic
|
||||
.Sh DESCRIPTION
|
||||
The IEEE Standard 754 for Binary Floating-Point Arithmetic
|
||||
defines representations of floating-point numbers and abstract
|
||||
properties of arithmetic operations relating to precision,
|
||||
rounding, and exceptional cases, as described below.
|
||||
.Ss IEEE STANDARD 754 Floating-Point Arithmetic
|
||||
Radix: Binary.
|
||||
.Pp
|
||||
Overflow and underflow:
|
||||
.Bd -ragged -offset indent -compact
|
||||
Overflow goes by default to a signed \*(If.
|
||||
Underflow is
|
||||
.Em gradual .
|
||||
.Ed
|
||||
.Pp
|
||||
Zero is represented ambiguously as +0 or \-0.
|
||||
.Bd -ragged -offset indent -compact
|
||||
Its sign transforms correctly through multiplication or
|
||||
division, and is preserved by addition of zeros
|
||||
with like signs; but x\-x yields +0 for every
|
||||
finite x.
|
||||
The only operations that reveal zero's
|
||||
sign are division by zero and
|
||||
.Fn copysign x \(+-0 .
|
||||
In particular, comparison (x > y, x \(>= y, etc.)\&
|
||||
cannot be affected by the sign of zero; but if
|
||||
finite x = y then \*(If = 1/(x\-y) \(!= \-1/(y\-x) = \-\*(If.
|
||||
.Ed
|
||||
.Pp
|
||||
Infinity is signed.
|
||||
.Bd -ragged -offset indent -compact
|
||||
It persists when added to itself
|
||||
or to any finite number.
|
||||
Its sign transforms
|
||||
correctly through multiplication and division, and
|
||||
(finite)/\(+-\*(If\0=\0\(+-0
|
||||
(nonzero)/0 = \(+-\*(If.
|
||||
But
|
||||
\*(If\-\*(If, \*(If\(**0 and \*(If/\*(If
|
||||
are, like 0/0 and sqrt(\-3),
|
||||
invalid operations that produce \*(Na. ...
|
||||
.Ed
|
||||
.Pp
|
||||
Reserved operands (\*(Nas):
|
||||
.Bd -ragged -offset indent -compact
|
||||
An \*(Na is
|
||||
.Em ( N Ns ot Em a N Ns umber ) .
|
||||
Some \*(Nas, called Signaling \*(Nas, trap any floating-point operation
|
||||
performed upon them; they are used to mark missing
|
||||
or uninitialized values, or nonexistent elements
|
||||
of arrays.
|
||||
The rest are Quiet \*(Nas; they are
|
||||
the default results of Invalid Operations, and
|
||||
propagate through subsequent arithmetic operations.
|
||||
If x \(!= x then x is \*(Na; every other predicate
|
||||
(x > y, x = y, x < y, ...) is FALSE if \*(Na is involved.
|
||||
.Ed
|
||||
.Pp
|
||||
Rounding:
|
||||
.Bd -ragged -offset indent -compact
|
||||
Every algebraic operation (+, \-, \(**, /,
|
||||
\(sr)
|
||||
is rounded by default to within half an
|
||||
.Em ulp ,
|
||||
and when the rounding error is exactly half an
|
||||
.Em ulp
|
||||
then
|
||||
the rounded value's least significant bit is zero.
|
||||
(An
|
||||
.Em ulp
|
||||
is one
|
||||
.Em U Ns nit
|
||||
in the
|
||||
.Em L Ns ast
|
||||
.Em P Ns lace . )
|
||||
This kind of rounding is usually the best kind,
|
||||
sometimes provably so; for instance, for every
|
||||
x = 1.0, 2.0, 3.0, 4.0, ..., 2.0**52, we find
|
||||
(x/3.0)\(**3.0 == x and (x/10.0)\(**10.0 == x and ...
|
||||
despite that both the quotients and the products
|
||||
have been rounded.
|
||||
Only rounding like IEEE 754 can do that.
|
||||
But no single kind of rounding can be
|
||||
proved best for every circumstance, so IEEE 754
|
||||
provides rounding towards zero or towards
|
||||
+\*(If or towards \-\*(If
|
||||
at the programmer's option.
|
||||
.Ed
|
||||
.Pp
|
||||
Exceptions:
|
||||
.Bd -ragged -offset indent -compact
|
||||
IEEE 754 recognizes five kinds of floating-point exceptions,
|
||||
listed below in declining order of probable importance.
|
||||
.Bl -column -offset indent "Invalid Operation" "Gradual Underflow"
|
||||
.Em "Exception Default Result"
|
||||
Invalid Operation \*(Na, or FALSE
|
||||
Overflow \(+-\*(If
|
||||
Divide by Zero \(+-\*(If
|
||||
Underflow Gradual Underflow
|
||||
Inexact Rounded value
|
||||
.El
|
||||
.Pp
|
||||
NOTE: An Exception is not an Error unless handled
|
||||
badly.
|
||||
What makes a class of exceptions exceptional
|
||||
is that no single default response can be satisfactory
|
||||
in every instance.
|
||||
On the other hand, if a default
|
||||
response will serve most instances satisfactorily,
|
||||
the unsatisfactory instances cannot justify aborting
|
||||
computation every time the exception occurs.
|
||||
.Ed
|
||||
.Ss Data Formats
|
||||
Single-precision:
|
||||
.Bd -ragged -offset indent -compact
|
||||
Type name:
|
||||
.Vt float
|
||||
.Pp
|
||||
Wordsize: 32 bits.
|
||||
.Pp
|
||||
Precision: 24 significant bits,
|
||||
roughly like 7 significant decimals.
|
||||
.Bd -ragged -offset indent -compact
|
||||
If x and x' are consecutive positive single-precision
|
||||
numbers (they differ by 1
|
||||
.Em ulp ) ,
|
||||
then
|
||||
.Bd -ragged -compact
|
||||
5.9e\-08 < 0.5**24 < (x'\-x)/x \(<= 0.5**23 < 1.2e\-07.
|
||||
.Ed
|
||||
.Ed
|
||||
.Pp
|
||||
.Bl -column "XXX" -compact
|
||||
Range: Overflow threshold = 2.0**128 = 3.4e38
|
||||
Underflow threshold = 0.5**126 = 1.2e\-38
|
||||
.El
|
||||
.Bd -ragged -offset indent -compact
|
||||
Underflowed results round to the nearest
|
||||
integer multiple of 0.5**149 = 1.4e\-45.
|
||||
.Ed
|
||||
.Ed
|
||||
.Pp
|
||||
Double-precision:
|
||||
.Bd -ragged -offset indent -compact
|
||||
Type name:
|
||||
.Vt double
|
||||
.Bd -ragged -offset indent -compact
|
||||
On some architectures,
|
||||
.Vt long double
|
||||
is the the same as
|
||||
.Vt double .
|
||||
.Ed
|
||||
.Pp
|
||||
Wordsize: 64 bits.
|
||||
.Pp
|
||||
Precision: 53 significant bits,
|
||||
roughly like 16 significant decimals.
|
||||
.Bd -ragged -offset indent -compact
|
||||
If x and x' are consecutive positive double-precision
|
||||
numbers (they differ by 1
|
||||
.Em ulp ) ,
|
||||
then
|
||||
.Bd -ragged -compact
|
||||
1.1e\-16 < 0.5**53 < (x'\-x)/x \(<= 0.5**52 < 2.3e\-16.
|
||||
.Ed
|
||||
.Ed
|
||||
.Pp
|
||||
.Bl -column "XXX" -compact
|
||||
Range: Overflow threshold = 2.0**1024 = 1.8e308
|
||||
Underflow threshold = 0.5**1022 = 2.2e\-308
|
||||
.El
|
||||
.Bd -ragged -offset indent -compact
|
||||
Underflowed results round to the nearest
|
||||
integer multiple of 0.5**1074 = 4.9e\-324.
|
||||
.Ed
|
||||
.Ed
|
||||
.Pp
|
||||
Extended-precision:
|
||||
.Bd -ragged -offset indent -compact
|
||||
Type name:
|
||||
.Vt long double
|
||||
(when supported by the hardware)
|
||||
.Pp
|
||||
Wordsize: 96 bits.
|
||||
.Pp
|
||||
Precision: 64 significant bits,
|
||||
roughly like 19 significant decimals.
|
||||
.Bd -ragged -offset indent -compact
|
||||
If x and x' are consecutive positive double-precision
|
||||
numbers (they differ by 1
|
||||
.Em ulp ) ,
|
||||
then
|
||||
.Bd -ragged -compact
|
||||
1.0e\-19 < 0.5**63 < (x'\-x)/x \(<= 0.5**62 < 2.2e\-19.
|
||||
.Ed
|
||||
.Ed
|
||||
.Pp
|
||||
.Bl -column "XXX" -compact
|
||||
Range: Overflow threshold = 2.0**16384 = 1.2e4932
|
||||
Underflow threshold = 0.5**16382 = 3.4e\-4932
|
||||
.El
|
||||
.Bd -ragged -offset indent -compact
|
||||
Underflowed results round to the nearest
|
||||
integer multiple of 0.5**16445 = 5.7e\-4953.
|
||||
.Ed
|
||||
.Ed
|
||||
.Pp
|
||||
Quad-extended-precision:
|
||||
.Bd -ragged -offset indent -compact
|
||||
Type name:
|
||||
.Vt long double
|
||||
(when supported by the hardware)
|
||||
.Pp
|
||||
Wordsize: 128 bits.
|
||||
.Pp
|
||||
Precision: 113 significant bits,
|
||||
roughly like 34 significant decimals.
|
||||
.Bd -ragged -offset indent -compact
|
||||
If x and x' are consecutive positive double-precision
|
||||
numbers (they differ by 1
|
||||
.Em ulp ) ,
|
||||
then
|
||||
.Bd -ragged -compact
|
||||
9.6e\-35 < 0.5**113 < (x'\-x)/x \(<= 0.5**112 < 2.0e\-34.
|
||||
.Ed
|
||||
.Ed
|
||||
.Pp
|
||||
.Bl -column "XXX" -compact
|
||||
Range: Overflow threshold = 2.0**16384 = 1.2e4932
|
||||
Underflow threshold = 0.5**16382 = 3.4e\-4932
|
||||
.El
|
||||
.Bd -ragged -offset indent -compact
|
||||
Underflowed results round to the nearest
|
||||
integer multiple of 0.5**16494 = 6.5e\-4966.
|
||||
.Ed
|
||||
.Ed
|
||||
.Ss Additional Information Regarding Exceptions
|
||||
.Pp
|
||||
For each kind of floating-point exception, IEEE 754
|
||||
provides a Flag that is raised each time its exception
|
||||
is signaled, and stays raised until the program resets
|
||||
it.
|
||||
Programs may also test, save and restore a flag.
|
||||
Thus, IEEE 754 provides three ways by which programs
|
||||
may cope with exceptions for which the default result
|
||||
might be unsatisfactory:
|
||||
.Bl -enum
|
||||
.It
|
||||
Test for a condition that might cause an exception
|
||||
later, and branch to avoid the exception.
|
||||
.It
|
||||
Test a flag to see whether an exception has occurred
|
||||
since the program last reset its flag.
|
||||
.It
|
||||
Test a result to see whether it is a value that only
|
||||
an exception could have produced.
|
||||
.Pp
|
||||
CAUTION: The only reliable ways to discover
|
||||
whether Underflow has occurred are to test whether
|
||||
products or quotients lie closer to zero than the
|
||||
underflow threshold, or to test the Underflow
|
||||
flag.
|
||||
(Sums and differences cannot underflow in
|
||||
IEEE 754; if x \(!= y then x\-y is correct to
|
||||
full precision and certainly nonzero regardless of
|
||||
how tiny it may be.)
|
||||
Products and quotients that
|
||||
underflow gradually can lose accuracy gradually
|
||||
without vanishing, so comparing them with zero
|
||||
(as one might on a VAX) will not reveal the loss.
|
||||
Fortunately, if a gradually underflowed value is
|
||||
destined to be added to something bigger than the
|
||||
underflow threshold, as is almost always the case,
|
||||
digits lost to gradual underflow will not be missed
|
||||
because they would have been rounded off anyway.
|
||||
So gradual underflows are usually
|
||||
.Em provably
|
||||
ignorable.
|
||||
The same cannot be said of underflows flushed to 0.
|
||||
.El
|
||||
.Pp
|
||||
At the option of an implementor conforming to IEEE 754,
|
||||
other ways to cope with exceptions may be provided:
|
||||
.Bl -enum
|
||||
.It
|
||||
ABORT.
|
||||
This mechanism classifies an exception in
|
||||
advance as an incident to be handled by means
|
||||
traditionally associated with error-handling
|
||||
statements like "ON ERROR GO TO ...".
|
||||
Different
|
||||
languages offer different forms of this statement,
|
||||
but most share the following characteristics:
|
||||
.Bl -dash
|
||||
.It
|
||||
No means is provided to substitute a value for
|
||||
the offending operation's result and resume
|
||||
computation from what may be the middle of an
|
||||
expression.
|
||||
An exceptional result is abandoned.
|
||||
.It
|
||||
In a subprogram that lacks an error-handling
|
||||
statement, an exception causes the subprogram to
|
||||
abort within whatever program called it, and so
|
||||
on back up the chain of calling subprograms until
|
||||
an error-handling statement is encountered or the
|
||||
whole task is aborted and memory is dumped.
|
||||
.El
|
||||
.It
|
||||
STOP.
|
||||
This mechanism, requiring an interactive
|
||||
debugging environment, is more for the programmer
|
||||
than the program.
|
||||
It classifies an exception in
|
||||
advance as a symptom of a programmer's error; the
|
||||
exception suspends execution as near as it can to
|
||||
the offending operation so that the programmer can
|
||||
look around to see how it happened.
|
||||
Quite often
|
||||
the first several exceptions turn out to be quite
|
||||
unexceptionable, so the programmer ought ideally
|
||||
to be able to resume execution after each one as if
|
||||
execution had not been stopped.
|
||||
.It
|
||||
\&... Other ways lie beyond the scope of this document.
|
||||
.El
|
||||
.Pp
|
||||
Ideally, each
|
||||
elementary function should act as if it were indivisible, or
|
||||
atomic, in the sense that ...
|
||||
.Bl -enum
|
||||
.It
|
||||
No exception should be signaled that is not deserved by
|
||||
the data supplied to that function.
|
||||
.It
|
||||
Any exception signaled should be identified with that
|
||||
function rather than with one of its subroutines.
|
||||
.It
|
||||
The internal behavior of an atomic function should not
|
||||
be disrupted when a calling program changes from
|
||||
one to another of the five or so ways of handling
|
||||
exceptions listed above, although the definition
|
||||
of the function may be correlated intentionally
|
||||
with exception handling.
|
||||
.El
|
||||
.Pp
|
||||
The functions in
|
||||
.Nm libm
|
||||
are only approximately atomic.
|
||||
They signal no inappropriate exception except possibly ...
|
||||
.Bl -tag -width indent -offset indent -compact
|
||||
.It Xo
|
||||
Over/Underflow
|
||||
.Xc
|
||||
when a result, if properly computed, might have lain barely within range, and
|
||||
.It Xo
|
||||
Inexact in
|
||||
.Fn cabs ,
|
||||
.Fn cbrt ,
|
||||
.Fn hypot ,
|
||||
.Fn log10
|
||||
and
|
||||
.Fn pow
|
||||
.Xc
|
||||
when it happens to be exact, thanks to fortuitous cancellation of errors.
|
||||
.El
|
||||
Otherwise, ...
|
||||
.Bl -tag -width indent -offset indent -compact
|
||||
.It Xo
|
||||
Invalid Operation is signaled only when
|
||||
.Xc
|
||||
any result but \*(Na would probably be misleading.
|
||||
.It Xo
|
||||
Overflow is signaled only when
|
||||
.Xc
|
||||
the exact result would be finite but beyond the overflow threshold.
|
||||
.It Xo
|
||||
Divide-by-Zero is signaled only when
|
||||
.Xc
|
||||
a function takes exactly infinite values at finite operands.
|
||||
.It Xo
|
||||
Underflow is signaled only when
|
||||
.Xc
|
||||
the exact result would be nonzero but tinier than the underflow threshold.
|
||||
.It Xo
|
||||
Inexact is signaled only when
|
||||
.Xc
|
||||
greater range or precision would be needed to represent the exact result.
|
||||
.El
|
||||
.Sh SEE ALSO
|
||||
.Xr fenv 3 ,
|
||||
.Xr ieee_test 3 ,
|
||||
.Xr math 3
|
||||
.Pp
|
||||
An explanation of IEEE 754 and its proposed extension p854
|
||||
was published in the IEEE magazine MICRO in August 1984 under
|
||||
the title "A Proposed Radix- and Word-length-independent
|
||||
Standard for Floating-point Arithmetic" by
|
||||
.An "W. J. Cody"
|
||||
et al.
|
||||
The manuals for Pascal, C and BASIC on the Apple Macintosh
|
||||
document the features of IEEE 754 pretty well.
|
||||
Articles in the IEEE magazine COMPUTER vol.\& 14 no.\& 3 (Mar.\&
|
||||
1981), and in the ACM SIGNUM Newsletter Special Issue of
|
||||
Oct.\& 1979, may be helpful although they pertain to
|
||||
superseded drafts of the standard.
|
||||
.Sh STANDARDS
|
||||
.St -ieee754
|
@ -1,93 +0,0 @@
|
||||
.\" Copyright (c) 1985, 1991 Regents of the University of California.
|
||||
.\" 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.
|
||||
.\" 3. All advertising materials mentioning features or use of this software
|
||||
.\" must display the following acknowledgement:
|
||||
.\" This product includes software developed by the University of
|
||||
.\" California, Berkeley and its contributors.
|
||||
.\" 4. Neither the name of the University nor the names of its contributors
|
||||
.\" may be used to endorse or promote products derived from this software
|
||||
.\" without specific prior written permission.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
|
||||
.\"
|
||||
.\" from: @(#)ieee.3 6.4 (Berkeley) 5/6/91
|
||||
.\" $FreeBSD: src/lib/msun/man/ieee_test.3,v 1.13 2005/11/17 13:00:00 ru Exp $
|
||||
.\"
|
||||
.Dd November 6, 2005
|
||||
.Dt IEEE_TEST 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm scalb ,
|
||||
.Nm scalbf ,
|
||||
.Nm significand ,
|
||||
.Nm significandf
|
||||
.Nd IEEE test functions
|
||||
.Sh LIBRARY
|
||||
.Lb libm
|
||||
.Sh SYNOPSIS
|
||||
.In math.h
|
||||
.Ft double
|
||||
.Fn scalb "double x" "double n"
|
||||
.Ft float
|
||||
.Fn scalbf "float x" "float n"
|
||||
.Ft double
|
||||
.Fn significand "double x"
|
||||
.Ft float
|
||||
.Fn significandf "float x"
|
||||
.Sh DESCRIPTION
|
||||
These functions allow users to test conformance to
|
||||
.St -ieee754 .
|
||||
Their use is not otherwise recommended.
|
||||
.Pp
|
||||
.Fn scalb x n
|
||||
and
|
||||
.Fn scalbf x n
|
||||
return
|
||||
.Fa x Ns \(**(2** Ns Fa n )
|
||||
computed by exponent manipulation.
|
||||
If
|
||||
.Fa n
|
||||
is not an integer, \*(Pm\*(If, or an \*(Na, the result is unspecified.
|
||||
.Pp
|
||||
.Fn significand x
|
||||
and
|
||||
.Fn significandf x
|
||||
return
|
||||
.Fa sig ,
|
||||
where
|
||||
.Fa x
|
||||
:=
|
||||
.Fa sig No \(** 2** Ns Fa n
|
||||
with 1 \(<=
|
||||
.Fa sig
|
||||
< 2.
|
||||
.Fn significand x
|
||||
and
|
||||
.Fn significandf x
|
||||
are not defined when
|
||||
.Fa x
|
||||
is 0, \*(Pm\*(If, or \*(Na.
|
||||
.Sh SEE ALSO
|
||||
.Xr ieee 3 ,
|
||||
.Xr math 3
|
||||
.Sh STANDARDS
|
||||
.St -ieee754
|
127
libm/man/ilogb.3
127
libm/man/ilogb.3
@ -1,127 +0,0 @@
|
||||
.\" Copyright (c) 1985, 1991 Regents of the University of California.
|
||||
.\" 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.
|
||||
.\" 3. All advertising materials mentioning features or use of this software
|
||||
.\" must display the following acknowledgement:
|
||||
.\" This product includes software developed by the University of
|
||||
.\" California, Berkeley and its contributors.
|
||||
.\" 4. Neither the name of the University nor the names of its contributors
|
||||
.\" may be used to endorse or promote products derived from this software
|
||||
.\" without specific prior written permission.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
|
||||
.\"
|
||||
.\" from: @(#)ieee.3 6.4 (Berkeley) 5/6/91
|
||||
.\" $FreeBSD: src/lib/msun/man/ilogb.3,v 1.3 2005/11/17 13:00:00 ru Exp $
|
||||
.\"
|
||||
.Dd November 6, 2005
|
||||
.Dt ILOGB 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm ilogb ,
|
||||
.Nm ilogbf ,
|
||||
.Nm ilogbl ,
|
||||
.Nm logb ,
|
||||
.Nm logbf
|
||||
.Nd extract exponent
|
||||
.Sh LIBRARY
|
||||
.Lb libm
|
||||
.Sh SYNOPSIS
|
||||
.In math.h
|
||||
.Ft int
|
||||
.Fn ilogb "double x"
|
||||
.Ft int
|
||||
.Fn ilogbf "float x"
|
||||
.Ft int
|
||||
.Fn ilogbl "long double x"
|
||||
.Ft double
|
||||
.Fn logb "double x"
|
||||
.Ft float
|
||||
.Fn logbf "float x"
|
||||
.Sh DESCRIPTION
|
||||
.Fn ilogb ,
|
||||
.Fn ilogbf
|
||||
and
|
||||
.Fn ilogbl
|
||||
return
|
||||
.Fa x Ns 's exponent
|
||||
in integer format.
|
||||
.Fn ilogb \*(Pm\*(If
|
||||
returns
|
||||
.Dv INT_MAX ,
|
||||
.Fn ilogb \*(Pm\*(Na
|
||||
returns
|
||||
.Dv FP_ILOGBNAN ,
|
||||
and
|
||||
.Fn ilogb 0
|
||||
returns
|
||||
.Dv FP_ILOGB0 .
|
||||
.Pp
|
||||
.Fn logb x
|
||||
and
|
||||
.Fn logbf x
|
||||
return
|
||||
.Fa x Ns 's exponent
|
||||
in floating\-point format with the same precision as
|
||||
.Fa x .
|
||||
.Fn logb \*(Pm\*(If
|
||||
returns +\*(If, and
|
||||
.Fn logb 0
|
||||
returns -\*(If with a division by zero exception.
|
||||
.Sh SEE ALSO
|
||||
.Xr frexp 3 ,
|
||||
.Xr ieee 3 ,
|
||||
.Xr math 3 ,
|
||||
.Xr scalbn 3
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Fn ilogb ,
|
||||
.Fn ilogbf ,
|
||||
.Fn ilogbl ,
|
||||
.Fn logb
|
||||
and
|
||||
.Fn logbf
|
||||
routines conform to
|
||||
.St -isoC-99 .
|
||||
.Fn logb
|
||||
and
|
||||
.Fn logbf
|
||||
implement the logb function recommended by
|
||||
.St -ieee754 .
|
||||
.Sh HISTORY
|
||||
The
|
||||
.Fn logb
|
||||
function appeared in
|
||||
.Bx 4.3 .
|
||||
The
|
||||
.Fn ilogb
|
||||
function appeared in
|
||||
.Fx 1.1.5 .
|
||||
The
|
||||
.Fn ilogbf
|
||||
and
|
||||
.Fn logbf
|
||||
functions appeared in
|
||||
.Fx 2.0 .
|
||||
The
|
||||
.Fn ilogbl
|
||||
function appeared in
|
||||
.Fx 5.4 .
|
142
libm/man/j0.3
142
libm/man/j0.3
@ -1,142 +0,0 @@
|
||||
.\" Copyright (c) 1985, 1991 Regents of the University of California.
|
||||
.\" 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.
|
||||
.\" 3. All advertising materials mentioning features or use of this software
|
||||
.\" must display the following acknowledgement:
|
||||
.\" This product includes software developed by the University of
|
||||
.\" California, Berkeley and its contributors.
|
||||
.\" 4. Neither the name of the University nor the names of its contributors
|
||||
.\" may be used to endorse or promote products derived from this software
|
||||
.\" without specific prior written permission.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
|
||||
.\"
|
||||
.\" from: @(#)j0.3 6.7 (Berkeley) 4/19/91
|
||||
.\" $FreeBSD: src/lib/msun/man/j0.3,v 1.13 2005/01/14 23:28:28 das Exp $
|
||||
.\"
|
||||
.Dd January 14, 2005
|
||||
.Dt J0 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm j0 ,
|
||||
.Nm j0f ,
|
||||
.Nm j1 ,
|
||||
.Nm j1f ,
|
||||
.Nm jn ,
|
||||
.Nm jnf ,
|
||||
.Nm y0 ,
|
||||
.Nm y0f ,
|
||||
.Nm y1 ,
|
||||
.Nm y1f ,
|
||||
.Nm yn ,
|
||||
.Nm ynf
|
||||
.Nd Bessel functions of first and second kind
|
||||
.Sh LIBRARY
|
||||
.Lb libm
|
||||
.Sh SYNOPSIS
|
||||
.In math.h
|
||||
.Ft double
|
||||
.Fn j0 "double x"
|
||||
.Ft float
|
||||
.Fn j0f "float x"
|
||||
.Ft double
|
||||
.Fn j1 "double x"
|
||||
.Ft float
|
||||
.Fn j1f "float x"
|
||||
.Ft double
|
||||
.Fn jn "int n" "double x"
|
||||
.Ft float
|
||||
.Fn jnf "int n" "float x"
|
||||
.Ft double
|
||||
.Fn y0 "double x"
|
||||
.Ft float
|
||||
.Fn y0f "float x"
|
||||
.Ft double
|
||||
.Fn y1 "double x"
|
||||
.Ft float
|
||||
.Fn y1f "float x"
|
||||
.Ft double
|
||||
.Fn yn "int n" "double x"
|
||||
.Ft float
|
||||
.Fn ynf "int n" "float x"
|
||||
.Sh DESCRIPTION
|
||||
The functions
|
||||
.Fn j0 ,
|
||||
.Fn j0f ,
|
||||
.Fn j1
|
||||
and
|
||||
.Fn j1f
|
||||
compute the
|
||||
.Em Bessel function of the first kind of the order
|
||||
0 and the
|
||||
.Em order
|
||||
1, respectively,
|
||||
for the
|
||||
real value
|
||||
.Fa x ;
|
||||
the functions
|
||||
.Fn jn
|
||||
and
|
||||
.Fn jnf
|
||||
compute the
|
||||
.Em Bessel function of the first kind of the integer
|
||||
.Em order
|
||||
.Fa n
|
||||
for the real value
|
||||
.Fa x .
|
||||
.Pp
|
||||
The functions
|
||||
.Fn y0 ,
|
||||
.Fn y0f ,
|
||||
.Fn y1 ,
|
||||
and
|
||||
.Fn y1f
|
||||
compute the linearly independent
|
||||
.Em Bessel function of the second kind of the order
|
||||
0 and the
|
||||
.Em order
|
||||
1, respectively,
|
||||
for the
|
||||
positive
|
||||
.Em real
|
||||
value
|
||||
.Fa x ;
|
||||
the functions
|
||||
.Fn yn
|
||||
and
|
||||
.Fn ynf
|
||||
compute the
|
||||
.Em Bessel function of the second kind for the integer
|
||||
.Em order
|
||||
.Fa n
|
||||
for the positive
|
||||
.Em real
|
||||
value
|
||||
.Fa x .
|
||||
.Sh RETURN VALUES
|
||||
If these functions are successful,
|
||||
the computed value is returned.
|
||||
.Sh SEE ALSO
|
||||
.Xr math 3
|
||||
.Sh HISTORY
|
||||
This set of functions
|
||||
appeared in
|
||||
.At v7 .
|
@ -1,185 +0,0 @@
|
||||
.\" Copyright (c) 1985, 1991 Regents of the University of California.
|
||||
.\" 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.
|
||||
.\" 3. All advertising materials mentioning features or use of this software
|
||||
.\" must display the following acknowledgement:
|
||||
.\" This product includes software developed by the University of
|
||||
.\" California, Berkeley and its contributors.
|
||||
.\" 4. Neither the name of the University nor the names of its contributors
|
||||
.\" may be used to endorse or promote products derived from this software
|
||||
.\" without specific prior written permission.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
|
||||
.\"
|
||||
.\" from: @(#)lgamma.3 6.6 (Berkeley) 12/3/92
|
||||
.\" $FreeBSD: src/lib/msun/man/lgamma.3,v 1.22 2005/01/16 16:46:14 ru Exp $
|
||||
.\"
|
||||
.Dd January 14, 2005
|
||||
.Dt LGAMMA 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm lgamma ,
|
||||
.Nm lgamma_r ,
|
||||
.Nm lgammaf ,
|
||||
.Nm lgammaf_r ,
|
||||
.Nm gamma ,
|
||||
.Nm gamma_r ,
|
||||
.Nm gammaf ,
|
||||
.Nm gammaf_r ,
|
||||
.Nm tgamma
|
||||
.Nd log gamma functions, gamma function
|
||||
.Sh LIBRARY
|
||||
.Lb libm
|
||||
.Sh SYNOPSIS
|
||||
.In math.h
|
||||
.Ft extern int
|
||||
.Fa signgam ;
|
||||
.sp
|
||||
.Ft double
|
||||
.Fn lgamma "double x"
|
||||
.Ft double
|
||||
.Fn lgamma_r "double x" "int *signgamp"
|
||||
.Ft float
|
||||
.Fn lgammaf "float x"
|
||||
.Ft float
|
||||
.Fn lgammaf_r "float x" "int *signgamp"
|
||||
.Ft double
|
||||
.Fn gamma "double x"
|
||||
.Ft double
|
||||
.Fn gamma_r "double x" "int *signgamp"
|
||||
.Ft float
|
||||
.Fn gammaf "float x"
|
||||
.Ft float
|
||||
.Fn gammaf_r "float x" "int *signgamp"
|
||||
.Ft double
|
||||
.Fn tgamma "double x"
|
||||
.Sh DESCRIPTION
|
||||
.Fn lgamma x
|
||||
and
|
||||
.Fn lgammaf x
|
||||
.if t \{\
|
||||
return ln\||\(*G(x)| where
|
||||
.Bd -unfilled -offset indent
|
||||
\(*G(x) = \(is\d\s8\z0\s10\u\u\s8\(if\s10\d t\u\s8x\-1\s10\d e\u\s8\-t\s10\d dt for x > 0 and
|
||||
\(*G(x) = \(*p/(\(*G(1\-x)\|sin(\(*px)) for x < 1.
|
||||
.Ed
|
||||
.\}
|
||||
.if n \
|
||||
return ln\||\(*G(x)|.
|
||||
.Pp
|
||||
The external integer
|
||||
.Fa signgam
|
||||
returns the sign of \(*G(x).
|
||||
.Pp
|
||||
.Fn lgamma_r x signgamp
|
||||
and
|
||||
.Fn lgammaf_r x signgamp
|
||||
provide the same functionality as
|
||||
.Fn lgamma x
|
||||
and
|
||||
.Fn lgammaf x
|
||||
but the caller must provide an integer to store the sign of \(*G(x).
|
||||
.Pp
|
||||
.Fn gamma ,
|
||||
.Fn gammaf ,
|
||||
.Fn gamma_r ,
|
||||
and
|
||||
.Fn gammaf_r
|
||||
are deprecated aliases for
|
||||
.Fn lgamma ,
|
||||
.Fn lgammaf ,
|
||||
.Fn lgamma_r ,
|
||||
and
|
||||
.Fn lgammaf_r ,
|
||||
respectively.
|
||||
.Fn tgamma x
|
||||
returns \(*G(x), with no effect on
|
||||
.Fa signgam .
|
||||
.Sh IDIOSYNCRASIES
|
||||
Do not use the expression
|
||||
.Dq Li signgam\(**exp(lgamma(x))
|
||||
to compute g := \(*G(x).
|
||||
Instead use a program like this (in C):
|
||||
.Bd -literal -offset indent
|
||||
lg = lgamma(x); g = signgam\(**exp(lg);
|
||||
.Ed
|
||||
.Pp
|
||||
Only after
|
||||
.Fn lgamma
|
||||
or
|
||||
.Fn lgammaf
|
||||
has returned can signgam be correct.
|
||||
.Pp
|
||||
For arguments in its range,
|
||||
.Fn tgamma
|
||||
is preferred, as for positive arguments
|
||||
it is accurate to within one unit in the last place.
|
||||
Exponentiation of
|
||||
.Fn lgamma
|
||||
will lose up to 10 significant bits.
|
||||
.Sh RETURN VALUES
|
||||
.Fn gamma ,
|
||||
.Fn gamma_r ,
|
||||
.Fn gammaf ,
|
||||
.Fn gammaf_r ,
|
||||
.Fn lgamma ,
|
||||
.Fn lgamma_r ,
|
||||
.Fn lgammaf ,
|
||||
and
|
||||
.Fn lgammaf_r
|
||||
return appropriate values unless an argument is out of range.
|
||||
Overflow will occur for sufficiently large positive values, and
|
||||
non-positive integers.
|
||||
For large non-integer negative values,
|
||||
.Fn tgamma
|
||||
will underflow.
|
||||
.Sh SEE ALSO
|
||||
.Xr math 3
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Fn lgamma
|
||||
and
|
||||
.Fn tgamma
|
||||
functions are expected to conform to
|
||||
.St -isoC-99 .
|
||||
.Sh HISTORY
|
||||
The
|
||||
.Fn lgamma
|
||||
function appeared in
|
||||
.Bx 4.3 .
|
||||
The
|
||||
.Fn gamma
|
||||
function appeared in
|
||||
.Bx 4.4
|
||||
as a function which computed \(*G(x).
|
||||
This version was used in
|
||||
.Fx 1.1 .
|
||||
The name
|
||||
.Fn gamma
|
||||
was originally dedicated to the
|
||||
.Fn lgamma
|
||||
function,
|
||||
and that usage was restored by switching to Sun's fdlibm in
|
||||
.Fx 1.1.5 .
|
||||
The
|
||||
.Fn tgamma
|
||||
function appeared in
|
||||
.Fx 5.0 .
|
@ -1,94 +0,0 @@
|
||||
.\" Copyright (c) 2005 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.
|
||||
.\"
|
||||
.\" $FreeBSD: src/lib/msun/man/lrint.3,v 1.2 2005/01/13 10:43:01 ru Exp $
|
||||
.\"
|
||||
.Dd January 11, 2005
|
||||
.Dt LRINT 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm llrint ,
|
||||
.Nm llrintf ,
|
||||
.Nm lrint ,
|
||||
.Nm lrintf
|
||||
.Nd "convert to integer"
|
||||
.Sh LIBRARY
|
||||
.Lb libm
|
||||
.Sh SYNOPSIS
|
||||
.In math.h
|
||||
.Ft "long long"
|
||||
.Fn llrint "double x"
|
||||
.Ft "long long"
|
||||
.Fn llrintf "float x"
|
||||
.Ft long
|
||||
.Fn lrint "double x"
|
||||
.Ft long
|
||||
.Fn lrintf "float x"
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Fn lrint
|
||||
function returns the integer nearest to its argument
|
||||
.Fa x
|
||||
according to the current rounding mode.
|
||||
If the rounded result is too large to be represented as a
|
||||
.Vt long
|
||||
value, an invalid exception is raised and the return value is undefined.
|
||||
Otherwise, if
|
||||
.Fa x
|
||||
is not an integer,
|
||||
.Fn lrint
|
||||
raises an inexact exception.
|
||||
When the rounded result is representable as a
|
||||
.Vt long ,
|
||||
the expression
|
||||
.Fn lrint x
|
||||
is equivalent to
|
||||
.Po Vt long Pc Ns Fn rint x
|
||||
(although the former may be more efficient).
|
||||
.Pp
|
||||
The
|
||||
.Fn llrint ,
|
||||
.Fn llrintf ,
|
||||
and
|
||||
.Fn lrintf
|
||||
functions differ from
|
||||
.Fn lrint
|
||||
only in their input and output types.
|
||||
.Sh SEE ALSO
|
||||
.Xr lround 3 ,
|
||||
.Xr math 3 ,
|
||||
.Xr rint 3 ,
|
||||
.Xr round 3
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Fn llrint ,
|
||||
.Fn llrintf ,
|
||||
.Fn lrint ,
|
||||
and
|
||||
.Fn lrintf
|
||||
functions conform to
|
||||
.St -isoC-99 .
|
||||
.Sh HISTORY
|
||||
These routines first appeared in
|
||||
.Fx 5.4 .
|
@ -1,112 +0,0 @@
|
||||
.\" Copyright (c) 2005 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.
|
||||
.\"
|
||||
.\" $FreeBSD: src/lib/msun/man/lround.3,v 1.4 2005/06/15 19:04:04 ru Exp $
|
||||
.\"
|
||||
.Dd April 7, 2005
|
||||
.Dt LROUND 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm llround ,
|
||||
.Nm llroundf ,
|
||||
.Nm llroundl ,
|
||||
.Nm lround ,
|
||||
.Nm lroundf ,
|
||||
.Nm lroundl
|
||||
.Nd "convert to nearest integral value"
|
||||
.Sh LIBRARY
|
||||
.Lb libm
|
||||
.Sh SYNOPSIS
|
||||
.In math.h
|
||||
.Ft "long long"
|
||||
.Fn llround "double x"
|
||||
.Ft "long long"
|
||||
.Fn llroundf "float x"
|
||||
.Ft "long long"
|
||||
.Fn llroundl "long double x"
|
||||
.Ft long
|
||||
.Fn lround "double x"
|
||||
.Ft long
|
||||
.Fn lroundf "float x"
|
||||
.Ft long
|
||||
.Fn lroundl "long double x"
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Fn lround
|
||||
function returns the integer nearest to its argument
|
||||
.Fa x ,
|
||||
rounding away from zero in halfway cases.
|
||||
If the rounded result is too large to be represented as a
|
||||
.Vt long
|
||||
value, an invalid exception is raised and the return value is undefined.
|
||||
Otherwise, if
|
||||
.Fa x
|
||||
is not an integer,
|
||||
.Fn lround
|
||||
may raise an inexact exception.
|
||||
When the rounded result is representable as a
|
||||
.Vt long ,
|
||||
the expression
|
||||
.Fn lround x
|
||||
is equivalent to
|
||||
.Po Vt long Pc Ns Fn round x
|
||||
(although the former may be more efficient).
|
||||
.Pp
|
||||
The
|
||||
.Fn llround ,
|
||||
.Fn llroundf ,
|
||||
.Fn llroundl ,
|
||||
.Fn lroundf
|
||||
and
|
||||
.Fn lroundl
|
||||
functions differ from
|
||||
.Fn lround
|
||||
only in their input and output types.
|
||||
.Sh SEE ALSO
|
||||
.Xr lrint 3 ,
|
||||
.Xr math 3 ,
|
||||
.Xr rint 3 ,
|
||||
.Xr round 3
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Fn llround ,
|
||||
.Fn llroundf ,
|
||||
.Fn llroundl ,
|
||||
.Fn lround ,
|
||||
.Fn lroundf ,
|
||||
and
|
||||
.Fn lroundl
|
||||
functions conform to
|
||||
.St -isoC-99 .
|
||||
.Sh HISTORY
|
||||
The
|
||||
.Vt float
|
||||
and
|
||||
.Vt double
|
||||
versions of these routines first appeared in
|
||||
.Fx 5.4 .
|
||||
The
|
||||
.Vt "long double"
|
||||
versions appeared in
|
||||
.Fx 6.0 .
|
242
libm/man/math.3
242
libm/man/math.3
@ -1,242 +0,0 @@
|
||||
.\" Copyright (c) 1985 Regents of the University of California.
|
||||
.\" 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.
|
||||
.\" 3. All advertising materials mentioning features or use of this software
|
||||
.\" must display the following acknowledgement:
|
||||
.\" This product includes software developed by the University of
|
||||
.\" California, Berkeley and its contributors.
|
||||
.\" 4. Neither the name of the University nor the names of its contributors
|
||||
.\" may be used to endorse or promote products derived from this software
|
||||
.\" without specific prior written permission.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
|
||||
.\"
|
||||
.\" from: @(#)math.3 6.10 (Berkeley) 5/6/91
|
||||
.\" $FreeBSD: src/lib/msun/man/math.3,v 1.27 2005/11/17 13:00:00 ru Exp $
|
||||
.\"
|
||||
.Dd November 6, 2005
|
||||
.Dt MATH 3
|
||||
.Os
|
||||
.if n \{\
|
||||
.char \[sr] "sqrt
|
||||
.\}
|
||||
.Sh NAME
|
||||
.Nm math
|
||||
.Nd "floating-point mathematical library"
|
||||
.Sh LIBRARY
|
||||
.Lb libm
|
||||
.Sh SYNOPSIS
|
||||
.In math.h
|
||||
.Sh DESCRIPTION
|
||||
These functions constitute the C math library.
|
||||
.Sh "LIST OF FUNCTIONS"
|
||||
Each of the following
|
||||
.Vt double
|
||||
functions has a
|
||||
.Vt float
|
||||
counterpart with an
|
||||
.Ql f
|
||||
appended to the name and a
|
||||
.Vt "long double"
|
||||
counterpart with an
|
||||
.Ql l
|
||||
appended.
|
||||
As an example, the
|
||||
.Vt float
|
||||
and
|
||||
.Vt "long double"
|
||||
counterparts of
|
||||
.Ft double
|
||||
.Fn acos "double x"
|
||||
are
|
||||
.Ft float
|
||||
.Fn acosf "float x"
|
||||
and
|
||||
.Ft "long double"
|
||||
.Fn acosl "long double x" ,
|
||||
respectively.
|
||||
.de Cl
|
||||
.Bl -column "isgreaterequal" "bessel function of the second kind of the order 0"
|
||||
.Em "Name Description"
|
||||
..
|
||||
.Ss Algebraic Functions
|
||||
.Cl
|
||||
cbrt cube root
|
||||
fma fused multiply-add
|
||||
hypot Euclidean distance
|
||||
sqrt square root
|
||||
.El
|
||||
.Ss Classification Functions
|
||||
.Cl
|
||||
fpclassify classify a floating-point value
|
||||
isfinite determine whether a value is finite
|
||||
isinf determine whether a value is infinite
|
||||
isnan determine whether a value is \*(Na
|
||||
isnormal determine whether a value is normalized
|
||||
.El
|
||||
.Ss Exponent Manipulation Functions
|
||||
.Cl
|
||||
frexp extract exponent and mantissa
|
||||
ilogb extract exponent
|
||||
ldexp multiply by power of 2
|
||||
logb extract exponent
|
||||
scalbln adjust exponent
|
||||
scalbn adjust exponent
|
||||
.El
|
||||
.Ss Extremum- and Sign-Related Functions
|
||||
.Cl
|
||||
copysign copy sign bit
|
||||
fabs absolute value
|
||||
fdim positive difference
|
||||
fmax maximum function
|
||||
fmin minimum function
|
||||
signbit extract sign bit
|
||||
.El
|
||||
.\" .Ss Not a Number
|
||||
.\" .Cl
|
||||
.\" nan return quiet \*(Na) 0
|
||||
.\" .El
|
||||
.Ss Residue and Rounding Functions
|
||||
.Cl
|
||||
ceil integer no less than
|
||||
floor integer no greater than
|
||||
fmod positive remainder
|
||||
llrint round to integer in fixed-point format
|
||||
llround round to nearest integer in fixed-point format
|
||||
lrint round to integer in fixed-point format
|
||||
lround round to nearest integer in fixed-point format
|
||||
modf extract integer and fractional parts
|
||||
nearbyint round to integer (silent)
|
||||
nextafter next representable value
|
||||
nexttoward next representable value
|
||||
remainder remainder
|
||||
remquo remainder with partial quotient
|
||||
rint round to integer
|
||||
round round to nearest integer
|
||||
trunc integer no greater in magnitude than
|
||||
.El
|
||||
.Pp
|
||||
The
|
||||
.Fn ceil ,
|
||||
.Fn floor ,
|
||||
.Fn llround ,
|
||||
.Fn lround ,
|
||||
.Fn round ,
|
||||
and
|
||||
.Fn trunc
|
||||
functions round in predetermined directions, whereas
|
||||
.Fn llrint ,
|
||||
.Fn lrint ,
|
||||
and
|
||||
.Fn rint
|
||||
round according to the current (dynamic) rounding mode.
|
||||
For more information on controlling the dynamic rounding mode, see
|
||||
.Xr fenv 3
|
||||
and
|
||||
.Xr fesetround 3 .
|
||||
.Ss Silent Order Predicates
|
||||
.Cl
|
||||
isgreater greater than relation
|
||||
isgreaterequal greater than or equal to relation
|
||||
isless less than relation
|
||||
islessequal less than or equal to relation
|
||||
islessgreater less than or greater than relation
|
||||
isunordered unordered relation
|
||||
.El
|
||||
.Ss Transcendental Functions
|
||||
.Cl
|
||||
acos inverse cosine
|
||||
acosh inverse hyperbolic cosine
|
||||
asin inverse sine
|
||||
asinh inverse hyperbolic sine
|
||||
atan inverse tangent
|
||||
atanh inverse hyperbolic tangent
|
||||
atan2 atan(y/x); complex argument
|
||||
cos cosine
|
||||
cosh hyperbolic cosine
|
||||
erf error function
|
||||
erfc complementary error function
|
||||
exp exponential base e
|
||||
exp2 exponential base 2
|
||||
expm1 exp(x)\-1
|
||||
j0 Bessel function of the first kind of the order 0
|
||||
j1 Bessel function of the first kind of the order 1
|
||||
jn Bessel function of the first kind of the order n
|
||||
lgamma log gamma function
|
||||
log natural logarithm
|
||||
log10 logarithm to base 10
|
||||
log1p log(1+x)
|
||||
.\" log2 base 2 logarithm
|
||||
pow exponential x**y
|
||||
sin trigonometric function
|
||||
sinh hyperbolic function
|
||||
tan trigonometric function
|
||||
tanh hyperbolic function
|
||||
tgamma gamma function
|
||||
y0 Bessel function of the second kind of the order 0
|
||||
y1 Bessel function of the second kind of the order 1
|
||||
yn Bessel function of the second kind of the order n
|
||||
.El
|
||||
.Pp
|
||||
Unlike the algebraic functions listed earlier, the routines
|
||||
in this section may not produce a result that is correctly rounded,
|
||||
so reproducible results cannot be guaranteed across platforms.
|
||||
For most of these functions, however, incorrect rounding occurs
|
||||
rarely, and then only in very-close-to-halfway cases.
|
||||
.Sh SEE ALSO
|
||||
.Xr fenv 3 ,
|
||||
.Xr ieee 3
|
||||
.Sh HISTORY
|
||||
A math library with many of the present functions appeared in
|
||||
.At v7 .
|
||||
The library was substantially rewritten for
|
||||
.Bx 4.3
|
||||
to provide
|
||||
better accuracy and speed on machines supporting either VAX
|
||||
or IEEE 754 floating-point.
|
||||
Most of this library was replaced with FDLIBM, developed at Sun
|
||||
Microsystems, in
|
||||
.Fx 1.1.5 .
|
||||
Additional routines, including ones for
|
||||
.Vt float
|
||||
and
|
||||
.Vt long double
|
||||
values, were written for or imported into subsequent versions of FreeBSD.
|
||||
.Sh BUGS
|
||||
The
|
||||
.Fn log2
|
||||
and
|
||||
.Fn nan
|
||||
functions are missing, and many functions are not available in their
|
||||
.Vt "long double"
|
||||
variants.
|
||||
.Pp
|
||||
Many of the routines to compute transcendental functions produce
|
||||
inaccurate results in other than the default rounding mode.
|
||||
.Pp
|
||||
On some architectures, trigonometric argument reduction is not
|
||||
performed accurately, resulting in errors greater than 1
|
||||
.Em ulp
|
||||
for large arguments to
|
||||
.Fn cos ,
|
||||
.Fn sin ,
|
||||
and
|
||||
.Fn tan .
|
@ -1,100 +0,0 @@
|
||||
.\" Copyright (c) 1985, 1991 Regents of the University of California.
|
||||
.\" 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.
|
||||
.\" 3. All advertising materials mentioning features or use of this software
|
||||
.\" must display the following acknowledgement:
|
||||
.\" This product includes software developed by the University of
|
||||
.\" California, Berkeley and its contributors.
|
||||
.\" 4. Neither the name of the University nor the names of its contributors
|
||||
.\" may be used to endorse or promote products derived from this software
|
||||
.\" without specific prior written permission.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
|
||||
.\"
|
||||
.\" from: @(#)ieee.3 6.4 (Berkeley) 5/6/91
|
||||
.\" $FreeBSD: src/lib/msun/man/nextafter.3,v 1.2 2005/03/07 05:00:29 das Exp $
|
||||
.\"
|
||||
.Dd May 4, 2005
|
||||
.Dt NEXTAFTER 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm nextafter ,
|
||||
.Nm nextafterf ,
|
||||
.Nm nextafterl ,
|
||||
.Nm nexttoward ,
|
||||
.Nm nexttowardf ,
|
||||
.Nm nexttowardl
|
||||
.Nd next representable value
|
||||
.Sh LIBRARY
|
||||
.Lb libm
|
||||
.Sh SYNOPSIS
|
||||
.In math.h
|
||||
.Ft double
|
||||
.Fn nextafter "double x" "double y"
|
||||
.Ft float
|
||||
.Fn nextafterf "float x" "float y"
|
||||
.Ft long double
|
||||
.Fn nextafterl "long double x" "long double y"
|
||||
.Ft double
|
||||
.Fn nexttoward "double x" "long double y"
|
||||
.Ft float
|
||||
.Fn nexttowardf "float x" "long double y"
|
||||
.Ft long double
|
||||
.Fn nexttowardl "long double x" "long double y"
|
||||
.Sh DESCRIPTION
|
||||
These functions
|
||||
return the next machine representable number from
|
||||
.Fa x
|
||||
in direction
|
||||
.Fa y .
|
||||
.Sh SEE ALSO
|
||||
.Xr ieee 3 ,
|
||||
.Xr math 3
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Fn nextafter ,
|
||||
.Fn nextafterf ,
|
||||
.Fn nextafterl ,
|
||||
.Fn nexttoward ,
|
||||
.Fn nexttowardf ,
|
||||
and
|
||||
.Fn nexttowardl
|
||||
routines conform to
|
||||
.St -isoC-99 .
|
||||
They implement the Nextafter function recommended by
|
||||
.St -ieee754 ,
|
||||
with the extension that
|
||||
.Fn nextafter +0.0, -0.0
|
||||
returns
|
||||
.Li -0.0 ,
|
||||
and
|
||||
.Fn nextafter -0.0, +0.0
|
||||
returns
|
||||
.Li +0.0 .
|
||||
.Sh HISTORY
|
||||
The
|
||||
.Fn nextafter
|
||||
function appeared in
|
||||
.Bx 4.3 ,
|
||||
and
|
||||
.Fn nextafterf
|
||||
appeared in
|
||||
.Fx 2.0 .
|
@ -1,146 +0,0 @@
|
||||
.\" Copyright (c) 1985, 1991 Regents of the University of California.
|
||||
.\" 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.
|
||||
.\" 3. All advertising materials mentioning features or use of this software
|
||||
.\" must display the following acknowledgement:
|
||||
.\" This product includes software developed by the University of
|
||||
.\" California, Berkeley and its contributors.
|
||||
.\" 4. Neither the name of the University nor the names of its contributors
|
||||
.\" may be used to endorse or promote products derived from this software
|
||||
.\" without specific prior written permission.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
|
||||
.\"
|
||||
.\" from: @(#)ieee.3 6.4 (Berkeley) 5/6/91
|
||||
.\" $FreeBSD: src/lib/msun/man/remainder.3,v 1.4 2005/11/24 09:25:10 joel Exp $
|
||||
.\"
|
||||
.Dd March 24, 2005
|
||||
.Dt REMAINDER 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm remainder ,
|
||||
.Nm remainderf ,
|
||||
.Nm remquo ,
|
||||
.Nm remquof
|
||||
.Nd minimal residue functions
|
||||
.Sh LIBRARY
|
||||
.Lb libm
|
||||
.Sh SYNOPSIS
|
||||
.In math.h
|
||||
.Ft double
|
||||
.Fn remainder "double x" "double y"
|
||||
.Ft float
|
||||
.Fn remainderf "float x" "float y"
|
||||
.Ft double
|
||||
.Fn remquo "double x" "double y" "int *quo"
|
||||
.Ft float
|
||||
.Fn remquof "float x" "float y" "int *quo"
|
||||
.Sh DESCRIPTION
|
||||
.Fn remainder ,
|
||||
.Fn remainderf ,
|
||||
.Fn remquo ,
|
||||
and
|
||||
.Fn remquof
|
||||
return the remainder
|
||||
.Fa r
|
||||
:=
|
||||
.Fa x
|
||||
\-
|
||||
.Fa n\(**y
|
||||
where
|
||||
.Fa n
|
||||
is the integer nearest the exact value of
|
||||
.Bk -words
|
||||
.Fa x Ns / Ns Fa y ;
|
||||
.Ek
|
||||
moreover if
|
||||
.Pf \\*(Ba Fa n
|
||||
\-
|
||||
.Sm off
|
||||
.Fa x No / Fa y No \\*(Ba
|
||||
.Sm on
|
||||
=
|
||||
1/2
|
||||
then
|
||||
.Fa n
|
||||
is even.
|
||||
Consequently
|
||||
the remainder is computed exactly and
|
||||
.Sm off
|
||||
.Pf \\*(Ba Fa r No \\*(Ba
|
||||
.Sm on
|
||||
\*(Le
|
||||
.Sm off
|
||||
.Pf \\*(Ba Fa y No \\*(Ba/2 .
|
||||
.Sm on
|
||||
But attempting to take the remainder when
|
||||
.Fa y
|
||||
is 0 or
|
||||
.Fa x
|
||||
is \*(Pm\*(If is an invalid operation that produces a \*(Na.
|
||||
.Pp
|
||||
The
|
||||
.Fn remquo
|
||||
and
|
||||
.Fn remquof
|
||||
functions also store the last
|
||||
.Va k
|
||||
bits of
|
||||
.Fa n
|
||||
in the location pointed to by
|
||||
.Fa quo ,
|
||||
provided that
|
||||
.Fa n
|
||||
exists.
|
||||
The number of bits
|
||||
.Va k
|
||||
is platform-specific, but is guaranteed to be at least 3.
|
||||
.Sh SEE ALSO
|
||||
.Xr fmod 3 ,
|
||||
.Xr ieee 3 ,
|
||||
.Xr math 3
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Fn remainder ,
|
||||
.Fn remainderf ,
|
||||
.Fn remquo ,
|
||||
and
|
||||
.Fn remquof
|
||||
routines conform to
|
||||
.St -isoC-99 .
|
||||
The remainder is as defined in
|
||||
.St -ieee754 .
|
||||
.Sh HISTORY
|
||||
The
|
||||
.Fn remainder
|
||||
and
|
||||
.Fn remainderf
|
||||
functions appeared in
|
||||
.Bx 4.3
|
||||
and
|
||||
.Fx 2.0 ,
|
||||
respectively.
|
||||
The
|
||||
.Fn remquo
|
||||
and
|
||||
.Fn remquof
|
||||
functions were added in
|
||||
.Fx 6.0 .
|
103
libm/man/rint.3
103
libm/man/rint.3
@ -1,103 +0,0 @@
|
||||
.\" Copyright (c) 1985, 1991 Regents of the University of California.
|
||||
.\" 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.
|
||||
.\" 3. All advertising materials mentioning features or use of this software
|
||||
.\" must display the following acknowledgement:
|
||||
.\" This product includes software developed by the University of
|
||||
.\" California, Berkeley and its contributors.
|
||||
.\" 4. Neither the name of the University nor the names of its contributors
|
||||
.\" may be used to endorse or promote products derived from this software
|
||||
.\" without specific prior written permission.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
|
||||
.\"
|
||||
.\" from: @(#)rint.3 5.1 (Berkeley) 5/2/91
|
||||
.\" $FreeBSD: src/lib/msun/man/rint.3,v 1.11 2005/01/11 23:12:17 das Exp $
|
||||
.\"
|
||||
.Dd July 5, 2004
|
||||
.Dt RINT 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm nearbyint ,
|
||||
.Nm nearbyintf ,
|
||||
.Nm rint ,
|
||||
.Nm rintf
|
||||
.Nd round to integral value in floating-point format
|
||||
.Sh LIBRARY
|
||||
.Lb libm
|
||||
.Sh SYNOPSIS
|
||||
.In math.h
|
||||
.Ft double
|
||||
.Fn nearbyint "double x"
|
||||
.Ft float
|
||||
.Fn nearbyintf "float x"
|
||||
.Ft double
|
||||
.Fn rint "double x"
|
||||
.Ft float
|
||||
.Fn rintf "float x"
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Fn rint
|
||||
and the
|
||||
.Fn rintf
|
||||
functions return the integral value nearest to
|
||||
.Fa x
|
||||
according to the prevailing rounding mode.
|
||||
These functions raise an inexact exception when the original argument
|
||||
is not an exact integer.
|
||||
.Pp
|
||||
The
|
||||
.Fn nearbyint
|
||||
and
|
||||
.Fn nearbyintf
|
||||
functions perform the same operation, except that they do not raise
|
||||
an inexact exception.
|
||||
.Sh SEE ALSO
|
||||
.Xr abs 3 ,
|
||||
.Xr ceil 3 ,
|
||||
.Xr fabs 3 ,
|
||||
.Xr fenv 3 ,
|
||||
.Xr floor 3 ,
|
||||
.Xr ieee 3 ,
|
||||
.Xr lrint 3 ,
|
||||
.Xr lround 3 ,
|
||||
.Xr math 3 ,
|
||||
.Xr round 3
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Fn nearbyint ,
|
||||
.Fn nearbyintf ,
|
||||
.Fn rint ,
|
||||
and
|
||||
.Fn rintf
|
||||
functions conform to
|
||||
.St -isoC-99 .
|
||||
.Sh HISTORY
|
||||
A
|
||||
.Fn rint
|
||||
function appeared in
|
||||
.At v6 .
|
||||
The
|
||||
.Fn nearbyint
|
||||
and
|
||||
.Fn nearbyintf
|
||||
functions appeared in
|
||||
.Fx 5.3 .
|
@ -1,80 +0,0 @@
|
||||
.\" Copyright (c) 2003, 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, 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 REGENTS 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 REGENTS 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.
|
||||
.\"
|
||||
.\" $FreeBSD: src/lib/msun/man/round.3,v 1.6 2005/06/15 19:04:04 ru Exp $
|
||||
.\"
|
||||
.Dd April 7, 2005
|
||||
.Dt ROUND 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm round ,
|
||||
.Nm roundf ,
|
||||
.Nm roundl
|
||||
.Nd round to nearest integral value
|
||||
.Sh LIBRARY
|
||||
.Lb libm
|
||||
.Sh SYNOPSIS
|
||||
.In math.h
|
||||
.Ft double
|
||||
.Fn round "double x"
|
||||
.Ft float
|
||||
.Fn roundf "float x"
|
||||
.Ft "long double"
|
||||
.Fn roundl "long double x"
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Fn round ,
|
||||
.Fn roundf ,
|
||||
and
|
||||
.Fn roundl
|
||||
functions return the nearest integral value to
|
||||
.Fa x ;
|
||||
if
|
||||
.Fa x
|
||||
lies halfway between two integral values, then these
|
||||
functions return the integral value with the larger
|
||||
absolute value (i.e., they round away from zero).
|
||||
.Sh SEE ALSO
|
||||
.Xr ceil 3 ,
|
||||
.Xr floor 3 ,
|
||||
.Xr ieee 3 ,
|
||||
.Xr lrint 3 ,
|
||||
.Xr lround 3 ,
|
||||
.Xr math 3 ,
|
||||
.Xr rint 3 ,
|
||||
.Xr trunc 3
|
||||
.Sh STANDARDS
|
||||
These functions conform to
|
||||
.St -isoC-99 .
|
||||
.Sh HISTORY
|
||||
The
|
||||
.Fn round
|
||||
and
|
||||
.Fn roundf
|
||||
functions appeared in
|
||||
.Fx 5.3 .
|
||||
The
|
||||
.Fn roundl
|
||||
function appeared in
|
||||
.Fx 6.0 .
|
@ -1,95 +0,0 @@
|
||||
.\" Copyright (c) 1985, 1991 Regents of the University of California.
|
||||
.\" 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.
|
||||
.\" 3. All advertising materials mentioning features or use of this software
|
||||
.\" must display the following acknowledgement:
|
||||
.\" This product includes software developed by the University of
|
||||
.\" California, Berkeley and its contributors.
|
||||
.\" 4. Neither the name of the University nor the names of its contributors
|
||||
.\" may be used to endorse or promote products derived from this software
|
||||
.\" without specific prior written permission.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
|
||||
.\"
|
||||
.\" from: @(#)ieee.3 6.4 (Berkeley) 5/6/91
|
||||
.\" $FreeBSD: src/lib/msun/man/scalbn.3,v 1.3 2005/11/24 09:25:10 joel Exp $
|
||||
.\"
|
||||
.Dd March 4, 2005
|
||||
.Dt SCALBN 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm scalbln ,
|
||||
.Nm scalblnf ,
|
||||
.Nm scalblnl ,
|
||||
.Nm scalbn ,
|
||||
.Nm scalbnf ,
|
||||
.Nm scalbnl
|
||||
.Nd adjust exponent
|
||||
.Sh LIBRARY
|
||||
.Lb libm
|
||||
.Sh SYNOPSIS
|
||||
.In math.h
|
||||
.Ft double
|
||||
.Fn scalbln "double x" "long n"
|
||||
.Ft float
|
||||
.Fn scalblnf "float x" "long n"
|
||||
.Ft long double
|
||||
.Fn scalblnl "long double x" "long n"
|
||||
.Ft double
|
||||
.Fn scalbn "double x" "int n"
|
||||
.Ft float
|
||||
.Fn scalbnf "float x" "int n"
|
||||
.Ft long double
|
||||
.Fn scalbnl "long double x" "int n"
|
||||
.Sh DESCRIPTION
|
||||
These routines return
|
||||
.Fa x Ns \(**(2** Ns Fa n )
|
||||
computed by exponent manipulation.
|
||||
.Sh SEE ALSO
|
||||
.Xr ieee 3 ,
|
||||
.Xr math 3
|
||||
.Sh STANDARDS
|
||||
These routines conform to
|
||||
.St -isoC-99 ,
|
||||
and they implement the Scalb function recommended by
|
||||
.St -ieee754 .
|
||||
.Sh HISTORY
|
||||
The
|
||||
.Fn scalbn
|
||||
and
|
||||
.Fn scalbnf
|
||||
functions appeared in
|
||||
.Bx 4.3
|
||||
and
|
||||
.Fx 2.0 ,
|
||||
respectively.
|
||||
The
|
||||
.Fn scalbln
|
||||
and
|
||||
.Fn scalblnf
|
||||
functions first appeared in
|
||||
.Fx 5.3 ,
|
||||
and
|
||||
.Fn scalblnl
|
||||
and
|
||||
.Fn scalbln
|
||||
in
|
||||
.Fx 6.0 .
|
@ -1,57 +0,0 @@
|
||||
.\" Copyright (c) 2003 Mike Barcroft <mike@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.
|
||||
.\"
|
||||
.\" $FreeBSD: src/lib/msun/man/signbit.3,v 1.1 2004/07/19 08:16:10 das Exp $
|
||||
.\"
|
||||
.Dd July 18, 2004
|
||||
.Dt SIGNBIT 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm signbit
|
||||
.Nd "determine whether a floating-point number's sign is negative"
|
||||
.Sh LIBRARY
|
||||
.Lb libm
|
||||
.Sh SYNOPSIS
|
||||
.In math.h
|
||||
.Ft int
|
||||
.Fn signbit "real-floating x"
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Fn signbit
|
||||
macro takes an argument of
|
||||
.Fa x
|
||||
and returns non-zero if the value of its sign is negative, otherwise 0.
|
||||
.Sh SEE ALSO
|
||||
.Xr fpclassify 3 ,
|
||||
.Xr math 3
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Fn signbit
|
||||
macro conforms to
|
||||
.St -isoC-99 .
|
||||
.Sh HISTORY
|
||||
The
|
||||
.Fn signbit
|
||||
macro was added in
|
||||
.Fx 5.1 .
|
@ -1,82 +0,0 @@
|
||||
.\" Copyright (c) 1991 The Regents of the University of California.
|
||||
.\" All rights reserved.
|
||||
.\"
|
||||
.\" @(#)sin.3 6.7 (Berkeley) 4/19/91
|
||||
.\" 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.
|
||||
.\" 3. All advertising materials mentioning features or use of this software
|
||||
.\" must display the following acknowledgement:
|
||||
.\" This product includes software developed by the University of
|
||||
.\" California, Berkeley and its contributors.
|
||||
.\" 4. Neither the name of the University nor the names of its contributors
|
||||
.\" may be used to endorse or promote products derived from this software
|
||||
.\" without specific prior written permission.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
|
||||
.\"
|
||||
.\" from: @(#)sin.3 6.7 (Berkeley) 4/19/91
|
||||
.\" $FreeBSD: src/lib/msun/man/sin.3,v 1.9 2001/10/13 12:23:23 bde Exp $
|
||||
.\"
|
||||
.Dd April 19, 1991
|
||||
.Dt SIN 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm sin ,
|
||||
.Nm sinf
|
||||
.Nd sine functions
|
||||
.Sh LIBRARY
|
||||
.Lb libm
|
||||
.Sh SYNOPSIS
|
||||
.In math.h
|
||||
.Ft double
|
||||
.Fn sin "double x"
|
||||
.Ft float
|
||||
.Fn sinf "float x"
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Fn sin
|
||||
and the
|
||||
.Fn sinf
|
||||
functions compute the sine of
|
||||
.Fa x
|
||||
(measured in radians).
|
||||
A large magnitude argument may yield a result with little
|
||||
or no significance.
|
||||
.Sh RETURN VALUES
|
||||
The
|
||||
.Fn sin
|
||||
and the
|
||||
.Fn sinf
|
||||
functions return the sine value.
|
||||
.Sh SEE ALSO
|
||||
.Xr acos 3 ,
|
||||
.Xr asin 3 ,
|
||||
.Xr atan 3 ,
|
||||
.Xr atan2 3 ,
|
||||
.Xr cos 3 ,
|
||||
.Xr cosh 3 ,
|
||||
.Xr math 3 ,
|
||||
.Xr sinh 3 ,
|
||||
.Xr tan 3 ,
|
||||
.Xr tanh 3
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Fn sin
|
||||
function conforms to
|
||||
.St -isoC .
|
@ -1,71 +0,0 @@
|
||||
.\" Copyright (c) 1991 The Regents of the University of California.
|
||||
.\" 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.
|
||||
.\" 3. All advertising materials mentioning features or use of this software
|
||||
.\" must display the following acknowledgement:
|
||||
.\" This product includes software developed by the University of
|
||||
.\" California, Berkeley and its contributors.
|
||||
.\" 4. Neither the name of the University nor the names of its contributors
|
||||
.\" may be used to endorse or promote products derived from this software
|
||||
.\" without specific prior written permission.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
|
||||
.\"
|
||||
.\" from: @(#)sinh.3 6.6 (Berkeley) 4/19/91
|
||||
.\" $FreeBSD: src/lib/msun/man/sinh.3,v 1.12 2005/01/14 23:28:28 das Exp $
|
||||
.Dd January 14, 2005
|
||||
.Dt SINH 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm sinh ,
|
||||
.Nm sinhf
|
||||
.Nd hyperbolic sine function
|
||||
.Sh LIBRARY
|
||||
.Lb libm
|
||||
.Sh SYNOPSIS
|
||||
.In math.h
|
||||
.Ft double
|
||||
.Fn sinh "double x"
|
||||
.Ft float
|
||||
.Fn sinhf "float x"
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Fn sinh
|
||||
and the
|
||||
.Fn sinhf
|
||||
functions compute the hyperbolic sine of
|
||||
.Fa x .
|
||||
.Sh SEE ALSO
|
||||
.Xr acos 3 ,
|
||||
.Xr asin 3 ,
|
||||
.Xr atan 3 ,
|
||||
.Xr atan2 3 ,
|
||||
.Xr cos 3 ,
|
||||
.Xr cosh 3 ,
|
||||
.Xr math 3 ,
|
||||
.Xr sin 3 ,
|
||||
.Xr tan 3 ,
|
||||
.Xr tanh 3
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Fn sinh
|
||||
function conforms to
|
||||
.St -isoC .
|
100
libm/man/sqrt.3
100
libm/man/sqrt.3
@ -1,100 +0,0 @@
|
||||
.\" Copyright (c) 1985, 1991 Regents of the University of California.
|
||||
.\" 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.
|
||||
.\" 3. All advertising materials mentioning features or use of this software
|
||||
.\" must display the following acknowledgement:
|
||||
.\" This product includes software developed by the University of
|
||||
.\" California, Berkeley and its contributors.
|
||||
.\" 4. Neither the name of the University nor the names of its contributors
|
||||
.\" may be used to endorse or promote products derived from this software
|
||||
.\" without specific prior written permission.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
|
||||
.\"
|
||||
.\" from: @(#)sqrt.3 6.4 (Berkeley) 5/6/91
|
||||
.\" $FreeBSD: src/lib/msun/man/sqrt.3,v 1.12 2005/01/14 23:28:28 das Exp $
|
||||
.\"
|
||||
.Dd May 6, 1991
|
||||
.Dt SQRT 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm cbrt ,
|
||||
.Nm cbrtf ,
|
||||
.Nm sqrt ,
|
||||
.Nm sqrtf
|
||||
.Nd cube root and square root functions
|
||||
.Sh LIBRARY
|
||||
.Lb libm
|
||||
.Sh SYNOPSIS
|
||||
.In math.h
|
||||
.Ft double
|
||||
.Fn cbrt "double x"
|
||||
.Ft float
|
||||
.Fn cbrtf "float x"
|
||||
.Ft double
|
||||
.Fn sqrt "double x"
|
||||
.Ft float
|
||||
.Fn sqrtf "float x"
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Fn cbrt
|
||||
and the
|
||||
.Fn cbrtf
|
||||
functions compute
|
||||
the cube root of
|
||||
.Ar x .
|
||||
.Pp
|
||||
The
|
||||
.Fn sqrt
|
||||
and the
|
||||
.Fn sqrtf
|
||||
functions compute the
|
||||
non-negative square root of x.
|
||||
.Sh RETURN VALUES
|
||||
The
|
||||
.Fn cbrt
|
||||
and the
|
||||
.Fn cbrtf
|
||||
functions return the requested cube root.
|
||||
The
|
||||
.Fn sqrt
|
||||
and the
|
||||
.Fn sqrtf
|
||||
functions return the requested square root
|
||||
unless an error occurs.
|
||||
An attempt to take the
|
||||
.Fn sqrt
|
||||
of negative
|
||||
.Fa x
|
||||
raises an invalid exception and causes an \*(Na to be returned.
|
||||
.Sh SEE ALSO
|
||||
.Xr fenv 3 ,
|
||||
.Xr math 3
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Fn sqrt
|
||||
function conforms to
|
||||
.St -isoC .
|
||||
.Sh HISTORY
|
||||
The
|
||||
.Fn cbrt
|
||||
function appeared in
|
||||
.Bx 4.3 .
|
@ -1,81 +0,0 @@
|
||||
.\" Copyright (c) 1991 The Regents of the University of California.
|
||||
.\" 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.
|
||||
.\" 3. All advertising materials mentioning features or use of this software
|
||||
.\" must display the following acknowledgement:
|
||||
.\" This product includes software developed by the University of
|
||||
.\" California, Berkeley and its contributors.
|
||||
.\" 4. Neither the name of the University nor the names of its contributors
|
||||
.\" may be used to endorse or promote products derived from this software
|
||||
.\" without specific prior written permission.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
|
||||
.\"
|
||||
.\" from: @(#)tan.3 5.1 (Berkeley) 5/2/91
|
||||
.\" $FreeBSD: src/lib/msun/man/tan.3,v 1.9 2001/10/13 12:23:23 bde Exp $
|
||||
.\"
|
||||
.Dd May 2, 1991
|
||||
.Dt TAN 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm tan ,
|
||||
.Nm tanf
|
||||
.Nd tangent functions
|
||||
.Sh LIBRARY
|
||||
.Lb libm
|
||||
.Sh SYNOPSIS
|
||||
.In math.h
|
||||
.Ft double
|
||||
.Fn tan "double x"
|
||||
.Ft float
|
||||
.Fn tanf "float x"
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Fn tan
|
||||
and the
|
||||
.Fn tanf
|
||||
functions compute the tangent of
|
||||
.Fa x
|
||||
(measured in radians).
|
||||
A large magnitude argument may yield a result
|
||||
with little or no significance.
|
||||
For a discussion of error due to roundoff, see
|
||||
.Xr math 3 .
|
||||
.Sh RETURN VALUES
|
||||
The
|
||||
.Fn tan
|
||||
function returns the tangent value.
|
||||
.Sh SEE ALSO
|
||||
.Xr acos 3 ,
|
||||
.Xr asin 3 ,
|
||||
.Xr atan 3 ,
|
||||
.Xr atan2 3 ,
|
||||
.Xr cos 3 ,
|
||||
.Xr cosh 3 ,
|
||||
.Xr math 3 ,
|
||||
.Xr sin 3 ,
|
||||
.Xr sinh 3 ,
|
||||
.Xr tanh 3
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Fn tan
|
||||
function conforms to
|
||||
.St -isoC .
|
@ -1,80 +0,0 @@
|
||||
.\" Copyright (c) 1991 The Regents of the University of California.
|
||||
.\" 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.
|
||||
.\" 3. All advertising materials mentioning features or use of this software
|
||||
.\" must display the following acknowledgement:
|
||||
.\" This product includes software developed by the University of
|
||||
.\" California, Berkeley and its contributors.
|
||||
.\" 4. Neither the name of the University nor the names of its contributors
|
||||
.\" may be used to endorse or promote products derived from this software
|
||||
.\" without specific prior written permission.
|
||||
.\"
|
||||
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
|
||||
.\"
|
||||
.\" from: @(#)tanh.3 5.1 (Berkeley) 5/2/91
|
||||
.\" $FreeBSD: src/lib/msun/man/tanh.3,v 1.10 2001/10/13 12:23:23 bde Exp $
|
||||
.\"
|
||||
.Dd May 2, 1991
|
||||
.Dt TANH 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm tanh ,
|
||||
.Nm tanhf
|
||||
.Nd hyperbolic tangent functions
|
||||
.Sh LIBRARY
|
||||
.Lb libm
|
||||
.Sh SYNOPSIS
|
||||
.In math.h
|
||||
.Ft double
|
||||
.Fn tanh "double x"
|
||||
.Ft float
|
||||
.Fn tanhf "float x"
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Fn tanh
|
||||
and the
|
||||
.Fn tanhf
|
||||
functions compute the hyperbolic tangent of
|
||||
.Fa x .
|
||||
For a discussion of error due to roundoff, see
|
||||
.Xr math 3 .
|
||||
.Sh RETURN VALUES
|
||||
The
|
||||
.Fn tanh
|
||||
and the
|
||||
.Fn tanhf
|
||||
functions return the hyperbolic tangent value.
|
||||
.Sh SEE ALSO
|
||||
.Xr acos 3 ,
|
||||
.Xr asin 3 ,
|
||||
.Xr atan 3 ,
|
||||
.Xr atan2 3 ,
|
||||
.Xr cos 3 ,
|
||||
.Xr cosh 3 ,
|
||||
.Xr math 3 ,
|
||||
.Xr sin 3 ,
|
||||
.Xr sinh 3 ,
|
||||
.Xr tan 3
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Fn tanh
|
||||
function conforms to
|
||||
.St -isoC .
|
@ -1,80 +0,0 @@
|
||||
.\" Copyright (c) 2004, 2005 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.
|
||||
.\"
|
||||
.\" $FreeBSD: src/lib/msun/man/trunc.3,v 1.3 2005/06/15 19:04:04 ru Exp $
|
||||
.\"
|
||||
.Dd April 16, 2005
|
||||
.Dt TRUNC 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm trunc ,
|
||||
.Nm truncf ,
|
||||
.Nm truncl
|
||||
.Nd nearest integral value with magnitude less than or equal to |x|
|
||||
.Sh LIBRARY
|
||||
.Lb libm
|
||||
.Sh SYNOPSIS
|
||||
.In math.h
|
||||
.Ft double
|
||||
.Fn trunc "double x"
|
||||
.Ft float
|
||||
.Fn truncf "float x"
|
||||
.Ft "long double"
|
||||
.Fn truncl "long double x"
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Fn trunc ,
|
||||
.Fn truncf ,
|
||||
and
|
||||
.Fn truncl
|
||||
functions return the nearest integral value with magnitude less than
|
||||
or equal to
|
||||
.Pf | Fa x Ns | .
|
||||
They are equivalent to
|
||||
.Fn rint ,
|
||||
.Fn rintf ,
|
||||
and
|
||||
.Fn rintl ,
|
||||
respectively, in the
|
||||
.Dv FE_TOWARDZERO
|
||||
rounding mode.
|
||||
.Sh SEE ALSO
|
||||
.Xr ceil 3 ,
|
||||
.Xr fesetround 3 ,
|
||||
.Xr floor 3 ,
|
||||
.Xr math 3 ,
|
||||
.Xr nextafter 3 ,
|
||||
.Xr rint 3 ,
|
||||
.Xr round 3
|
||||
.Sh STANDARDS
|
||||
The
|
||||
.Fn trunc ,
|
||||
.Fn truncf ,
|
||||
and
|
||||
.Fn truncl
|
||||
functions conform to
|
||||
.St -isoC-99 .
|
||||
.Sh HISTORY
|
||||
These routines first appeared in
|
||||
.Fx 5.3 .
|
@ -23,7 +23,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $FreeBSD: src/lib/libc/mips/_fpmath.h,v 1.1 2008/04/26 12:07:59 imp Exp $
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
union IEEEl2bits {
|
||||
|
@ -1,84 +0,0 @@
|
||||
/* e_asinf.c -- float version of e_asin.c.
|
||||
* Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
|
||||
*/
|
||||
|
||||
/*
|
||||
* ====================================================
|
||||
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
||||
*
|
||||
* Developed at SunPro, a Sun Microsystems, Inc. business.
|
||||
* Permission to use, copy, modify, and distribute this
|
||||
* software is freely granted, provided that this notice
|
||||
* is preserved.
|
||||
* ====================================================
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static char rcsid[] = "$FreeBSD: src/lib/msun/src/e_asinf.c,v 1.9 2005/12/04 13:52:46 bde Exp $";
|
||||
#endif
|
||||
|
||||
#include "math.h"
|
||||
#include "math_private.h"
|
||||
|
||||
static const float
|
||||
one = 1.0000000000e+00, /* 0x3F800000 */
|
||||
huge = 1.000e+30,
|
||||
pio2_hi = 1.5707962513e+00, /* 0x3fc90fda */
|
||||
pio2_lo = 7.5497894159e-08, /* 0x33a22168 */
|
||||
pio4_hi = 7.8539812565e-01, /* 0x3f490fda */
|
||||
/* coefficient for R(x^2) */
|
||||
pS0 = 1.6666667163e-01, /* 0x3e2aaaab */
|
||||
pS1 = -3.2556581497e-01, /* 0xbea6b090 */
|
||||
pS2 = 2.0121252537e-01, /* 0x3e4e0aa8 */
|
||||
pS3 = -4.0055535734e-02, /* 0xbd241146 */
|
||||
pS4 = 7.9153501429e-04, /* 0x3a4f7f04 */
|
||||
pS5 = 3.4793309169e-05, /* 0x3811ef08 */
|
||||
qS1 = -2.4033949375e+00, /* 0xc019d139 */
|
||||
qS2 = 2.0209457874e+00, /* 0x4001572d */
|
||||
qS3 = -6.8828397989e-01, /* 0xbf303361 */
|
||||
qS4 = 7.7038154006e-02; /* 0x3d9dc62e */
|
||||
|
||||
float
|
||||
__ieee754_asinf(float x)
|
||||
{
|
||||
float t=0.0,w,p,q,c,r,s;
|
||||
int32_t hx,ix;
|
||||
GET_FLOAT_WORD(hx,x);
|
||||
ix = hx&0x7fffffff;
|
||||
if(ix==0x3f800000) {
|
||||
/* asin(1)=+-pi/2 with inexact */
|
||||
return x*pio2_hi+x*pio2_lo;
|
||||
} else if(ix> 0x3f800000) { /* |x|>= 1 */
|
||||
return (x-x)/(x-x); /* asin(|x|>1) is NaN */
|
||||
} else if (ix<0x3f000000) { /* |x|<0.5 */
|
||||
if(ix<0x32000000) { /* if |x| < 2**-27 */
|
||||
if(huge+x>one) return x;/* return x with inexact if x!=0*/
|
||||
} else
|
||||
t = x*x;
|
||||
p = t*(pS0+t*(pS1+t*(pS2+t*(pS3+t*(pS4+t*pS5)))));
|
||||
q = one+t*(qS1+t*(qS2+t*(qS3+t*qS4)));
|
||||
w = p/q;
|
||||
return x+x*w;
|
||||
}
|
||||
/* 1> |x|>= 0.5 */
|
||||
w = one-fabsf(x);
|
||||
t = w*(float)0.5;
|
||||
p = t*(pS0+t*(pS1+t*(pS2+t*(pS3+t*(pS4+t*pS5)))));
|
||||
q = one+t*(qS1+t*(qS2+t*(qS3+t*qS4)));
|
||||
s = __ieee754_sqrtf(t);
|
||||
if(ix>=0x3F79999A) { /* if |x| > 0.975 */
|
||||
w = p/q;
|
||||
t = pio2_hi-((float)2.0*(s+s*w)-pio2_lo);
|
||||
} else {
|
||||
int32_t iw;
|
||||
w = s;
|
||||
GET_FLOAT_WORD(iw,w);
|
||||
SET_FLOAT_WORD(w,iw&0xfffff000);
|
||||
c = (t-w*w)/(s+w);
|
||||
r = p/q;
|
||||
p = (float)2.0*s*r-(pio2_lo-(float)2.0*c);
|
||||
q = pio4_hi-(float)2.0*w;
|
||||
t = pio4_hi-(p-q);
|
||||
}
|
||||
if(hx>0) return t; else return -t;
|
||||
}
|
@ -1,22 +0,0 @@
|
||||
/* e_scalbf.c -- float version of e_scalb.c.
|
||||
* Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
|
||||
*/
|
||||
|
||||
/*
|
||||
* ====================================================
|
||||
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
||||
*
|
||||
* Developed at SunPro, a Sun Microsystems, Inc. business.
|
||||
* Permission to use, copy, modify, and distribute this
|
||||
* software is freely granted, provided that this notice
|
||||
* is preserved.
|
||||
* ====================================================
|
||||
*/
|
||||
#include "math.h"
|
||||
#include "math_private.h"
|
||||
|
||||
float
|
||||
__ieee754_ldexpf(float x, int fn)
|
||||
{
|
||||
return __ieee754_scalbf(x,fn);
|
||||
}
|
@ -1,87 +0,0 @@
|
||||
|
||||
/* @(#)e_log10.c 1.3 95/01/18 */
|
||||
/*
|
||||
* ====================================================
|
||||
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
||||
*
|
||||
* Developed at SunSoft, a Sun Microsystems, Inc. business.
|
||||
* Permission to use, copy, modify, and distribute this
|
||||
* software is freely granted, provided that this notice
|
||||
* is preserved.
|
||||
* ====================================================
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static char rcsid[] = "$FreeBSD: src/lib/msun/src/e_log10.c,v 1.11 2005/02/04 18:26:06 das Exp $";
|
||||
#endif
|
||||
|
||||
/* __ieee754_log10(x)
|
||||
* Return the base 10 logarithm of x
|
||||
*
|
||||
* Method :
|
||||
* Let log10_2hi = leading 40 bits of log10(2) and
|
||||
* log10_2lo = log10(2) - log10_2hi,
|
||||
* ivln10 = 1/log(10) rounded.
|
||||
* Then
|
||||
* n = ilogb(x),
|
||||
* if(n<0) n = n+1;
|
||||
* x = scalbn(x,-n);
|
||||
* log10(x) := n*log10_2hi + (n*log10_2lo + ivln10*log(x))
|
||||
*
|
||||
* Note 1:
|
||||
* To guarantee log10(10**n)=n, where 10**n is normal, the rounding
|
||||
* mode must set to Round-to-Nearest.
|
||||
* Note 2:
|
||||
* [1/log(10)] rounded to 53 bits has error .198 ulps;
|
||||
* log10 is monotonic at all binary break points.
|
||||
*
|
||||
* Special cases:
|
||||
* log10(x) is NaN with signal if x < 0;
|
||||
* log10(+INF) is +INF with no signal; log10(0) is -INF with signal;
|
||||
* log10(NaN) is that NaN with no signal;
|
||||
* log10(10**N) = N for N=0,1,...,22.
|
||||
*
|
||||
* Constants:
|
||||
* The hexadecimal values are the intended ones for the following constants.
|
||||
* The decimal values may be used, provided that the compiler will convert
|
||||
* from decimal to binary accurately enough to produce the hexadecimal values
|
||||
* shown.
|
||||
*/
|
||||
|
||||
#include "math.h"
|
||||
#include "math_private.h"
|
||||
|
||||
static const double
|
||||
two54 = 1.80143985094819840000e+16, /* 0x43500000, 0x00000000 */
|
||||
ivln10 = 4.34294481903251816668e-01, /* 0x3FDBCB7B, 0x1526E50E */
|
||||
log10_2hi = 3.01029995663611771306e-01, /* 0x3FD34413, 0x509F6000 */
|
||||
log10_2lo = 3.69423907715893078616e-13; /* 0x3D59FEF3, 0x11F12B36 */
|
||||
|
||||
static const double zero = 0.0;
|
||||
|
||||
double
|
||||
__ieee754_log10(double x)
|
||||
{
|
||||
double y,z;
|
||||
int32_t i,k,hx;
|
||||
u_int32_t lx;
|
||||
|
||||
EXTRACT_WORDS(hx,lx,x);
|
||||
|
||||
k=0;
|
||||
if (hx < 0x00100000) { /* x < 2**-1022 */
|
||||
if (((hx&0x7fffffff)|lx)==0)
|
||||
return -two54/zero; /* log(+-0)=-inf */
|
||||
if (hx<0) return (x-x)/zero; /* log(-#) = NaN */
|
||||
k -= 54; x *= two54; /* subnormal number, scale up x */
|
||||
GET_HIGH_WORD(hx,x);
|
||||
}
|
||||
if (hx >= 0x7ff00000) return x+x;
|
||||
k += (hx>>20)-1023;
|
||||
i = ((u_int32_t)k&0x80000000)>>31;
|
||||
hx = (hx&0x000fffff)|((0x3ff-i)<<20);
|
||||
y = (double)(k+i);
|
||||
SET_HIGH_WORD(x,hx);
|
||||
z = y*log10_2lo + ivln10*__ieee754_log(x);
|
||||
return z+y*log10_2hi;
|
||||
}
|
@ -1,55 +0,0 @@
|
||||
/* e_log10f.c -- float version of e_log10.c.
|
||||
* Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
|
||||
*/
|
||||
|
||||
/*
|
||||
* ====================================================
|
||||
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
||||
*
|
||||
* Developed at SunPro, a Sun Microsystems, Inc. business.
|
||||
* Permission to use, copy, modify, and distribute this
|
||||
* software is freely granted, provided that this notice
|
||||
* is preserved.
|
||||
* ====================================================
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static char rcsid[] = "$FreeBSD: src/lib/msun/src/e_log10f.c,v 1.8 2002/05/28 18:15:04 alfred Exp $";
|
||||
#endif
|
||||
|
||||
#include "math.h"
|
||||
#include "math_private.h"
|
||||
|
||||
static const float
|
||||
two25 = 3.3554432000e+07, /* 0x4c000000 */
|
||||
ivln10 = 4.3429449201e-01, /* 0x3ede5bd9 */
|
||||
log10_2hi = 3.0102920532e-01, /* 0x3e9a2080 */
|
||||
log10_2lo = 7.9034151668e-07; /* 0x355427db */
|
||||
|
||||
static const float zero = 0.0;
|
||||
|
||||
float
|
||||
__ieee754_log10f(float x)
|
||||
{
|
||||
float y,z;
|
||||
int32_t i,k,hx;
|
||||
|
||||
GET_FLOAT_WORD(hx,x);
|
||||
|
||||
k=0;
|
||||
if (hx < 0x00800000) { /* x < 2**-126 */
|
||||
if ((hx&0x7fffffff)==0)
|
||||
return -two25/zero; /* log(+-0)=-inf */
|
||||
if (hx<0) return (x-x)/zero; /* log(-#) = NaN */
|
||||
k -= 25; x *= two25; /* subnormal number, scale up x */
|
||||
GET_FLOAT_WORD(hx,x);
|
||||
}
|
||||
if (hx >= 0x7f800000) return x+x;
|
||||
k += (hx>>23)-127;
|
||||
i = ((u_int32_t)k&0x80000000)>>31;
|
||||
hx = (hx&0x007fffff)|((0x7f-i)<<23);
|
||||
y = (float)(k+i);
|
||||
SET_FLOAT_WORD(x,hx);
|
||||
z = y*log10_2lo + ivln10*__ieee754_logf(x);
|
||||
return z+y*log10_2hi;
|
||||
}
|
@ -1,98 +0,0 @@
|
||||
/* e_rem_pio2f.c -- float version of e_rem_pio2.c
|
||||
* Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
|
||||
* Debugged and optimized by Bruce D. Evans.
|
||||
*/
|
||||
|
||||
/*
|
||||
* ====================================================
|
||||
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
||||
*
|
||||
* Developed at SunPro, a Sun Microsystems, Inc. business.
|
||||
* Permission to use, copy, modify, and distribute this
|
||||
* software is freely granted, provided that this notice
|
||||
* is preserved.
|
||||
* ====================================================
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static char rcsid[] = "$FreeBSD: src/lib/msun/src/e_rem_pio2f.c,v 1.19 2005/11/23 03:03:09 bde Exp $";
|
||||
#endif
|
||||
|
||||
/* __ieee754_rem_pio2f(x,y)
|
||||
*
|
||||
* return the remainder of x rem pi/2 in y[0]+y[1]
|
||||
* use double precision internally
|
||||
* use __kernel_rem_pio2() for large x
|
||||
*/
|
||||
|
||||
#include "math.h"
|
||||
#include "math_private.h"
|
||||
|
||||
/*
|
||||
* Table of constants for 2/pi, 396 Hex digits (476 decimal) of 2/pi
|
||||
*/
|
||||
static const int32_t two_over_pi[] = {
|
||||
0xA2F983, 0x6E4E44, 0x1529FC, 0x2757D1, 0xF534DD, 0xC0DB62,
|
||||
0x95993C, 0x439041, 0xFE5163, 0xABDEBB, 0xC561B7, 0x246E3A,
|
||||
0x424DD2, 0xE00649, 0x2EEA09, 0xD1921C, 0xFE1DEB, 0x1CB129,
|
||||
0xA73EE8, 0x8235F5, 0x2EBB44, 0x84E99C, 0x7026B4, 0x5F7E41,
|
||||
0x3991D6, 0x398353, 0x39F49C, 0x845F8B, 0xBDF928, 0x3B1FF8,
|
||||
0x97FFDE, 0x05980F, 0xEF2F11, 0x8B5A0A, 0x6D1F6D, 0x367ECF,
|
||||
0x27CB09, 0xB74F46, 0x3F669E, 0x5FEA2D, 0x7527BA, 0xC7EBE5,
|
||||
0xF17B3D, 0x0739F7, 0x8A5292, 0xEA6BFB, 0x5FB11F, 0x8D5D08,
|
||||
0x560330, 0x46FC7B, 0x6BABF0, 0xCFBC20, 0x9AF436, 0x1DA9E3,
|
||||
0x91615E, 0xE61B08, 0x659985, 0x5F14A0, 0x68408D, 0xFFD880,
|
||||
0x4D7327, 0x310606, 0x1556CA, 0x73A8C9, 0x60E27B, 0xC08C6B,
|
||||
};
|
||||
|
||||
/*
|
||||
* invpio2: 53 bits of 2/pi
|
||||
* pio2_1: first 33 bit of pi/2
|
||||
* pio2_1t: pi/2 - pio2_1
|
||||
*/
|
||||
|
||||
static const double
|
||||
zero = 0.00000000000000000000e+00, /* 0x00000000, 0x00000000 */
|
||||
half = 5.00000000000000000000e-01, /* 0x3FE00000, 0x00000000 */
|
||||
two24 = 1.67772160000000000000e+07, /* 0x41700000, 0x00000000 */
|
||||
invpio2 = 6.36619772367581382433e-01, /* 0x3FE45F30, 0x6DC9C883 */
|
||||
pio2_1 = 1.57079632673412561417e+00, /* 0x3FF921FB, 0x54400000 */
|
||||
pio2_1t = 6.07710050650619224932e-11; /* 0x3DD0B461, 0x1A626331 */
|
||||
|
||||
int32_t __ieee754_rem_pio2f(float x, float *y)
|
||||
{
|
||||
double w,t,r,fn;
|
||||
double tx[1],ty[2];
|
||||
float z;
|
||||
int32_t e0,n,ix,hx;
|
||||
|
||||
GET_FLOAT_WORD(hx,x);
|
||||
ix = hx&0x7fffffff;
|
||||
/* 33+53 bit pi is good enough for medium size */
|
||||
if(ix<=0x49490f80) { /* |x| ~<= 2^19*(pi/2), medium size */
|
||||
t = fabsf(x);
|
||||
n = (int32_t) (t*invpio2+half);
|
||||
fn = (double)n;
|
||||
r = t-fn*pio2_1;
|
||||
w = fn*pio2_1t;
|
||||
y[0] = r-w;
|
||||
y[1] = (r-y[0])-w;
|
||||
if(hx<0) {y[0] = -y[0]; y[1] = -y[1]; return -n;}
|
||||
else return n;
|
||||
}
|
||||
/*
|
||||
* all other (large) arguments
|
||||
*/
|
||||
if(ix>=0x7f800000) { /* x is inf or NaN */
|
||||
y[0]=y[1]=x-x; return 0;
|
||||
}
|
||||
/* set z = scalbn(|x|,ilogb(|x|)-23) */
|
||||
e0 = (ix>>23)-150; /* e0 = ilogb(|x|)-23; */
|
||||
SET_FLOAT_WORD(z, ix - ((int32_t)(e0<<23)));
|
||||
tx[0] = z;
|
||||
n = __kernel_rem_pio2(tx,ty,e0,1,1,two_over_pi);
|
||||
y[0] = ty[0];
|
||||
y[1] = ty[0] - y[0];
|
||||
if(hx<0) {y[0] = -y[0]; y[1] = -y[1]; return -n;}
|
||||
return n;
|
||||
}
|
@ -1,304 +0,0 @@
|
||||
|
||||
/* @(#)k_rem_pio2.c 1.3 95/01/18 */
|
||||
/*
|
||||
* ====================================================
|
||||
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
||||
*
|
||||
* Developed at SunSoft, a Sun Microsystems, Inc. business.
|
||||
* Permission to use, copy, modify, and distribute this
|
||||
* software is freely granted, provided that this notice
|
||||
* is preserved.
|
||||
* ====================================================
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static char rcsid[] = "$FreeBSD: src/lib/msun/src/k_rem_pio2.c,v 1.7 2005/02/04 18:26:06 das Exp $";
|
||||
#endif
|
||||
|
||||
/*
|
||||
* __kernel_rem_pio2(x,y,e0,nx,prec,ipio2)
|
||||
* double x[],y[]; int e0,nx,prec; int ipio2[];
|
||||
*
|
||||
* __kernel_rem_pio2 return the last three digits of N with
|
||||
* y = x - N*pi/2
|
||||
* so that |y| < pi/2.
|
||||
*
|
||||
* The method is to compute the integer (mod 8) and fraction parts of
|
||||
* (2/pi)*x without doing the full multiplication. In general we
|
||||
* skip the part of the product that are known to be a huge integer (
|
||||
* more accurately, = 0 mod 8 ). Thus the number of operations are
|
||||
* independent of the exponent of the input.
|
||||
*
|
||||
* (2/pi) is represented by an array of 24-bit integers in ipio2[].
|
||||
*
|
||||
* Input parameters:
|
||||
* x[] The input value (must be positive) is broken into nx
|
||||
* pieces of 24-bit integers in double precision format.
|
||||
* x[i] will be the i-th 24 bit of x. The scaled exponent
|
||||
* of x[0] is given in input parameter e0 (i.e., x[0]*2^e0
|
||||
* match x's up to 24 bits.
|
||||
*
|
||||
* Example of breaking a double positive z into x[0]+x[1]+x[2]:
|
||||
* e0 = ilogb(z)-23
|
||||
* z = scalbn(z,-e0)
|
||||
* for i = 0,1,2
|
||||
* x[i] = floor(z)
|
||||
* z = (z-x[i])*2**24
|
||||
*
|
||||
*
|
||||
* y[] ouput result in an array of double precision numbers.
|
||||
* The dimension of y[] is:
|
||||
* 24-bit precision 1
|
||||
* 53-bit precision 2
|
||||
* 64-bit precision 2
|
||||
* 113-bit precision 3
|
||||
* The actual value is the sum of them. Thus for 113-bit
|
||||
* precison, one may have to do something like:
|
||||
*
|
||||
* long double t,w,r_head, r_tail;
|
||||
* t = (long double)y[2] + (long double)y[1];
|
||||
* w = (long double)y[0];
|
||||
* r_head = t+w;
|
||||
* r_tail = w - (r_head - t);
|
||||
*
|
||||
* e0 The exponent of x[0]
|
||||
*
|
||||
* nx dimension of x[]
|
||||
*
|
||||
* prec an integer indicating the precision:
|
||||
* 0 24 bits (single)
|
||||
* 1 53 bits (double)
|
||||
* 2 64 bits (extended)
|
||||
* 3 113 bits (quad)
|
||||
*
|
||||
* ipio2[]
|
||||
* integer array, contains the (24*i)-th to (24*i+23)-th
|
||||
* bit of 2/pi after binary point. The corresponding
|
||||
* floating value is
|
||||
*
|
||||
* ipio2[i] * 2^(-24(i+1)).
|
||||
*
|
||||
* External function:
|
||||
* double scalbn(), floor();
|
||||
*
|
||||
*
|
||||
* Here is the description of some local variables:
|
||||
*
|
||||
* jk jk+1 is the initial number of terms of ipio2[] needed
|
||||
* in the computation. The recommended value is 2,3,4,
|
||||
* 6 for single, double, extended,and quad.
|
||||
*
|
||||
* jz local integer variable indicating the number of
|
||||
* terms of ipio2[] used.
|
||||
*
|
||||
* jx nx - 1
|
||||
*
|
||||
* jv index for pointing to the suitable ipio2[] for the
|
||||
* computation. In general, we want
|
||||
* ( 2^e0*x[0] * ipio2[jv-1]*2^(-24jv) )/8
|
||||
* is an integer. Thus
|
||||
* e0-3-24*jv >= 0 or (e0-3)/24 >= jv
|
||||
* Hence jv = max(0,(e0-3)/24).
|
||||
*
|
||||
* jp jp+1 is the number of terms in PIo2[] needed, jp = jk.
|
||||
*
|
||||
* q[] double array with integral value, representing the
|
||||
* 24-bits chunk of the product of x and 2/pi.
|
||||
*
|
||||
* q0 the corresponding exponent of q[0]. Note that the
|
||||
* exponent for q[i] would be q0-24*i.
|
||||
*
|
||||
* PIo2[] double precision array, obtained by cutting pi/2
|
||||
* into 24 bits chunks.
|
||||
*
|
||||
* f[] ipio2[] in floating point
|
||||
*
|
||||
* iq[] integer array by breaking up q[] in 24-bits chunk.
|
||||
*
|
||||
* fq[] final product of x*(2/pi) in fq[0],..,fq[jk]
|
||||
*
|
||||
* ih integer. If >0 it indicates q[] is >= 0.5, hence
|
||||
* it also indicates the *sign* of the result.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* Constants:
|
||||
* The hexadecimal values are the intended ones for the following
|
||||
* constants. The decimal values may be used, provided that the
|
||||
* compiler will convert from decimal to binary accurately enough
|
||||
* to produce the hexadecimal values shown.
|
||||
*/
|
||||
|
||||
#include "math.h"
|
||||
#include "math_private.h"
|
||||
|
||||
static const int init_jk[] = {2,3,4,6}; /* initial value for jk */
|
||||
|
||||
static const double PIo2[] = {
|
||||
1.57079625129699707031e+00, /* 0x3FF921FB, 0x40000000 */
|
||||
7.54978941586159635335e-08, /* 0x3E74442D, 0x00000000 */
|
||||
5.39030252995776476554e-15, /* 0x3CF84698, 0x80000000 */
|
||||
3.28200341580791294123e-22, /* 0x3B78CC51, 0x60000000 */
|
||||
1.27065575308067607349e-29, /* 0x39F01B83, 0x80000000 */
|
||||
1.22933308981111328932e-36, /* 0x387A2520, 0x40000000 */
|
||||
2.73370053816464559624e-44, /* 0x36E38222, 0x80000000 */
|
||||
2.16741683877804819444e-51, /* 0x3569F31D, 0x00000000 */
|
||||
};
|
||||
|
||||
static const double
|
||||
zero = 0.0,
|
||||
one = 1.0,
|
||||
two24 = 1.67772160000000000000e+07, /* 0x41700000, 0x00000000 */
|
||||
twon24 = 5.96046447753906250000e-08; /* 0x3E700000, 0x00000000 */
|
||||
|
||||
int __kernel_rem_pio2(double *x, double *y, int e0, int nx, int prec, const int32_t *ipio2)
|
||||
{
|
||||
int32_t jz,jx,jv,jp,jk,carry,n,iq[20],i,j,k,m,q0,ih;
|
||||
double z,fw,f[20],fq[20],q[20];
|
||||
|
||||
/* initialize jk*/
|
||||
jk = init_jk[prec];
|
||||
jp = jk;
|
||||
|
||||
/* determine jx,jv,q0, note that 3>q0 */
|
||||
jx = nx-1;
|
||||
jv = (e0-3)/24; if(jv<0) jv=0;
|
||||
q0 = e0-24*(jv+1);
|
||||
|
||||
/* set up f[0] to f[jx+jk] where f[jx+jk] = ipio2[jv+jk] */
|
||||
j = jv-jx; m = jx+jk;
|
||||
for(i=0;i<=m;i++,j++) f[i] = (j<0)? zero : (double) ipio2[j];
|
||||
|
||||
/* compute q[0],q[1],...q[jk] */
|
||||
for (i=0;i<=jk;i++) {
|
||||
for(j=0,fw=0.0;j<=jx;j++) fw += x[j]*f[jx+i-j]; q[i] = fw;
|
||||
}
|
||||
|
||||
jz = jk;
|
||||
recompute:
|
||||
/* distill q[] into iq[] reversingly */
|
||||
for(i=0,j=jz,z=q[jz];j>0;i++,j--) {
|
||||
fw = (double)((int32_t)(twon24* z));
|
||||
iq[i] = (int32_t)(z-two24*fw);
|
||||
z = q[j-1]+fw;
|
||||
}
|
||||
|
||||
/* compute n */
|
||||
z = scalbn(z,q0); /* actual value of z */
|
||||
z -= 8.0*floor(z*0.125); /* trim off integer >= 8 */
|
||||
n = (int32_t) z;
|
||||
z -= (double)n;
|
||||
ih = 0;
|
||||
if(q0>0) { /* need iq[jz-1] to determine n */
|
||||
i = (iq[jz-1]>>(24-q0)); n += i;
|
||||
iq[jz-1] -= i<<(24-q0);
|
||||
ih = iq[jz-1]>>(23-q0);
|
||||
}
|
||||
else if(q0==0) ih = iq[jz-1]>>23;
|
||||
else if(z>=0.5) ih=2;
|
||||
|
||||
if(ih>0) { /* q > 0.5 */
|
||||
n += 1; carry = 0;
|
||||
for(i=0;i<jz ;i++) { /* compute 1-q */
|
||||
j = iq[i];
|
||||
if(carry==0) {
|
||||
if(j!=0) {
|
||||
carry = 1; iq[i] = 0x1000000- j;
|
||||
}
|
||||
} else iq[i] = 0xffffff - j;
|
||||
}
|
||||
if(q0>0) { /* rare case: chance is 1 in 12 */
|
||||
switch(q0) {
|
||||
case 1:
|
||||
iq[jz-1] &= 0x7fffff; break;
|
||||
case 2:
|
||||
iq[jz-1] &= 0x3fffff; break;
|
||||
}
|
||||
}
|
||||
if(ih==2) {
|
||||
z = one - z;
|
||||
if(carry!=0) z -= scalbn(one,q0);
|
||||
}
|
||||
}
|
||||
|
||||
/* check if recomputation is needed */
|
||||
if(z==zero) {
|
||||
j = 0;
|
||||
for (i=jz-1;i>=jk;i--) j |= iq[i];
|
||||
if(j==0) { /* need recomputation */
|
||||
for(k=1;iq[jk-k]==0;k++); /* k = no. of terms needed */
|
||||
|
||||
for(i=jz+1;i<=jz+k;i++) { /* add q[jz+1] to q[jz+k] */
|
||||
f[jx+i] = (double) ipio2[jv+i];
|
||||
for(j=0,fw=0.0;j<=jx;j++) fw += x[j]*f[jx+i-j];
|
||||
q[i] = fw;
|
||||
}
|
||||
jz += k;
|
||||
goto recompute;
|
||||
}
|
||||
}
|
||||
|
||||
/* chop off zero terms */
|
||||
if(z==0.0) {
|
||||
jz -= 1; q0 -= 24;
|
||||
while(iq[jz]==0) { jz--; q0-=24;}
|
||||
} else { /* break z into 24-bit if necessary */
|
||||
z = scalbn(z,-q0);
|
||||
if(z>=two24) {
|
||||
fw = (double)((int32_t)(twon24*z));
|
||||
iq[jz] = (int32_t)(z-two24*fw);
|
||||
jz += 1; q0 += 24;
|
||||
iq[jz] = (int32_t) fw;
|
||||
} else iq[jz] = (int32_t) z ;
|
||||
}
|
||||
|
||||
/* convert integer "bit" chunk to floating-point value */
|
||||
fw = scalbn(one,q0);
|
||||
for(i=jz;i>=0;i--) {
|
||||
q[i] = fw*(double)iq[i]; fw*=twon24;
|
||||
}
|
||||
|
||||
/* compute PIo2[0,...,jp]*q[jz,...,0] */
|
||||
for(i=jz;i>=0;i--) {
|
||||
for(fw=0.0,k=0;k<=jp&&k<=jz-i;k++) fw += PIo2[k]*q[i+k];
|
||||
fq[jz-i] = fw;
|
||||
}
|
||||
|
||||
/* compress fq[] into y[] */
|
||||
switch(prec) {
|
||||
case 0:
|
||||
fw = 0.0;
|
||||
for (i=jz;i>=0;i--) fw += fq[i];
|
||||
y[0] = (ih==0)? fw: -fw;
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
fw = 0.0;
|
||||
for (i=jz;i>=0;i--) fw += fq[i];
|
||||
y[0] = (ih==0)? fw: -fw;
|
||||
fw = fq[0]-fw;
|
||||
for (i=1;i<=jz;i++) fw += fq[i];
|
||||
y[1] = (ih==0)? fw: -fw;
|
||||
break;
|
||||
case 3: /* painful */
|
||||
for (i=jz;i>0;i--) {
|
||||
fw = fq[i-1]+fq[i];
|
||||
fq[i] += fq[i-1]-fw;
|
||||
fq[i-1] = fw;
|
||||
}
|
||||
for (i=jz;i>1;i--) {
|
||||
fw = fq[i-1]+fq[i];
|
||||
fq[i] += fq[i-1]-fw;
|
||||
fq[i-1] = fw;
|
||||
}
|
||||
for (fw=0.0,i=jz;i>=2;i--) fw += fq[i];
|
||||
if(ih==0) {
|
||||
y[0] = fq[0]; y[1] = fq[1]; y[2] = fw;
|
||||
} else {
|
||||
y[0] = -fq[0]; y[1] = -fq[1]; y[2] = -fw;
|
||||
}
|
||||
}
|
||||
return n&7;
|
||||
}
|
@ -1,197 +0,0 @@
|
||||
/* k_rem_pio2f.c -- float version of k_rem_pio2.c
|
||||
* Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
|
||||
*/
|
||||
|
||||
/*
|
||||
* ====================================================
|
||||
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
||||
*
|
||||
* Developed at SunPro, a Sun Microsystems, Inc. business.
|
||||
* Permission to use, copy, modify, and distribute this
|
||||
* software is freely granted, provided that this notice
|
||||
* is preserved.
|
||||
* ====================================================
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static char rcsid[] = "$FreeBSD: src/lib/msun/src/k_rem_pio2f.c,v 1.8 2005/10/11 07:56:05 bde Exp $";
|
||||
#endif
|
||||
|
||||
#include "math.h"
|
||||
#include "math_private.h"
|
||||
|
||||
/* In the float version, the input parameter x contains 8 bit
|
||||
integers, not 24 bit integers. 113 bit precision is not supported. */
|
||||
|
||||
static const int init_jk[] = {4,7,9}; /* initial value for jk */
|
||||
|
||||
static const float PIo2[] = {
|
||||
1.5703125000e+00, /* 0x3fc90000 */
|
||||
4.5776367188e-04, /* 0x39f00000 */
|
||||
2.5987625122e-05, /* 0x37da0000 */
|
||||
7.5437128544e-08, /* 0x33a20000 */
|
||||
6.0026650317e-11, /* 0x2e840000 */
|
||||
7.3896444519e-13, /* 0x2b500000 */
|
||||
5.3845816694e-15, /* 0x27c20000 */
|
||||
5.6378512969e-18, /* 0x22d00000 */
|
||||
8.3009228831e-20, /* 0x1fc40000 */
|
||||
3.2756352257e-22, /* 0x1bc60000 */
|
||||
6.3331015649e-25, /* 0x17440000 */
|
||||
};
|
||||
|
||||
static const float
|
||||
zero = 0.0,
|
||||
one = 1.0,
|
||||
two8 = 2.5600000000e+02, /* 0x43800000 */
|
||||
twon8 = 3.9062500000e-03; /* 0x3b800000 */
|
||||
|
||||
int __kernel_rem_pio2f(float *x, float *y, int e0, int nx, int prec, const int32_t *ipio2)
|
||||
{
|
||||
int32_t jz,jx,jv,jp,jk,carry,n,iq[20],i,j,k,m,q0,ih;
|
||||
float z,fw,f[20],fq[20],q[20];
|
||||
|
||||
/* initialize jk*/
|
||||
jk = init_jk[prec];
|
||||
jp = jk;
|
||||
|
||||
/* determine jx,jv,q0, note that 3>q0 */
|
||||
jx = nx-1;
|
||||
jv = (e0-3)/8; if(jv<0) jv=0;
|
||||
q0 = e0-8*(jv+1);
|
||||
|
||||
/* set up f[0] to f[jx+jk] where f[jx+jk] = ipio2[jv+jk] */
|
||||
j = jv-jx; m = jx+jk;
|
||||
for(i=0;i<=m;i++,j++) f[i] = (j<0)? zero : (float) ipio2[j];
|
||||
|
||||
/* compute q[0],q[1],...q[jk] */
|
||||
for (i=0;i<=jk;i++) {
|
||||
for(j=0,fw=0.0;j<=jx;j++) fw += x[j]*f[jx+i-j]; q[i] = fw;
|
||||
}
|
||||
|
||||
jz = jk;
|
||||
recompute:
|
||||
/* distill q[] into iq[] reversingly */
|
||||
for(i=0,j=jz,z=q[jz];j>0;i++,j--) {
|
||||
fw = (float)((int32_t)(twon8* z));
|
||||
iq[i] = (int32_t)(z-two8*fw);
|
||||
z = q[j-1]+fw;
|
||||
}
|
||||
|
||||
/* compute n */
|
||||
z = scalbnf(z,q0); /* actual value of z */
|
||||
z -= (float)8.0*floorf(z*(float)0.125); /* trim off integer >= 8 */
|
||||
n = (int32_t) z;
|
||||
z -= (float)n;
|
||||
ih = 0;
|
||||
if(q0>0) { /* need iq[jz-1] to determine n */
|
||||
i = (iq[jz-1]>>(8-q0)); n += i;
|
||||
iq[jz-1] -= i<<(8-q0);
|
||||
ih = iq[jz-1]>>(7-q0);
|
||||
}
|
||||
else if(q0==0) ih = iq[jz-1]>>7;
|
||||
else if(z>=(float)0.5) ih=2;
|
||||
|
||||
if(ih>0) { /* q > 0.5 */
|
||||
n += 1; carry = 0;
|
||||
for(i=0;i<jz ;i++) { /* compute 1-q */
|
||||
j = iq[i];
|
||||
if(carry==0) {
|
||||
if(j!=0) {
|
||||
carry = 1; iq[i] = 0x100- j;
|
||||
}
|
||||
} else iq[i] = 0xff - j;
|
||||
}
|
||||
if(q0>0) { /* rare case: chance is 1 in 12 */
|
||||
switch(q0) {
|
||||
case 1:
|
||||
iq[jz-1] &= 0x7f; break;
|
||||
case 2:
|
||||
iq[jz-1] &= 0x3f; break;
|
||||
}
|
||||
}
|
||||
if(ih==2) {
|
||||
z = one - z;
|
||||
if(carry!=0) z -= scalbnf(one,q0);
|
||||
}
|
||||
}
|
||||
|
||||
/* check if recomputation is needed */
|
||||
if(z==zero) {
|
||||
j = 0;
|
||||
for (i=jz-1;i>=jk;i--) j |= iq[i];
|
||||
if(j==0) { /* need recomputation */
|
||||
for(k=1;iq[jk-k]==0;k++); /* k = no. of terms needed */
|
||||
|
||||
for(i=jz+1;i<=jz+k;i++) { /* add q[jz+1] to q[jz+k] */
|
||||
f[jx+i] = (float) ipio2[jv+i];
|
||||
for(j=0,fw=0.0;j<=jx;j++) fw += x[j]*f[jx+i-j];
|
||||
q[i] = fw;
|
||||
}
|
||||
jz += k;
|
||||
goto recompute;
|
||||
}
|
||||
}
|
||||
|
||||
/* chop off zero terms */
|
||||
if(z==(float)0.0) {
|
||||
jz -= 1; q0 -= 8;
|
||||
while(iq[jz]==0) { jz--; q0-=8;}
|
||||
} else { /* break z into 8-bit if necessary */
|
||||
z = scalbnf(z,-q0);
|
||||
if(z>=two8) {
|
||||
fw = (float)((int32_t)(twon8*z));
|
||||
iq[jz] = (int32_t)(z-two8*fw);
|
||||
jz += 1; q0 += 8;
|
||||
iq[jz] = (int32_t) fw;
|
||||
} else iq[jz] = (int32_t) z ;
|
||||
}
|
||||
|
||||
/* convert integer "bit" chunk to floating-point value */
|
||||
fw = scalbnf(one,q0);
|
||||
for(i=jz;i>=0;i--) {
|
||||
q[i] = fw*(float)iq[i]; fw*=twon8;
|
||||
}
|
||||
|
||||
/* compute PIo2[0,...,jp]*q[jz,...,0] */
|
||||
for(i=jz;i>=0;i--) {
|
||||
for(fw=0.0,k=0;k<=jp&&k<=jz-i;k++) fw += PIo2[k]*q[i+k];
|
||||
fq[jz-i] = fw;
|
||||
}
|
||||
|
||||
/* compress fq[] into y[] */
|
||||
switch(prec) {
|
||||
case 0:
|
||||
fw = 0.0;
|
||||
for (i=jz;i>=0;i--) fw += fq[i];
|
||||
y[0] = (ih==0)? fw: -fw;
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
fw = 0.0;
|
||||
for (i=jz;i>=0;i--) fw += fq[i];
|
||||
fw = *(volatile float *)&fw; /* clip any extra precision */
|
||||
y[0] = (ih==0)? fw: -fw;
|
||||
fw = fq[0]-fw;
|
||||
for (i=1;i<=jz;i++) fw += fq[i];
|
||||
y[1] = (ih==0)? fw: -fw;
|
||||
break;
|
||||
case 3: /* painful */
|
||||
for (i=jz;i>0;i--) {
|
||||
fw = fq[i-1]+fq[i];
|
||||
fq[i] += fq[i-1]-fw;
|
||||
fq[i-1] = fw;
|
||||
}
|
||||
for (i=jz;i>1;i--) {
|
||||
fw = fq[i-1]+fq[i];
|
||||
fq[i] += fq[i-1]-fw;
|
||||
fq[i-1] = fw;
|
||||
}
|
||||
for (fw=0.0,i=jz;i>=2;i--) fw += fq[i];
|
||||
if(ih==0) {
|
||||
y[0] = fq[0]; y[1] = fq[1]; y[2] = fw;
|
||||
} else {
|
||||
y[0] = -fq[0]; y[1] = -fq[1]; y[2] = -fw;
|
||||
}
|
||||
}
|
||||
return n&7;
|
||||
}
|
@ -1,92 +0,0 @@
|
||||
/* @(#)s_cbrt.c 5.1 93/09/24 */
|
||||
/*
|
||||
* ====================================================
|
||||
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
||||
*
|
||||
* Developed at SunPro, a Sun Microsystems, Inc. business.
|
||||
* Permission to use, copy, modify, and distribute this
|
||||
* software is freely granted, provided that this notice
|
||||
* is preserved.
|
||||
* ====================================================
|
||||
*
|
||||
* Optimized by Bruce D. Evans.
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static char rcsid[] = "$FreeBSD: src/lib/msun/src/s_cbrt.c,v 1.10 2005/12/13 20:17:23 bde Exp $";
|
||||
#endif
|
||||
|
||||
#include "math.h"
|
||||
#include "math_private.h"
|
||||
|
||||
/* cbrt(x)
|
||||
* Return cube root of x
|
||||
*/
|
||||
static const u_int32_t
|
||||
B1 = 715094163, /* B1 = (1023-1023/3-0.03306235651)*2**20 */
|
||||
B2 = 696219795; /* B2 = (1023-1023/3-54/3-0.03306235651)*2**20 */
|
||||
|
||||
static const double
|
||||
C = 5.42857142857142815906e-01, /* 19/35 = 0x3FE15F15, 0xF15F15F1 */
|
||||
D = -7.05306122448979611050e-01, /* -864/1225 = 0xBFE691DE, 0x2532C834 */
|
||||
E = 1.41428571428571436819e+00, /* 99/70 = 0x3FF6A0EA, 0x0EA0EA0F */
|
||||
F = 1.60714285714285720630e+00, /* 45/28 = 0x3FF9B6DB, 0x6DB6DB6E */
|
||||
G = 3.57142857142857150787e-01; /* 5/14 = 0x3FD6DB6D, 0xB6DB6DB7 */
|
||||
|
||||
double
|
||||
cbrt(double x)
|
||||
{
|
||||
int32_t hx;
|
||||
double r,s,t=0.0,w;
|
||||
u_int32_t sign;
|
||||
u_int32_t high,low;
|
||||
|
||||
GET_HIGH_WORD(hx,x);
|
||||
sign=hx&0x80000000; /* sign= sign(x) */
|
||||
hx ^=sign;
|
||||
if(hx>=0x7ff00000) return(x+x); /* cbrt(NaN,INF) is itself */
|
||||
GET_LOW_WORD(low,x);
|
||||
if((hx|low)==0)
|
||||
return(x); /* cbrt(0) is itself */
|
||||
|
||||
/*
|
||||
* Rough cbrt to 5 bits:
|
||||
* cbrt(2**e*(1+m) ~= 2**(e/3)*(1+(e%3+m)/3)
|
||||
* where e is integral and >= 0, m is real and in [0, 1), and "/" and
|
||||
* "%" are integer division and modulus with rounding towards minus
|
||||
* infinity. The RHS is always >= the LHS and has a maximum relative
|
||||
* error of about 1 in 16. Adding a bias of -0.03306235651 to the
|
||||
* (e%3+m)/3 term reduces the error to about 1 in 32. With the IEEE
|
||||
* floating point representation, for finite positive normal values,
|
||||
* ordinary integer divison of the value in bits magically gives
|
||||
* almost exactly the RHS of the above provided we first subtract the
|
||||
* exponent bias (1023 for doubles) and later add it back. We do the
|
||||
* subtraction virtually to keep e >= 0 so that ordinary integer
|
||||
* division rounds towards minus infinity; this is also efficient.
|
||||
*/
|
||||
if(hx<0x00100000) { /* subnormal number */
|
||||
SET_HIGH_WORD(t,0x43500000); /* set t= 2**54 */
|
||||
t*=x;
|
||||
GET_HIGH_WORD(high,t);
|
||||
SET_HIGH_WORD(t,sign|((high&0x7fffffff)/3+B2));
|
||||
} else
|
||||
SET_HIGH_WORD(t,sign|(hx/3+B1));
|
||||
|
||||
/* new cbrt to 23 bits; may be implemented in single precision */
|
||||
r=t*t/x;
|
||||
s=C+r*t;
|
||||
t*=G+F/(s+E+D/s);
|
||||
|
||||
/* chop t to 20 bits and make it larger in magnitude than cbrt(x) */
|
||||
GET_HIGH_WORD(high,t);
|
||||
INSERT_WORDS(t,high+0x00000001,0);
|
||||
|
||||
/* one step Newton iteration to 53 bits with error less than 0.667 ulps */
|
||||
s=t*t; /* t*t is exact */
|
||||
r=x/s;
|
||||
w=t+t;
|
||||
r=(r-t)/(w+r); /* r-t is exact */
|
||||
t=t+t*r;
|
||||
|
||||
return(t);
|
||||
}
|
202
libm/src/s_fma.c
202
libm/src/s_fma.c
@ -1,202 +0,0 @@
|
||||
/*-
|
||||
* Copyright (c) 2005 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 <sys/cdefs.h>
|
||||
/* __FBSDID("$FreeBSD: src/lib/msun/src/s_fma.c,v 1.4 2005/03/18 02:27:59 das Exp $"); */
|
||||
|
||||
#include <fenv.h>
|
||||
#include <float.h>
|
||||
#include <math.h>
|
||||
|
||||
/*
|
||||
* Fused multiply-add: Compute x * y + z with a single rounding error.
|
||||
*
|
||||
* We use scaling to avoid overflow/underflow, along with the
|
||||
* canonical precision-doubling technique adapted from:
|
||||
*
|
||||
* Dekker, T. A Floating-Point Technique for Extending the
|
||||
* Available Precision. Numer. Math. 18, 224-242 (1971).
|
||||
*
|
||||
* This algorithm is sensitive to the rounding precision. FPUs such
|
||||
* as the i387 must be set in double-precision mode if variables are
|
||||
* to be stored in FP registers in order to avoid incorrect results.
|
||||
* This is the default on FreeBSD, but not on many other systems.
|
||||
*
|
||||
* Hardware instructions should be used on architectures that support it,
|
||||
* since this implementation will likely be several times slower.
|
||||
*/
|
||||
#if LDBL_MANT_DIG != 113
|
||||
double
|
||||
fma(double x, double y, double z)
|
||||
{
|
||||
static const double split = 0x1p27 + 1.0;
|
||||
double xs, ys, zs;
|
||||
double c, cc, hx, hy, p, q, tx, ty;
|
||||
double r, rr, s;
|
||||
int oround;
|
||||
int ex, ey, ez;
|
||||
int spread;
|
||||
|
||||
if (z == 0.0)
|
||||
return (x * y);
|
||||
if (x == 0.0 || y == 0.0)
|
||||
return (x * y + z);
|
||||
|
||||
/* Results of frexp() are undefined for these cases. */
|
||||
if (!isfinite(x) || !isfinite(y) || !isfinite(z))
|
||||
return (x * y + z);
|
||||
|
||||
xs = frexp(x, &ex);
|
||||
ys = frexp(y, &ey);
|
||||
zs = frexp(z, &ez);
|
||||
oround = fegetround();
|
||||
spread = ex + ey - ez;
|
||||
|
||||
/*
|
||||
* If x * y and z are many orders of magnitude apart, the scaling
|
||||
* will overflow, so we handle these cases specially. Rounding
|
||||
* modes other than FE_TONEAREST are painful.
|
||||
*/
|
||||
if (spread > DBL_MANT_DIG * 2) {
|
||||
fenv_t env;
|
||||
feraiseexcept(FE_INEXACT);
|
||||
switch(oround) {
|
||||
case FE_TONEAREST:
|
||||
return (x * y);
|
||||
case FE_TOWARDZERO:
|
||||
if (x > 0.0 ^ y < 0.0 ^ z < 0.0)
|
||||
return (x * y);
|
||||
feholdexcept(&env);
|
||||
r = x * y;
|
||||
if (!fetestexcept(FE_INEXACT))
|
||||
r = nextafter(r, 0);
|
||||
feupdateenv(&env);
|
||||
return (r);
|
||||
case FE_DOWNWARD:
|
||||
if (z > 0.0)
|
||||
return (x * y);
|
||||
feholdexcept(&env);
|
||||
r = x * y;
|
||||
if (!fetestexcept(FE_INEXACT))
|
||||
r = nextafter(r, -INFINITY);
|
||||
feupdateenv(&env);
|
||||
return (r);
|
||||
default: /* FE_UPWARD */
|
||||
if (z < 0.0)
|
||||
return (x * y);
|
||||
feholdexcept(&env);
|
||||
r = x * y;
|
||||
if (!fetestexcept(FE_INEXACT))
|
||||
r = nextafter(r, INFINITY);
|
||||
feupdateenv(&env);
|
||||
return (r);
|
||||
}
|
||||
}
|
||||
if (spread < -DBL_MANT_DIG) {
|
||||
feraiseexcept(FE_INEXACT);
|
||||
if (!isnormal(z))
|
||||
feraiseexcept(FE_UNDERFLOW);
|
||||
switch (oround) {
|
||||
case FE_TONEAREST:
|
||||
return (z);
|
||||
case FE_TOWARDZERO:
|
||||
if (x > 0.0 ^ y < 0.0 ^ z < 0.0)
|
||||
return (z);
|
||||
else
|
||||
return (nextafter(z, 0));
|
||||
case FE_DOWNWARD:
|
||||
if (x > 0.0 ^ y < 0.0)
|
||||
return (z);
|
||||
else
|
||||
return (nextafter(z, -INFINITY));
|
||||
default: /* FE_UPWARD */
|
||||
if (x > 0.0 ^ y < 0.0)
|
||||
return (nextafter(z, INFINITY));
|
||||
else
|
||||
return (z);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Use Dekker's algorithm to perform the multiplication and
|
||||
* subsequent addition in twice the machine precision.
|
||||
* Arrange so that x * y = c + cc, and x * y + z = r + rr.
|
||||
*/
|
||||
fesetround(FE_TONEAREST);
|
||||
|
||||
p = xs * split;
|
||||
hx = xs - p;
|
||||
hx += p;
|
||||
tx = xs - hx;
|
||||
|
||||
p = ys * split;
|
||||
hy = ys - p;
|
||||
hy += p;
|
||||
ty = ys - hy;
|
||||
|
||||
p = hx * hy;
|
||||
q = hx * ty + tx * hy;
|
||||
c = p + q;
|
||||
cc = p - c + q + tx * ty;
|
||||
|
||||
zs = ldexp(zs, -spread);
|
||||
r = c + zs;
|
||||
s = r - c;
|
||||
rr = (c - (r - s)) + (zs - s) + cc;
|
||||
|
||||
spread = ex + ey;
|
||||
if (spread + ilogb(r) > -1023) {
|
||||
fesetround(oround);
|
||||
r = r + rr;
|
||||
} else {
|
||||
/*
|
||||
* The result is subnormal, so we round before scaling to
|
||||
* avoid double rounding.
|
||||
*/
|
||||
p = ldexp(copysign(0x1p-1022, r), -spread);
|
||||
c = r + p;
|
||||
s = c - r;
|
||||
cc = (r - (c - s)) + (p - s) + rr;
|
||||
fesetround(oround);
|
||||
r = (c + cc) - p;
|
||||
}
|
||||
return (ldexp(r, spread));
|
||||
}
|
||||
#else /* LDBL_MANT_DIG == 113 */
|
||||
/*
|
||||
* 113 bits of precision is more than twice the precision of a double,
|
||||
* so it is enough to represent the intermediate product exactly.
|
||||
*/
|
||||
double
|
||||
fma(double x, double y, double z)
|
||||
{
|
||||
return ((long double)x * y + z);
|
||||
}
|
||||
#endif /* LDBL_MANT_DIG != 113 */
|
||||
|
||||
#if (LDBL_MANT_DIG == 53)
|
||||
__weak_reference(fma, fmal);
|
||||
#endif
|
@ -1,182 +0,0 @@
|
||||
/*-
|
||||
* Copyright (c) 2005 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 <sys/cdefs.h>
|
||||
/* __FBSDID("$FreeBSD: src/lib/msun/src/s_fmal.c,v 1.2 2005/03/18 02:27:59 das Exp $"); */
|
||||
|
||||
#include <fenv.h>
|
||||
#include <float.h>
|
||||
#include <math.h>
|
||||
|
||||
/*
|
||||
* Fused multiply-add: Compute x * y + z with a single rounding error.
|
||||
*
|
||||
* We use scaling to avoid overflow/underflow, along with the
|
||||
* canonical precision-doubling technique adapted from:
|
||||
*
|
||||
* Dekker, T. A Floating-Point Technique for Extending the
|
||||
* Available Precision. Numer. Math. 18, 224-242 (1971).
|
||||
*/
|
||||
long double
|
||||
fmal(long double x, long double y, long double z)
|
||||
{
|
||||
#if LDBL_MANT_DIG == 64
|
||||
static const long double split = 0x1p32L + 1.0;
|
||||
#elif LDBL_MANT_DIG == 113
|
||||
static const long double split = 0x1p57L + 1.0;
|
||||
#endif
|
||||
long double xs, ys, zs;
|
||||
long double c, cc, hx, hy, p, q, tx, ty;
|
||||
long double r, rr, s;
|
||||
int oround;
|
||||
int ex, ey, ez;
|
||||
int spread;
|
||||
|
||||
if (z == 0.0)
|
||||
return (x * y);
|
||||
if (x == 0.0 || y == 0.0)
|
||||
return (x * y + z);
|
||||
|
||||
/* Results of frexp() are undefined for these cases. */
|
||||
if (!isfinite(x) || !isfinite(y) || !isfinite(z))
|
||||
return (x * y + z);
|
||||
|
||||
xs = frexpl(x, &ex);
|
||||
ys = frexpl(y, &ey);
|
||||
zs = frexpl(z, &ez);
|
||||
oround = fegetround();
|
||||
spread = ex + ey - ez;
|
||||
|
||||
/*
|
||||
* If x * y and z are many orders of magnitude apart, the scaling
|
||||
* will overflow, so we handle these cases specially. Rounding
|
||||
* modes other than FE_TONEAREST are painful.
|
||||
*/
|
||||
if (spread > LDBL_MANT_DIG * 2) {
|
||||
fenv_t env;
|
||||
feraiseexcept(FE_INEXACT);
|
||||
switch(oround) {
|
||||
case FE_TONEAREST:
|
||||
return (x * y);
|
||||
case FE_TOWARDZERO:
|
||||
if (x > 0.0 ^ y < 0.0 ^ z < 0.0)
|
||||
return (x * y);
|
||||
feholdexcept(&env);
|
||||
r = x * y;
|
||||
if (!fetestexcept(FE_INEXACT))
|
||||
r = nextafterl(r, 0);
|
||||
feupdateenv(&env);
|
||||
return (r);
|
||||
case FE_DOWNWARD:
|
||||
if (z > 0.0)
|
||||
return (x * y);
|
||||
feholdexcept(&env);
|
||||
r = x * y;
|
||||
if (!fetestexcept(FE_INEXACT))
|
||||
r = nextafterl(r, -INFINITY);
|
||||
feupdateenv(&env);
|
||||
return (r);
|
||||
default: /* FE_UPWARD */
|
||||
if (z < 0.0)
|
||||
return (x * y);
|
||||
feholdexcept(&env);
|
||||
r = x * y;
|
||||
if (!fetestexcept(FE_INEXACT))
|
||||
r = nextafterl(r, INFINITY);
|
||||
feupdateenv(&env);
|
||||
return (r);
|
||||
}
|
||||
}
|
||||
if (spread < -LDBL_MANT_DIG) {
|
||||
feraiseexcept(FE_INEXACT);
|
||||
if (!isnormal(z))
|
||||
feraiseexcept(FE_UNDERFLOW);
|
||||
switch (oround) {
|
||||
case FE_TONEAREST:
|
||||
return (z);
|
||||
case FE_TOWARDZERO:
|
||||
if (x > 0.0 ^ y < 0.0 ^ z < 0.0)
|
||||
return (z);
|
||||
else
|
||||
return (nextafterl(z, 0));
|
||||
case FE_DOWNWARD:
|
||||
if (x > 0.0 ^ y < 0.0)
|
||||
return (z);
|
||||
else
|
||||
return (nextafterl(z, -INFINITY));
|
||||
default: /* FE_UPWARD */
|
||||
if (x > 0.0 ^ y < 0.0)
|
||||
return (nextafterl(z, INFINITY));
|
||||
else
|
||||
return (z);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Use Dekker's algorithm to perform the multiplication and
|
||||
* subsequent addition in twice the machine precision.
|
||||
* Arrange so that x * y = c + cc, and x * y + z = r + rr.
|
||||
*/
|
||||
fesetround(FE_TONEAREST);
|
||||
|
||||
p = xs * split;
|
||||
hx = xs - p;
|
||||
hx += p;
|
||||
tx = xs - hx;
|
||||
|
||||
p = ys * split;
|
||||
hy = ys - p;
|
||||
hy += p;
|
||||
ty = ys - hy;
|
||||
|
||||
p = hx * hy;
|
||||
q = hx * ty + tx * hy;
|
||||
c = p + q;
|
||||
cc = p - c + q + tx * ty;
|
||||
|
||||
zs = ldexpl(zs, -spread);
|
||||
r = c + zs;
|
||||
s = r - c;
|
||||
rr = (c - (r - s)) + (zs - s) + cc;
|
||||
|
||||
spread = ex + ey;
|
||||
if (spread + ilogbl(r) > -16383) {
|
||||
fesetround(oround);
|
||||
r = r + rr;
|
||||
} else {
|
||||
/*
|
||||
* The result is subnormal, so we round before scaling to
|
||||
* avoid double rounding.
|
||||
*/
|
||||
p = ldexpl(copysignl(0x1p-16382L, r), -spread);
|
||||
c = r + p;
|
||||
s = c - r;
|
||||
cc = (r - (c - s)) + (p - s) + rr;
|
||||
fesetround(oround);
|
||||
r = (c + cc) - p;
|
||||
}
|
||||
return (ldexpl(r, spread));
|
||||
}
|
@ -1,11 +0,0 @@
|
||||
#include <sys/cdefs.h>
|
||||
/* __FBSDID("$FreeBSD: src/lib/msun/src/s_llround.c,v 1.2 2005/04/08 00:52:27 das Exp $"); */
|
||||
|
||||
#define type double
|
||||
#define roundit round
|
||||
#define dtype long long
|
||||
#define DTYPE_MIN LONGLONG_MIN
|
||||
#define DTYPE_MAX LONGLONG_MAX
|
||||
#define fn llround
|
||||
|
||||
#include "s_lround.c"
|
@ -1,11 +0,0 @@
|
||||
#include <sys/cdefs.h>
|
||||
/* __FBSDID("$FreeBSD: src/lib/msun/src/s_llroundf.c,v 1.2 2005/04/08 00:52:27 das Exp $"); */
|
||||
|
||||
#define type float
|
||||
#define roundit roundf
|
||||
#define dtype long long
|
||||
#define DTYPE_MIN LONGLONG_MIN
|
||||
#define DTYPE_MAX LONGLONG_MAX
|
||||
#define fn llroundf
|
||||
|
||||
#include "s_lround.c"
|
@ -1,11 +0,0 @@
|
||||
#include <sys/cdefs.h>
|
||||
/* __FBSDID("$FreeBSD: src/lib/msun/src/s_llroundl.c,v 1.1 2005/04/08 01:24:08 das Exp $"); */
|
||||
|
||||
#define type long double
|
||||
#define roundit roundl
|
||||
#define dtype long long
|
||||
#define DTYPE_MIN LONGLONG_MIN
|
||||
#define DTYPE_MAX LONGLONG_MAX
|
||||
#define fn llroundl
|
||||
|
||||
#include "s_lround.c"
|
@ -1,28 +0,0 @@
|
||||
/*
|
||||
* cabs() wrapper for hypot().
|
||||
*
|
||||
* Written by J.T. Conklin, <jtc@wimsey.com>
|
||||
* Placed into the Public Domain, 1994.
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static const char rcsid[] =
|
||||
"$FreeBSD: src/lib/msun/src/w_cabs.c,v 1.4 2001/06/13 15:16:30 ru Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
#include <complex.h>
|
||||
#include <math.h>
|
||||
|
||||
double
|
||||
cabs(z)
|
||||
double complex z;
|
||||
{
|
||||
return hypot(creal(z), cimag(z));
|
||||
}
|
||||
|
||||
double
|
||||
z_abs(z)
|
||||
double complex *z;
|
||||
{
|
||||
return hypot(creal(*z), cimag(*z));
|
||||
}
|
@ -31,11 +31,9 @@
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static char sccsid[] = "@(#)exp.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif /* not lint */
|
||||
/* @(#)exp.c 8.1 (Berkeley) 6/4/93 */
|
||||
#include <sys/cdefs.h>
|
||||
/* __FBSDID("$FreeBSD: src/lib/msun/bsdsrc/b_exp.c,v 1.7 2004/12/16 20:40:37 das Exp $"); */
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
|
||||
/* EXP(X)
|
@ -31,11 +31,9 @@
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static char sccsid[] = "@(#)log.c 8.2 (Berkeley) 11/30/93";
|
||||
#endif /* not lint */
|
||||
/* @(#)log.c 8.2 (Berkeley) 11/30/93 */
|
||||
#include <sys/cdefs.h>
|
||||
/* __FBSDID("$FreeBSD: src/lib/msun/bsdsrc/b_log.c,v 1.8 2005/09/19 11:28:19 bde Exp $"); */
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include <math.h>
|
||||
#include <errno.h>
|
@ -31,11 +31,9 @@
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static char sccsid[] = "@(#)gamma.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif /* not lint */
|
||||
/* @(#)gamma.c 8.1 (Berkeley) 6/4/93 */
|
||||
#include <sys/cdefs.h>
|
||||
/* __FBSDID("$FreeBSD: src/lib/msun/bsdsrc/b_tgamma.c,v 1.7 2005/09/19 11:28:19 bde Exp $"); */
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
/*
|
||||
* This code by P. McIlroy, Oct 1992;
|
||||
@ -44,14 +42,12 @@ static char sccsid[] = "@(#)gamma.c 8.1 (Berkeley) 6/4/93";
|
||||
* acknowledged.
|
||||
*/
|
||||
|
||||
//#include <math.h>
|
||||
#include "../include/math.h"
|
||||
#include <math.h>
|
||||
#include "mathimpl.h"
|
||||
#include <errno.h>
|
||||
|
||||
/* METHOD:
|
||||
* x < 0: Use reflection formula, G(x) = pi/(sin(pi*x)*x*G(x))
|
||||
* At negative integers, return +Inf, and set errno.
|
||||
* At negative integers, return NaN and raise invalid.
|
||||
*
|
||||
* x < 6.5:
|
||||
* Use argument reduction G(x+1) = xG(x) to reach the
|
||||
@ -68,11 +64,15 @@ static char sccsid[] = "@(#)gamma.c 8.1 (Berkeley) 6/4/93";
|
||||
* avoid premature round-off.
|
||||
*
|
||||
* Special values:
|
||||
* non-positive integer: Set overflow trap; return +Inf;
|
||||
* x > 171.63: Set overflow trap; return +Inf;
|
||||
* NaN: Set invalid trap; return NaN
|
||||
* -Inf: return NaN and raise invalid;
|
||||
* negative integer: return NaN and raise invalid;
|
||||
* other x ~< 177.79: return +-0 and raise underflow;
|
||||
* +-0: return +-Inf and raise divide-by-zero;
|
||||
* finite x ~> 171.63: return +Inf and raise overflow;
|
||||
* +Inf: return +Inf;
|
||||
* NaN: return NaN.
|
||||
*
|
||||
* Accuracy: Gamma(x) is accurate to within
|
||||
* Accuracy: tgamma(x) is accurate to within
|
||||
* x > 0: error provably < 0.9ulp.
|
||||
* Maximum observed in 1,000,000 trials was .87ulp.
|
||||
* x < 0:
|
||||
@ -133,7 +133,7 @@ tgamma(x)
|
||||
|
||||
if (x >= 6) {
|
||||
if(x > 171.63)
|
||||
return(one/zero);
|
||||
return (x / zero);
|
||||
u = large_gam(x);
|
||||
return(__exp__D(u.a, u.b));
|
||||
} else if (x >= 1.0 + LEFT + x0)
|
||||
@ -141,12 +141,11 @@ tgamma(x)
|
||||
else if (x > 1.e-17)
|
||||
return (smaller_gam(x));
|
||||
else if (x > -1.e-17) {
|
||||
if (x == 0.0)
|
||||
return (one/x);
|
||||
one+1e-20; /* Raise inexact flag. */
|
||||
if (x != 0.0)
|
||||
u.a = one - tiny; /* raise inexact */
|
||||
return (one/x);
|
||||
} else if (!finite(x))
|
||||
return (x*x); /* x = NaN, -Inf */
|
||||
return (x - x); /* x is NaN or -Inf */
|
||||
else
|
||||
return (neg_gam(x));
|
||||
}
|
||||
@ -280,11 +279,13 @@ neg_gam(x)
|
||||
struct Double lg, lsine;
|
||||
double y, z;
|
||||
|
||||
y = floor(x + .5);
|
||||
y = ceil(x);
|
||||
if (y == x) /* Negative integer. */
|
||||
return (one/zero);
|
||||
z = fabs(x - y);
|
||||
y = .5*ceil(x);
|
||||
return ((x - x) / zero);
|
||||
z = y - x;
|
||||
if (z > 0.5)
|
||||
z = one - z;
|
||||
y = 0.5 * y;
|
||||
if (y == ceil(y))
|
||||
sgn = -1;
|
||||
if (z < .25)
|
@ -31,7 +31,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)mathimpl.h 8.1 (Berkeley) 6/4/93
|
||||
* $FreeBSD: src/lib/msun/bsdsrc/mathimpl.h,v 1.7 2005/11/18 05:03:12 bde Exp $
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MATHIMPL_H_
|
@ -11,9 +11,8 @@
|
||||
* ====================================================
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static char rcsid[] = "$FreeBSD: src/lib/msun/src/e_acos.c,v 1.10 2005/02/04 18:26:05 das Exp $";
|
||||
#endif
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
/* __ieee754_acos(x)
|
||||
* Method :
|
||||
@ -39,14 +38,18 @@ static char rcsid[] = "$FreeBSD: src/lib/msun/src/e_acos.c,v 1.10 2005/02/04 18:
|
||||
* Function needed: sqrt
|
||||
*/
|
||||
|
||||
#include <float.h>
|
||||
|
||||
#include "math.h"
|
||||
#include "math_private.h"
|
||||
|
||||
static const double
|
||||
one= 1.00000000000000000000e+00, /* 0x3FF00000, 0x00000000 */
|
||||
pi = 3.14159265358979311600e+00, /* 0x400921FB, 0x54442D18 */
|
||||
pio2_hi = 1.57079632679489655800e+00, /* 0x3FF921FB, 0x54442D18 */
|
||||
pio2_lo = 6.12323399573676603587e-17, /* 0x3C91A626, 0x33145C07 */
|
||||
pio2_hi = 1.57079632679489655800e+00; /* 0x3FF921FB, 0x54442D18 */
|
||||
static volatile double
|
||||
pio2_lo = 6.12323399573676603587e-17; /* 0x3C91A626, 0x33145C07 */
|
||||
static const double
|
||||
pS0 = 1.66666666666666657415e-01, /* 0x3FC55555, 0x55555555 */
|
||||
pS1 = -3.25565818622400915405e-01, /* 0xBFD4D612, 0x03EB6F7D */
|
||||
pS2 = 2.01212532134862925881e-01, /* 0x3FC9C155, 0x0E884455 */
|
||||
@ -102,3 +105,7 @@ __ieee754_acos(double x)
|
||||
return 2.0*(df+w);
|
||||
}
|
||||
}
|
||||
|
||||
#if LDBL_MANT_DIG == 53
|
||||
__weak_reference(acos, acosl);
|
||||
#endif
|
@ -13,9 +13,8 @@
|
||||
* ====================================================
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static char rcsid[] = "$FreeBSD: src/lib/msun/src/e_acosf.c,v 1.7 2002/05/28 17:03:12 alfred Exp $";
|
||||
#endif
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include "math.h"
|
||||
#include "math_private.h"
|
||||
@ -23,18 +22,14 @@ static char rcsid[] = "$FreeBSD: src/lib/msun/src/e_acosf.c,v 1.7 2002/05/28 17:
|
||||
static const float
|
||||
one = 1.0000000000e+00, /* 0x3F800000 */
|
||||
pi = 3.1415925026e+00, /* 0x40490fda */
|
||||
pio2_hi = 1.5707962513e+00, /* 0x3fc90fda */
|
||||
pio2_lo = 7.5497894159e-08, /* 0x33a22168 */
|
||||
pS0 = 1.6666667163e-01, /* 0x3e2aaaab */
|
||||
pS1 = -3.2556581497e-01, /* 0xbea6b090 */
|
||||
pS2 = 2.0121252537e-01, /* 0x3e4e0aa8 */
|
||||
pS3 = -4.0055535734e-02, /* 0xbd241146 */
|
||||
pS4 = 7.9153501429e-04, /* 0x3a4f7f04 */
|
||||
pS5 = 3.4793309169e-05, /* 0x3811ef08 */
|
||||
qS1 = -2.4033949375e+00, /* 0xc019d139 */
|
||||
qS2 = 2.0209457874e+00, /* 0x4001572d */
|
||||
qS3 = -6.8828397989e-01, /* 0xbf303361 */
|
||||
qS4 = 7.7038154006e-02; /* 0x3d9dc62e */
|
||||
pio2_hi = 1.5707962513e+00; /* 0x3fc90fda */
|
||||
static volatile float
|
||||
pio2_lo = 7.5497894159e-08; /* 0x33a22168 */
|
||||
static const float
|
||||
pS0 = 1.6666586697e-01,
|
||||
pS1 = -4.2743422091e-02,
|
||||
pS2 = -8.6563630030e-03,
|
||||
qS1 = -7.0662963390e-01;
|
||||
|
||||
float
|
||||
__ieee754_acosf(float x)
|
||||
@ -43,37 +38,38 @@ __ieee754_acosf(float x)
|
||||
int32_t hx,ix;
|
||||
GET_FLOAT_WORD(hx,x);
|
||||
ix = hx&0x7fffffff;
|
||||
if(ix>=0x3f800000) { /* |x| >= 1 */
|
||||
if(ix==0x3f800000) { /* |x| == 1 */
|
||||
if(hx>0) return 0.0; /* acos(1) = 0 */
|
||||
else return pi+(float)2.0*pio2_lo; /* acos(-1)= pi */
|
||||
} else if(ix>0x3f800000) { /* |x| >= 1 */
|
||||
}
|
||||
return (x-x)/(x-x); /* acos(|x|>1) is NaN */
|
||||
}
|
||||
if(ix<0x3f000000) { /* |x| < 0.5 */
|
||||
if(ix<=0x23000000) return pio2_hi+pio2_lo;/*if|x|<2**-57*/
|
||||
if(ix<=0x32800000) return pio2_hi+pio2_lo;/*if|x|<2**-26*/
|
||||
z = x*x;
|
||||
p = z*(pS0+z*(pS1+z*(pS2+z*(pS3+z*(pS4+z*pS5)))));
|
||||
q = one+z*(qS1+z*(qS2+z*(qS3+z*qS4)));
|
||||
p = z*(pS0+z*(pS1+z*pS2));
|
||||
q = one+z*qS1;
|
||||
r = p/q;
|
||||
return pio2_hi - (x - (pio2_lo-x*r));
|
||||
} else if (hx<0) { /* x < -0.5 */
|
||||
z = (one+x)*(float)0.5;
|
||||
p = z*(pS0+z*(pS1+z*(pS2+z*(pS3+z*(pS4+z*pS5)))));
|
||||
q = one+z*(qS1+z*(qS2+z*(qS3+z*qS4)));
|
||||
s = __ieee754_sqrtf(z);
|
||||
p = z*(pS0+z*(pS1+z*pS2));
|
||||
q = one+z*qS1;
|
||||
s = sqrtf(z);
|
||||
r = p/q;
|
||||
w = r*s-pio2_lo;
|
||||
return pi - (float)2.0*(s+w);
|
||||
} else { /* x > 0.5 */
|
||||
int32_t idf;
|
||||
z = (one-x)*(float)0.5;
|
||||
s = __ieee754_sqrtf(z);
|
||||
s = sqrtf(z);
|
||||
df = s;
|
||||
GET_FLOAT_WORD(idf,df);
|
||||
SET_FLOAT_WORD(df,idf&0xfffff000);
|
||||
c = (z-df*df)/(s+df);
|
||||
p = z*(pS0+z*(pS1+z*(pS2+z*(pS3+z*(pS4+z*pS5)))));
|
||||
q = one+z*(qS1+z*(qS2+z*(qS3+z*qS4)));
|
||||
p = z*(pS0+z*(pS1+z*pS2));
|
||||
q = one+z*qS1;
|
||||
r = p/q;
|
||||
w = r*s+c;
|
||||
return (float)2.0*(df+w);
|
@ -12,9 +12,8 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static char rcsid[] = "$FreeBSD: src/lib/msun/src/e_acosh.c,v 1.8 2005/02/04 18:26:05 das Exp $";
|
||||
#endif
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
/* __ieee754_acosh(x)
|
||||
* Method :
|
@ -13,9 +13,8 @@
|
||||
* ====================================================
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static char rcsid[] = "$FreeBSD: src/lib/msun/src/e_acoshf.c,v 1.7 2002/05/28 17:03:12 alfred Exp $";
|
||||
#endif
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include "math.h"
|
||||
#include "math_private.h"
|
87
libm/upstream-freebsd/lib/msun/src/e_acosl.c
Normal file
87
libm/upstream-freebsd/lib/msun/src/e_acosl.c
Normal file
@ -0,0 +1,87 @@
|
||||
|
||||
/* @(#)e_acos.c 1.3 95/01/18 */
|
||||
/* FreeBSD: head/lib/msun/src/e_acos.c 176451 2008-02-22 02:30:36Z das */
|
||||
/*
|
||||
* ====================================================
|
||||
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
||||
*
|
||||
* Developed at SunSoft, a Sun Microsystems, Inc. business.
|
||||
* Permission to use, copy, modify, and distribute this
|
||||
* software is freely granted, provided that this notice
|
||||
* is preserved.
|
||||
* ====================================================
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
/*
|
||||
* See comments in e_acos.c.
|
||||
* Converted to long double by David Schultz <das@FreeBSD.ORG>.
|
||||
*/
|
||||
|
||||
#include <float.h>
|
||||
|
||||
#include "invtrig.h"
|
||||
#include "math.h"
|
||||
#include "math_private.h"
|
||||
|
||||
static const long double
|
||||
one= 1.00000000000000000000e+00;
|
||||
|
||||
#ifdef __i386__
|
||||
/* XXX Work around the fact that gcc truncates long double constants on i386 */
|
||||
static volatile double
|
||||
pi1 = 3.14159265358979311600e+00, /* 0x1.921fb54442d18p+1 */
|
||||
pi2 = 1.22514845490862001043e-16; /* 0x1.1a80000000000p-53 */
|
||||
#define pi ((long double)pi1 + pi2)
|
||||
#else
|
||||
static const long double
|
||||
pi = 3.14159265358979323846264338327950280e+00L;
|
||||
#endif
|
||||
|
||||
long double
|
||||
acosl(long double x)
|
||||
{
|
||||
union IEEEl2bits u;
|
||||
long double z,p,q,r,w,s,c,df;
|
||||
int16_t expsign, expt;
|
||||
u.e = x;
|
||||
expsign = u.xbits.expsign;
|
||||
expt = expsign & 0x7fff;
|
||||
if(expt >= BIAS) { /* |x| >= 1 */
|
||||
if(expt==BIAS && ((u.bits.manh&~LDBL_NBIT)|u.bits.manl)==0) {
|
||||
if (expsign>0) return 0.0; /* acos(1) = 0 */
|
||||
else return pi+2.0*pio2_lo; /* acos(-1)= pi */
|
||||
}
|
||||
return (x-x)/(x-x); /* acos(|x|>1) is NaN */
|
||||
}
|
||||
if(expt<BIAS-1) { /* |x| < 0.5 */
|
||||
if(expt<ACOS_CONST) return pio2_hi+pio2_lo;/*x tiny: acosl=pi/2*/
|
||||
z = x*x;
|
||||
p = P(z);
|
||||
q = Q(z);
|
||||
r = p/q;
|
||||
return pio2_hi - (x - (pio2_lo-x*r));
|
||||
} else if (expsign<0) { /* x < -0.5 */
|
||||
z = (one+x)*0.5;
|
||||
p = P(z);
|
||||
q = Q(z);
|
||||
s = sqrtl(z);
|
||||
r = p/q;
|
||||
w = r*s-pio2_lo;
|
||||
return pi - 2.0*(s+w);
|
||||
} else { /* x > 0.5 */
|
||||
z = (one-x)*0.5;
|
||||
s = sqrtl(z);
|
||||
u.e = s;
|
||||
u.bits.manl = 0;
|
||||
df = u.e;
|
||||
c = (z-df*df)/(s+df);
|
||||
p = P(z);
|
||||
q = Q(z);
|
||||
r = p/q;
|
||||
w = r*s+c;
|
||||
return 2.0*(df+w);
|
||||
}
|
||||
}
|
@ -11,9 +11,8 @@
|
||||
* ====================================================
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static char rcsid[] = "$FreeBSD: src/lib/msun/src/e_asin.c,v 1.11 2005/02/04 18:26:05 das Exp $";
|
||||
#endif
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
/* __ieee754_asin(x)
|
||||
* Method :
|
||||
@ -45,6 +44,7 @@ static char rcsid[] = "$FreeBSD: src/lib/msun/src/e_asin.c,v 1.11 2005/02/04 18:
|
||||
*
|
||||
*/
|
||||
|
||||
#include <float.h>
|
||||
|
||||
#include "math.h"
|
||||
#include "math_private.h"
|
||||
@ -82,9 +82,9 @@ __ieee754_asin(double x)
|
||||
return x*pio2_hi+x*pio2_lo;
|
||||
return (x-x)/(x-x); /* asin(|x|>1) is NaN */
|
||||
} else if (ix<0x3fe00000) { /* |x|<0.5 */
|
||||
if(ix<0x3e400000) { /* if |x| < 2**-27 */
|
||||
if(ix<0x3e500000) { /* if |x| < 2**-26 */
|
||||
if(huge+x>one) return x;/* return x with inexact if x!=0*/
|
||||
} else
|
||||
}
|
||||
t = x*x;
|
||||
p = t*(pS0+t*(pS1+t*(pS2+t*(pS3+t*(pS4+t*pS5)))));
|
||||
q = one+t*(qS1+t*(qS2+t*(qS3+t*qS4)));
|
||||
@ -111,3 +111,7 @@ __ieee754_asin(double x)
|
||||
}
|
||||
if(hx>0) return t; else return -t;
|
||||
}
|
||||
|
||||
#if LDBL_MANT_DIG == 53
|
||||
__weak_reference(asin, asinl);
|
||||
#endif
|
65
libm/upstream-freebsd/lib/msun/src/e_asinf.c
Normal file
65
libm/upstream-freebsd/lib/msun/src/e_asinf.c
Normal file
@ -0,0 +1,65 @@
|
||||
/* e_asinf.c -- float version of e_asin.c.
|
||||
* Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
|
||||
*/
|
||||
|
||||
/*
|
||||
* ====================================================
|
||||
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
||||
*
|
||||
* Developed at SunPro, a Sun Microsystems, Inc. business.
|
||||
* Permission to use, copy, modify, and distribute this
|
||||
* software is freely granted, provided that this notice
|
||||
* is preserved.
|
||||
* ====================================================
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include "math.h"
|
||||
#include "math_private.h"
|
||||
|
||||
static const float
|
||||
one = 1.0000000000e+00, /* 0x3F800000 */
|
||||
huge = 1.000e+30,
|
||||
/* coefficient for R(x^2) */
|
||||
pS0 = 1.6666586697e-01,
|
||||
pS1 = -4.2743422091e-02,
|
||||
pS2 = -8.6563630030e-03,
|
||||
qS1 = -7.0662963390e-01;
|
||||
|
||||
static const double
|
||||
pio2 = 1.570796326794896558e+00;
|
||||
|
||||
float
|
||||
__ieee754_asinf(float x)
|
||||
{
|
||||
double s;
|
||||
float t,w,p,q;
|
||||
int32_t hx,ix;
|
||||
GET_FLOAT_WORD(hx,x);
|
||||
ix = hx&0x7fffffff;
|
||||
if(ix>=0x3f800000) { /* |x| >= 1 */
|
||||
if(ix==0x3f800000) /* |x| == 1 */
|
||||
return x*pio2; /* asin(+-1) = +-pi/2 with inexact */
|
||||
return (x-x)/(x-x); /* asin(|x|>1) is NaN */
|
||||
} else if (ix<0x3f000000) { /* |x|<0.5 */
|
||||
if(ix<0x39800000) { /* |x| < 2**-12 */
|
||||
if(huge+x>one) return x;/* return x with inexact if x!=0*/
|
||||
}
|
||||
t = x*x;
|
||||
p = t*(pS0+t*(pS1+t*pS2));
|
||||
q = one+t*qS1;
|
||||
w = p/q;
|
||||
return x+x*w;
|
||||
}
|
||||
/* 1> |x|>= 0.5 */
|
||||
w = one-fabsf(x);
|
||||
t = w*(float)0.5;
|
||||
p = t*(pS0+t*(pS1+t*pS2));
|
||||
q = one+t*qS1;
|
||||
s = sqrt(t);
|
||||
w = p/q;
|
||||
t = pio2-2.0*(s+s*w);
|
||||
if(hx>0) return t; else return -t;
|
||||
}
|
77
libm/upstream-freebsd/lib/msun/src/e_asinl.c
Normal file
77
libm/upstream-freebsd/lib/msun/src/e_asinl.c
Normal file
@ -0,0 +1,77 @@
|
||||
|
||||
/* @(#)e_asin.c 1.3 95/01/18 */
|
||||
/* FreeBSD: head/lib/msun/src/e_asin.c 176451 2008-02-22 02:30:36Z das */
|
||||
/*
|
||||
* ====================================================
|
||||
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
||||
*
|
||||
* Developed at SunSoft, a Sun Microsystems, Inc. business.
|
||||
* Permission to use, copy, modify, and distribute this
|
||||
* software is freely granted, provided that this notice
|
||||
* is preserved.
|
||||
* ====================================================
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
/*
|
||||
* See comments in e_asin.c.
|
||||
* Converted to long double by David Schultz <das@FreeBSD.ORG>.
|
||||
*/
|
||||
|
||||
#include <float.h>
|
||||
|
||||
#include "invtrig.h"
|
||||
#include "math.h"
|
||||
#include "math_private.h"
|
||||
|
||||
static const long double
|
||||
one = 1.00000000000000000000e+00,
|
||||
huge = 1.000e+300;
|
||||
|
||||
long double
|
||||
asinl(long double x)
|
||||
{
|
||||
union IEEEl2bits u;
|
||||
long double t=0.0,w,p,q,c,r,s;
|
||||
int16_t expsign, expt;
|
||||
u.e = x;
|
||||
expsign = u.xbits.expsign;
|
||||
expt = expsign & 0x7fff;
|
||||
if(expt >= BIAS) { /* |x|>= 1 */
|
||||
if(expt==BIAS && ((u.bits.manh&~LDBL_NBIT)|u.bits.manl)==0)
|
||||
/* asin(1)=+-pi/2 with inexact */
|
||||
return x*pio2_hi+x*pio2_lo;
|
||||
return (x-x)/(x-x); /* asin(|x|>1) is NaN */
|
||||
} else if (expt<BIAS-1) { /* |x|<0.5 */
|
||||
if(expt<ASIN_LINEAR) { /* if |x| is small, asinl(x)=x */
|
||||
if(huge+x>one) return x;/* return x with inexact if x!=0*/
|
||||
}
|
||||
t = x*x;
|
||||
p = P(t);
|
||||
q = Q(t);
|
||||
w = p/q;
|
||||
return x+x*w;
|
||||
}
|
||||
/* 1> |x|>= 0.5 */
|
||||
w = one-fabsl(x);
|
||||
t = w*0.5;
|
||||
p = P(t);
|
||||
q = Q(t);
|
||||
s = sqrtl(t);
|
||||
if(u.bits.manh>=THRESH) { /* if |x| is close to 1 */
|
||||
w = p/q;
|
||||
t = pio2_hi-(2.0*(s+s*w)-pio2_lo);
|
||||
} else {
|
||||
u.e = s;
|
||||
u.bits.manl = 0;
|
||||
w = u.e;
|
||||
c = (t-w*w)/(s+w);
|
||||
r = p/q;
|
||||
p = 2.0*s*r-(pio2_lo-2.0*c);
|
||||
q = pio4_hi-2.0*w;
|
||||
t = pio4_hi-(p-q);
|
||||
}
|
||||
if(expsign>0) return t; else return -t;
|
||||
}
|
@ -12,9 +12,8 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static char rcsid[] = "$FreeBSD: src/lib/msun/src/e_atan2.c,v 1.10 2005/02/04 18:26:05 das Exp $";
|
||||
#endif
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
/* __ieee754_atan2(y,x)
|
||||
* Method :
|
||||
@ -43,15 +42,19 @@ static char rcsid[] = "$FreeBSD: src/lib/msun/src/e_atan2.c,v 1.10 2005/02/04 18
|
||||
* to produce the hexadecimal values shown.
|
||||
*/
|
||||
|
||||
#include <float.h>
|
||||
|
||||
#include "math.h"
|
||||
#include "math_private.h"
|
||||
|
||||
static volatile double
|
||||
tiny = 1.0e-300;
|
||||
static const double
|
||||
tiny = 1.0e-300,
|
||||
zero = 0.0,
|
||||
pi_o_4 = 7.8539816339744827900E-01, /* 0x3FE921FB, 0x54442D18 */
|
||||
pi_o_2 = 1.5707963267948965580E+00, /* 0x3FF921FB, 0x54442D18 */
|
||||
pi = 3.1415926535897931160E+00, /* 0x400921FB, 0x54442D18 */
|
||||
pi = 3.1415926535897931160E+00; /* 0x400921FB, 0x54442D18 */
|
||||
static volatile double
|
||||
pi_lo = 1.2246467991473531772E-16; /* 0x3CA1A626, 0x33145C07 */
|
||||
|
||||
double
|
||||
@ -68,7 +71,7 @@ __ieee754_atan2(double y, double x)
|
||||
if(((ix|((lx|-lx)>>31))>0x7ff00000)||
|
||||
((iy|((ly|-ly)>>31))>0x7ff00000)) /* x or y is NaN */
|
||||
return x+y;
|
||||
if(((hx-0x3ff00000) | lx)==0) return atan(y); /* x=1.0 */
|
||||
if((hx-0x3ff00000|lx)==0) return atan(y); /* x=1.0 */
|
||||
m = ((hy>>31)&1)|((hx>>30)&2); /* 2*sign(x)+sign(y) */
|
||||
|
||||
/* when y = 0 */
|
||||
@ -106,19 +109,21 @@ __ieee754_atan2(double y, double x)
|
||||
|
||||
/* compute y/x */
|
||||
k = (iy-ix)>>20;
|
||||
if(k > 60) z=pi_o_2+0.5*pi_lo; /* |y/x| > 2**60 */
|
||||
else if(hx<0&&k<-60) z=0.0; /* |y|/x < -2**60 */
|
||||
if(k > 60) { /* |y/x| > 2**60 */
|
||||
z=pi_o_2+0.5*pi_lo;
|
||||
m&=1;
|
||||
}
|
||||
else if(hx<0&&k<-60) z=0.0; /* 0 > |y|/x > -2**-60 */
|
||||
else z=atan(fabs(y/x)); /* safe to do y/x */
|
||||
switch (m) {
|
||||
case 0: return z ; /* atan(+,+) */
|
||||
case 1: {
|
||||
u_int32_t zh;
|
||||
GET_HIGH_WORD(zh,z);
|
||||
SET_HIGH_WORD(z,zh ^ 0x80000000);
|
||||
}
|
||||
return z ; /* atan(-,+) */
|
||||
case 1: return -z ; /* atan(-,+) */
|
||||
case 2: return pi-(z-pi_lo);/* atan(+,-) */
|
||||
default: /* case 3 */
|
||||
return (z-pi_lo)-pi;/* atan(-,-) */
|
||||
}
|
||||
}
|
||||
|
||||
#if LDBL_MANT_DIG == 53
|
||||
__weak_reference(atan2, atan2l);
|
||||
#endif
|
@ -13,19 +13,20 @@
|
||||
* ====================================================
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static char rcsid[] = "$FreeBSD: src/lib/msun/src/e_atan2f.c,v 1.7 2004/06/02 17:09:05 bde Exp $";
|
||||
#endif
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include "math.h"
|
||||
#include "math_private.h"
|
||||
|
||||
static volatile float
|
||||
tiny = 1.0e-30;
|
||||
static const float
|
||||
tiny = 1.0e-30,
|
||||
zero = 0.0,
|
||||
pi_o_4 = 7.8539818525e-01, /* 0x3f490fdb */
|
||||
pi_o_2 = 1.5707963705e+00, /* 0x3fc90fdb */
|
||||
pi = 3.1415927410e+00, /* 0x40490fdb */
|
||||
pi = 3.1415927410e+00; /* 0x40490fdb */
|
||||
static volatile float
|
||||
pi_lo = -8.7422776573e-08; /* 0xb3bbbd2e */
|
||||
|
||||
float
|
||||
@ -79,17 +80,15 @@ __ieee754_atan2f(float y, float x)
|
||||
|
||||
/* compute y/x */
|
||||
k = (iy-ix)>>23;
|
||||
if(k > 60) z=pi_o_2+(float)0.5*pi_lo; /* |y/x| > 2**60 */
|
||||
else if(hx<0&&k<-60) z=0.0; /* |y|/x < -2**60 */
|
||||
if(k > 26) { /* |y/x| > 2**26 */
|
||||
z=pi_o_2+(float)0.5*pi_lo;
|
||||
m&=1;
|
||||
}
|
||||
else if(k<-26&&hx<0) z=0.0; /* 0 > |y|/x > -2**-26 */
|
||||
else z=atanf(fabsf(y/x)); /* safe to do y/x */
|
||||
switch (m) {
|
||||
case 0: return z ; /* atan(+,+) */
|
||||
case 1: {
|
||||
u_int32_t zh;
|
||||
GET_FLOAT_WORD(zh,z);
|
||||
SET_FLOAT_WORD(z,zh ^ 0x80000000);
|
||||
}
|
||||
return z ; /* atan(-,+) */
|
||||
case 1: return -z ; /* atan(-,+) */
|
||||
case 2: return pi-(z-pi_lo);/* atan(+,-) */
|
||||
default: /* case 3 */
|
||||
return (z-pi_lo)-pi;/* atan(-,-) */
|
120
libm/upstream-freebsd/lib/msun/src/e_atan2l.c
Normal file
120
libm/upstream-freebsd/lib/msun/src/e_atan2l.c
Normal file
@ -0,0 +1,120 @@
|
||||
|
||||
/* @(#)e_atan2.c 1.3 95/01/18 */
|
||||
/* FreeBSD: head/lib/msun/src/e_atan2.c 176451 2008-02-22 02:30:36Z das */
|
||||
/*
|
||||
* ====================================================
|
||||
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
||||
*
|
||||
* Developed at SunSoft, a Sun Microsystems, Inc. business.
|
||||
* Permission to use, copy, modify, and distribute this
|
||||
* software is freely granted, provided that this notice
|
||||
* is preserved.
|
||||
* ====================================================
|
||||
*
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
/*
|
||||
* See comments in e_atan2.c.
|
||||
* Converted to long double by David Schultz <das@FreeBSD.ORG>.
|
||||
*/
|
||||
|
||||
#include <float.h>
|
||||
|
||||
#include "invtrig.h"
|
||||
#include "math.h"
|
||||
#include "math_private.h"
|
||||
|
||||
static volatile long double
|
||||
tiny = 1.0e-300;
|
||||
static const long double
|
||||
zero = 0.0;
|
||||
|
||||
#ifdef __i386__
|
||||
/* XXX Work around the fact that gcc truncates long double constants on i386 */
|
||||
static volatile double
|
||||
pi1 = 3.14159265358979311600e+00, /* 0x1.921fb54442d18p+1 */
|
||||
pi2 = 1.22514845490862001043e-16; /* 0x1.1a80000000000p-53 */
|
||||
#define pi ((long double)pi1 + pi2)
|
||||
#else
|
||||
static const long double
|
||||
pi = 3.14159265358979323846264338327950280e+00L;
|
||||
#endif
|
||||
|
||||
long double
|
||||
atan2l(long double y, long double x)
|
||||
{
|
||||
union IEEEl2bits ux, uy;
|
||||
long double z;
|
||||
int32_t k,m;
|
||||
int16_t exptx, expsignx, expty, expsigny;
|
||||
|
||||
uy.e = y;
|
||||
expsigny = uy.xbits.expsign;
|
||||
expty = expsigny & 0x7fff;
|
||||
ux.e = x;
|
||||
expsignx = ux.xbits.expsign;
|
||||
exptx = expsignx & 0x7fff;
|
||||
|
||||
if ((exptx==BIAS+LDBL_MAX_EXP &&
|
||||
((ux.bits.manh&~LDBL_NBIT)|ux.bits.manl)!=0) || /* x is NaN */
|
||||
(expty==BIAS+LDBL_MAX_EXP &&
|
||||
((uy.bits.manh&~LDBL_NBIT)|uy.bits.manl)!=0)) /* y is NaN */
|
||||
return x+y;
|
||||
if (expsignx==BIAS && ((ux.bits.manh&~LDBL_NBIT)|ux.bits.manl)==0)
|
||||
return atanl(y); /* x=1.0 */
|
||||
m = ((expsigny>>15)&1)|((expsignx>>14)&2); /* 2*sign(x)+sign(y) */
|
||||
|
||||
/* when y = 0 */
|
||||
if(expty==0 && ((uy.bits.manh&~LDBL_NBIT)|uy.bits.manl)==0) {
|
||||
switch(m) {
|
||||
case 0:
|
||||
case 1: return y; /* atan(+-0,+anything)=+-0 */
|
||||
case 2: return pi+tiny;/* atan(+0,-anything) = pi */
|
||||
case 3: return -pi-tiny;/* atan(-0,-anything) =-pi */
|
||||
}
|
||||
}
|
||||
/* when x = 0 */
|
||||
if(exptx==0 && ((ux.bits.manh&~LDBL_NBIT)|ux.bits.manl)==0)
|
||||
return (expsigny<0)? -pio2_hi-tiny: pio2_hi+tiny;
|
||||
|
||||
/* when x is INF */
|
||||
if(exptx==BIAS+LDBL_MAX_EXP) {
|
||||
if(expty==BIAS+LDBL_MAX_EXP) {
|
||||
switch(m) {
|
||||
case 0: return pio2_hi*0.5+tiny;/* atan(+INF,+INF) */
|
||||
case 1: return -pio2_hi*0.5-tiny;/* atan(-INF,+INF) */
|
||||
case 2: return 1.5*pio2_hi+tiny;/*atan(+INF,-INF)*/
|
||||
case 3: return -1.5*pio2_hi-tiny;/*atan(-INF,-INF)*/
|
||||
}
|
||||
} else {
|
||||
switch(m) {
|
||||
case 0: return zero ; /* atan(+...,+INF) */
|
||||
case 1: return -zero ; /* atan(-...,+INF) */
|
||||
case 2: return pi+tiny ; /* atan(+...,-INF) */
|
||||
case 3: return -pi-tiny ; /* atan(-...,-INF) */
|
||||
}
|
||||
}
|
||||
}
|
||||
/* when y is INF */
|
||||
if(expty==BIAS+LDBL_MAX_EXP)
|
||||
return (expsigny<0)? -pio2_hi-tiny: pio2_hi+tiny;
|
||||
|
||||
/* compute y/x */
|
||||
k = expty-exptx;
|
||||
if(k > LDBL_MANT_DIG+2) { /* |y/x| huge */
|
||||
z=pio2_hi+pio2_lo;
|
||||
m&=1;
|
||||
}
|
||||
else if(expsignx<0&&k<-LDBL_MANT_DIG-2) z=0.0; /* |y/x| tiny, x<0 */
|
||||
else z=atanl(fabsl(y/x)); /* safe to do y/x */
|
||||
switch (m) {
|
||||
case 0: return z ; /* atan(+,+) */
|
||||
case 1: return -z ; /* atan(-,+) */
|
||||
case 2: return pi-(z-pi_lo);/* atan(+,-) */
|
||||
default: /* case 3 */
|
||||
return (z-pi_lo)-pi;/* atan(-,-) */
|
||||
}
|
||||
}
|
@ -12,9 +12,8 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static char rcsid[] = "$FreeBSD: src/lib/msun/src/e_atanh.c,v 1.7 2005/02/04 18:26:05 das Exp $";
|
||||
#endif
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
/* __ieee754_atanh(x)
|
||||
* Method :
|
@ -13,9 +13,8 @@
|
||||
* ====================================================
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static char rcsid[] = "$FreeBSD: src/lib/msun/src/e_atanhf.c,v 1.6 2002/05/28 17:03:12 alfred Exp $";
|
||||
#endif
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include "math.h"
|
||||
#include "math_private.h"
|
@ -11,9 +11,8 @@
|
||||
* ====================================================
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static char rcsid[] = "$FreeBSD: src/lib/msun/src/e_cosh.c,v 1.8 2005/02/04 18:26:05 das Exp $";
|
||||
#endif
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
/* __ieee754_cosh(x)
|
||||
* Method :
|
||||
@ -46,7 +45,6 @@ __ieee754_cosh(double x)
|
||||
{
|
||||
double t,w;
|
||||
int32_t ix;
|
||||
u_int32_t lx;
|
||||
|
||||
/* High word of |x|. */
|
||||
GET_HIGH_WORD(ix,x);
|
||||
@ -73,13 +71,8 @@ __ieee754_cosh(double x)
|
||||
if (ix < 0x40862E42) return half*__ieee754_exp(fabs(x));
|
||||
|
||||
/* |x| in [log(maxdouble), overflowthresold] */
|
||||
GET_LOW_WORD(lx,x);
|
||||
if (ix<0x408633CE ||
|
||||
((ix==0x408633ce)&&(lx<=(u_int32_t)0x8fb9f87d))) {
|
||||
w = __ieee754_exp(half*fabs(x));
|
||||
t = half*w;
|
||||
return t*w;
|
||||
}
|
||||
if (ix<=0x408633CE)
|
||||
return __ldexp_exp(fabs(x), -1);
|
||||
|
||||
/* |x| > overflowthresold, cosh(x) overflow */
|
||||
return huge*huge;
|
@ -13,9 +13,8 @@
|
||||
* ====================================================
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static char rcsid[] = "$FreeBSD: src/lib/msun/src/e_coshf.c,v 1.7 2005/11/13 00:08:23 bde Exp $";
|
||||
#endif
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include "math.h"
|
||||
#include "math_private.h"
|
||||
@ -52,11 +51,8 @@ __ieee754_coshf(float x)
|
||||
if (ix < 0x42b17217) return half*__ieee754_expf(fabsf(x));
|
||||
|
||||
/* |x| in [log(maxfloat), overflowthresold] */
|
||||
if (ix<=0x42b2d4fc) {
|
||||
w = __ieee754_expf(half*fabsf(x));
|
||||
t = half*w;
|
||||
return t*w;
|
||||
}
|
||||
if (ix<=0x42b2d4fc)
|
||||
return __ldexp_expf(fabsf(x), -1);
|
||||
|
||||
/* |x| > overflowthresold, cosh(x) overflow */
|
||||
return huge*huge;
|
@ -10,9 +10,8 @@
|
||||
* ====================================================
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static char rcsid[] = "$FreeBSD: src/lib/msun/src/e_exp.c,v 1.10 2005/02/04 18:26:05 das Exp $";
|
||||
#endif
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
/* __ieee754_exp(x)
|
||||
* Returns the exponential of x.
|
||||
@ -77,6 +76,8 @@ static char rcsid[] = "$FreeBSD: src/lib/msun/src/e_exp.c,v 1.10 2005/02/04 18:2
|
||||
* to produce the hexadecimal values shown.
|
||||
*/
|
||||
|
||||
#include <float.h>
|
||||
|
||||
#include "math.h"
|
||||
#include "math_private.h"
|
||||
|
||||
@ -84,7 +85,6 @@ static const double
|
||||
one = 1.0,
|
||||
halF[2] = {0.5,-0.5,},
|
||||
huge = 1.0e+300,
|
||||
twom1000= 9.33263618503218878990e-302, /* 2**-1000=0x01700000,0*/
|
||||
o_threshold= 7.09782712893383973096e+02, /* 0x40862E42, 0xFEFA39EF */
|
||||
u_threshold= -7.45133219101941108420e+02, /* 0xc0874910, 0xD52D3051 */
|
||||
ln2HI[2] ={ 6.93147180369123816490e-01, /* 0x3fe62e42, 0xfee00000 */
|
||||
@ -98,11 +98,13 @@ P3 = 6.61375632143793436117e-05, /* 0x3F11566A, 0xAF25DE2C */
|
||||
P4 = -1.65339022054652515390e-06, /* 0xBEBBBD41, 0xC5D26BF1 */
|
||||
P5 = 4.13813679705723846039e-08; /* 0x3E663769, 0x72BEA4D0 */
|
||||
|
||||
static volatile double
|
||||
twom1000= 9.33263618503218878990e-302; /* 2**-1000=0x01700000,0*/
|
||||
|
||||
double
|
||||
__ieee754_exp(double x) /* default IEEE double exp */
|
||||
{
|
||||
double y,hi=0.0,lo=0.0,c,t;
|
||||
double y,hi=0.0,lo=0.0,c,t,twopk;
|
||||
int32_t k=0,xsb;
|
||||
u_int32_t hx;
|
||||
|
||||
@ -133,7 +135,7 @@ __ieee754_exp(double x) /* default IEEE double exp */
|
||||
hi = x - t*ln2HI[0]; /* t*ln2HI is exact here */
|
||||
lo = t*ln2LO[0];
|
||||
}
|
||||
x = hi - lo;
|
||||
STRICT_ASSIGN(double, x, hi - lo);
|
||||
}
|
||||
else if(hx < 0x3e300000) { /* when |x|<2**-28 */
|
||||
if(huge+x>one) return one+x;/* trigger inexact */
|
||||
@ -142,18 +144,21 @@ __ieee754_exp(double x) /* default IEEE double exp */
|
||||
|
||||
/* x is now in primary range */
|
||||
t = x*x;
|
||||
if(k >= -1021)
|
||||
INSERT_WORDS(twopk,0x3ff00000+(k<<20), 0);
|
||||
else
|
||||
INSERT_WORDS(twopk,0x3ff00000+((k+1000)<<20), 0);
|
||||
c = x - t*(P1+t*(P2+t*(P3+t*(P4+t*P5))));
|
||||
if(k==0) return one-((x*c)/(c-2.0)-x);
|
||||
else y = one-((lo-(x*c)/(2.0-c))-hi);
|
||||
if(k >= -1021) {
|
||||
u_int32_t hy;
|
||||
GET_HIGH_WORD(hy,y);
|
||||
SET_HIGH_WORD(y,hy+(k<<20)); /* add k to y's exponent */
|
||||
return y;
|
||||
if (k==1024) return y*2.0*0x1p1023;
|
||||
return y*twopk;
|
||||
} else {
|
||||
u_int32_t hy;
|
||||
GET_HIGH_WORD(hy,y);
|
||||
SET_HIGH_WORD(y,hy+((k+1000)<<20)); /* add k to y's exponent */
|
||||
return y*twom1000;
|
||||
return y*twopk*twom1000;
|
||||
}
|
||||
}
|
||||
|
||||
#if (LDBL_MANT_DIG == 53)
|
||||
__weak_reference(exp, expl);
|
||||
#endif
|
@ -13,9 +13,10 @@
|
||||
* ====================================================
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static char rcsid[] = "$FreeBSD: src/lib/msun/src/e_expf.c,v 1.10 2005/11/30 04:56:49 bde Exp $";
|
||||
#endif
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include <float.h>
|
||||
|
||||
#include "math.h"
|
||||
#include "math_private.h"
|
||||
@ -24,7 +25,6 @@ static const float
|
||||
one = 1.0,
|
||||
halF[2] = {0.5,-0.5,},
|
||||
huge = 1.0e+30,
|
||||
twom100 = 7.8886090522e-31, /* 2**-100=0x0d800000 */
|
||||
o_threshold= 8.8721679688e+01, /* 0x42b17180 */
|
||||
u_threshold= -1.0397208405e+02, /* 0xc2cff1b5 */
|
||||
ln2HI[2] ={ 6.9314575195e-01, /* 0x3f317200 */
|
||||
@ -32,16 +32,19 @@ ln2HI[2] ={ 6.9314575195e-01, /* 0x3f317200 */
|
||||
ln2LO[2] ={ 1.4286067653e-06, /* 0x35bfbe8e */
|
||||
-1.4286067653e-06,}, /* 0xb5bfbe8e */
|
||||
invln2 = 1.4426950216e+00, /* 0x3fb8aa3b */
|
||||
P1 = 1.6666667163e-01, /* 0x3e2aaaab */
|
||||
P2 = -2.7777778450e-03, /* 0xbb360b61 */
|
||||
P3 = 6.6137559770e-05, /* 0x388ab355 */
|
||||
P4 = -1.6533901999e-06, /* 0xb5ddea0e */
|
||||
P5 = 4.1381369442e-08; /* 0x3331bb4c */
|
||||
/*
|
||||
* Domain [-0.34568, 0.34568], range ~[-4.278e-9, 4.447e-9]:
|
||||
* |x*(exp(x)+1)/(exp(x)-1) - p(x)| < 2**-27.74
|
||||
*/
|
||||
P1 = 1.6666625440e-1, /* 0xaaaa8f.0p-26 */
|
||||
P2 = -2.7667332906e-3; /* -0xb55215.0p-32 */
|
||||
|
||||
static volatile float twom100 = 7.8886090522e-31; /* 2**-100=0x0d800000 */
|
||||
|
||||
float
|
||||
__ieee754_expf(float x) /* default IEEE double exp */
|
||||
__ieee754_expf(float x)
|
||||
{
|
||||
float y,hi=0.0,lo=0.0,c,t;
|
||||
float y,hi=0.0,lo=0.0,c,t,twopk;
|
||||
int32_t k=0,xsb;
|
||||
u_int32_t hx;
|
||||
|
||||
@ -69,27 +72,26 @@ __ieee754_expf(float x) /* default IEEE double exp */
|
||||
hi = x - t*ln2HI[0]; /* t*ln2HI is exact here */
|
||||
lo = t*ln2LO[0];
|
||||
}
|
||||
x = hi - lo;
|
||||
STRICT_ASSIGN(float, x, hi - lo);
|
||||
}
|
||||
else if(hx < 0x31800000) { /* when |x|<2**-28 */
|
||||
else if(hx < 0x39000000) { /* when |x|<2**-14 */
|
||||
if(huge+x>one) return one+x;/* trigger inexact */
|
||||
}
|
||||
else k = 0;
|
||||
|
||||
/* x is now in primary range */
|
||||
t = x*x;
|
||||
c = x - t*(P1+t*(P2+t*(P3+t*(P4+t*P5))));
|
||||
if(k >= -125)
|
||||
SET_FLOAT_WORD(twopk,0x3f800000+(k<<23));
|
||||
else
|
||||
SET_FLOAT_WORD(twopk,0x3f800000+((k+100)<<23));
|
||||
c = x - t*(P1+t*P2);
|
||||
if(k==0) return one-((x*c)/(c-(float)2.0)-x);
|
||||
else y = one-((lo-(x*c)/((float)2.0-c))-hi);
|
||||
if(k >= -125) {
|
||||
u_int32_t hy;
|
||||
GET_FLOAT_WORD(hy,y);
|
||||
SET_FLOAT_WORD(y,hy+(k<<23)); /* add k to y's exponent */
|
||||
return y;
|
||||
if(k==128) return y*2.0F*0x1p127F;
|
||||
return y*twopk;
|
||||
} else {
|
||||
u_int32_t hy;
|
||||
GET_FLOAT_WORD(hy,y);
|
||||
SET_FLOAT_WORD(y,hy+((k+100)<<23)); /* add k to y's exponent */
|
||||
return y*twom100;
|
||||
return y*twopk*twom100;
|
||||
}
|
||||
}
|
@ -11,9 +11,8 @@
|
||||
* ====================================================
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static char rcsid[] = "$FreeBSD: src/lib/msun/src/e_fmod.c,v 1.9 2005/02/04 18:26:05 das Exp $";
|
||||
#endif
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
/*
|
||||
* __ieee754_fmod(x,y)
|
@ -13,9 +13,8 @@
|
||||
* ====================================================
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static char rcsid[] = "$FreeBSD: src/lib/msun/src/e_fmodf.c,v 1.6 2002/05/28 17:03:12 alfred Exp $";
|
||||
#endif
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
/*
|
||||
* __ieee754_fmodf(x,y)
|
149
libm/upstream-freebsd/lib/msun/src/e_fmodl.c
Normal file
149
libm/upstream-freebsd/lib/msun/src/e_fmodl.c
Normal file
@ -0,0 +1,149 @@
|
||||
/* @(#)e_fmod.c 1.3 95/01/18 */
|
||||
/*-
|
||||
* ====================================================
|
||||
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
||||
*
|
||||
* Developed at SunSoft, a Sun Microsystems, Inc. business.
|
||||
* Permission to use, copy, modify, and distribute this
|
||||
* software is freely granted, provided that this notice
|
||||
* is preserved.
|
||||
* ====================================================
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include <float.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include "fpmath.h"
|
||||
#include "math.h"
|
||||
#include "math_private.h"
|
||||
|
||||
#define BIAS (LDBL_MAX_EXP - 1)
|
||||
|
||||
#if LDBL_MANL_SIZE > 32
|
||||
typedef uint64_t manl_t;
|
||||
#else
|
||||
typedef uint32_t manl_t;
|
||||
#endif
|
||||
|
||||
#if LDBL_MANH_SIZE > 32
|
||||
typedef uint64_t manh_t;
|
||||
#else
|
||||
typedef uint32_t manh_t;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* These macros add and remove an explicit integer bit in front of the
|
||||
* fractional mantissa, if the architecture doesn't have such a bit by
|
||||
* default already.
|
||||
*/
|
||||
#ifdef LDBL_IMPLICIT_NBIT
|
||||
#define SET_NBIT(hx) ((hx) | (1ULL << LDBL_MANH_SIZE))
|
||||
#define HFRAC_BITS LDBL_MANH_SIZE
|
||||
#else
|
||||
#define SET_NBIT(hx) (hx)
|
||||
#define HFRAC_BITS (LDBL_MANH_SIZE - 1)
|
||||
#endif
|
||||
|
||||
#define MANL_SHIFT (LDBL_MANL_SIZE - 1)
|
||||
|
||||
static const long double one = 1.0, Zero[] = {0.0, -0.0,};
|
||||
|
||||
/*
|
||||
* fmodl(x,y)
|
||||
* Return x mod y in exact arithmetic
|
||||
* Method: shift and subtract
|
||||
*
|
||||
* Assumptions:
|
||||
* - The low part of the mantissa fits in a manl_t exactly.
|
||||
* - The high part of the mantissa fits in an int64_t with enough room
|
||||
* for an explicit integer bit in front of the fractional bits.
|
||||
*/
|
||||
long double
|
||||
fmodl(long double x, long double y)
|
||||
{
|
||||
union IEEEl2bits ux, uy;
|
||||
int64_t hx,hz; /* We need a carry bit even if LDBL_MANH_SIZE is 32. */
|
||||
manh_t hy;
|
||||
manl_t lx,ly,lz;
|
||||
int ix,iy,n,sx;
|
||||
|
||||
ux.e = x;
|
||||
uy.e = y;
|
||||
sx = ux.bits.sign;
|
||||
|
||||
/* purge off exception values */
|
||||
if((uy.bits.exp|uy.bits.manh|uy.bits.manl)==0 || /* y=0 */
|
||||
(ux.bits.exp == BIAS + LDBL_MAX_EXP) || /* or x not finite */
|
||||
(uy.bits.exp == BIAS + LDBL_MAX_EXP &&
|
||||
((uy.bits.manh&~LDBL_NBIT)|uy.bits.manl)!=0)) /* or y is NaN */
|
||||
return (x*y)/(x*y);
|
||||
if(ux.bits.exp<=uy.bits.exp) {
|
||||
if((ux.bits.exp<uy.bits.exp) ||
|
||||
(ux.bits.manh<=uy.bits.manh &&
|
||||
(ux.bits.manh<uy.bits.manh ||
|
||||
ux.bits.manl<uy.bits.manl))) {
|
||||
return x; /* |x|<|y| return x or x-y */
|
||||
}
|
||||
if(ux.bits.manh==uy.bits.manh && ux.bits.manl==uy.bits.manl) {
|
||||
return Zero[sx]; /* |x|=|y| return x*0*/
|
||||
}
|
||||
}
|
||||
|
||||
/* determine ix = ilogb(x) */
|
||||
if(ux.bits.exp == 0) { /* subnormal x */
|
||||
ux.e *= 0x1.0p512;
|
||||
ix = ux.bits.exp - (BIAS + 512);
|
||||
} else {
|
||||
ix = ux.bits.exp - BIAS;
|
||||
}
|
||||
|
||||
/* determine iy = ilogb(y) */
|
||||
if(uy.bits.exp == 0) { /* subnormal y */
|
||||
uy.e *= 0x1.0p512;
|
||||
iy = uy.bits.exp - (BIAS + 512);
|
||||
} else {
|
||||
iy = uy.bits.exp - BIAS;
|
||||
}
|
||||
|
||||
/* set up {hx,lx}, {hy,ly} and align y to x */
|
||||
hx = SET_NBIT(ux.bits.manh);
|
||||
hy = SET_NBIT(uy.bits.manh);
|
||||
lx = ux.bits.manl;
|
||||
ly = uy.bits.manl;
|
||||
|
||||
/* fix point fmod */
|
||||
n = ix - iy;
|
||||
|
||||
while(n--) {
|
||||
hz=hx-hy;lz=lx-ly; if(lx<ly) hz -= 1;
|
||||
if(hz<0){hx = hx+hx+(lx>>MANL_SHIFT); lx = lx+lx;}
|
||||
else {
|
||||
if ((hz|lz)==0) /* return sign(x)*0 */
|
||||
return Zero[sx];
|
||||
hx = hz+hz+(lz>>MANL_SHIFT); lx = lz+lz;
|
||||
}
|
||||
}
|
||||
hz=hx-hy;lz=lx-ly; if(lx<ly) hz -= 1;
|
||||
if(hz>=0) {hx=hz;lx=lz;}
|
||||
|
||||
/* convert back to floating value and restore the sign */
|
||||
if((hx|lx)==0) /* return sign(x)*0 */
|
||||
return Zero[sx];
|
||||
while(hx<(1ULL<<HFRAC_BITS)) { /* normalize x */
|
||||
hx = hx+hx+(lx>>MANL_SHIFT); lx = lx+lx;
|
||||
iy -= 1;
|
||||
}
|
||||
ux.bits.manh = hx; /* The mantissa is truncated here if needed. */
|
||||
ux.bits.manl = lx;
|
||||
if (iy < LDBL_MIN_EXP) {
|
||||
ux.bits.exp = iy + (BIAS + 512);
|
||||
ux.e *= 0x1p-512;
|
||||
} else {
|
||||
ux.bits.exp = iy + BIAS;
|
||||
}
|
||||
x = ux.e * one; /* create necessary signal */
|
||||
return x; /* exact output */
|
||||
}
|
@ -12,9 +12,8 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static char rcsid[] = "$FreeBSD: src/lib/msun/src/e_gamma.c,v 1.7 2005/02/04 18:26:05 das Exp $";
|
||||
#endif
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
/* __ieee754_gamma(x)
|
||||
* Return the logarithm of the Gamma function of x.
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user