mirror of
https://gitea.nishi.boats/pyrite-dev/milsko
synced 2025-12-31 06:30:52 +00:00
git-svn-id: http://svn2.nishi.boats/svn/milsko/trunk@557 b9cfdab3-6d41-4d17-bbe4-086880011989
246 lines
6.1 KiB
C
246 lines
6.1 KiB
C
|
|
/* @(#)fdlibm.h 1.5 04/04/22 */
|
|
/*
|
|
* ====================================================
|
|
* Copyright (C) 2004 by Sun Microsystems, Inc. All rights reserved.
|
|
*
|
|
* Permission to use, copy, modify, and distribute this
|
|
* software is freely granted, provided that this notice
|
|
* is preserved.
|
|
* ====================================================
|
|
*/
|
|
|
|
#ifndef _MATH_H_
|
|
#define _MATH_H_
|
|
|
|
/* Sometimes it's necessary to define __LITTLE_ENDIAN explicitly
|
|
but these catch some common cases. */
|
|
|
|
#if defined(__WATCOMC__) || defined(_MSC_VER) || defined(i386) || defined(i486) || defined(intel) || defined(x86) || defined(i86pc) || defined(__alpha) || defined(__osf__) || __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
|
#define __LITTLE_ENDIAN
|
|
#endif
|
|
|
|
#ifdef __LITTLE_ENDIAN
|
|
#define __HI(x) *(1 + (int*)&x)
|
|
#define __LO(x) *(int*)&x
|
|
#define __HIp(x) *(1 + (int*)x)
|
|
#define __LOp(x) *(int*)x
|
|
#else
|
|
#define __HI(x) *(int*)&x
|
|
#define __LO(x) *(1 + (int*)&x)
|
|
#define __HIp(x) *(int*)x
|
|
#define __LOp(x) *(1 + (int*)x)
|
|
#endif
|
|
|
|
#define signgam fdlibm_signgam
|
|
|
|
#define acos fdlibm_acos
|
|
#define asin fdlibm_asin
|
|
#define atan fdlibm_atan
|
|
#define atan2 fdlibm_atan2
|
|
#define cos fdlibm_cos
|
|
#define sin fdlibm_sin
|
|
#define tan fdlibm_tan
|
|
|
|
#define cosh fdlibm_cosh
|
|
#define sinh fdlibm_sinh
|
|
#define tanh fdlibm_tanh
|
|
|
|
#define exp fdlibm_exp
|
|
#define frexp fdlibm_frexp
|
|
#define ldexp fdlibm_ldexp
|
|
#define log fdlibm_log
|
|
#define log10 fdlibm_log10
|
|
#define modf fdlibm_modf
|
|
|
|
#define pow fdlibm_pow
|
|
#define sqrt fdlibm_sqrt
|
|
|
|
#define ceil fdlibm_ceil
|
|
#define fabs fdlibm_fabs
|
|
#define floor fdlibm_floor
|
|
#define fmod fdlibm_fmod
|
|
|
|
#define erf fdlibm_erf
|
|
#define erfc fdlibm_erfc
|
|
#define gamma fdlibm_gamma
|
|
#define hypot fdlibm_hypot
|
|
#define isnan fdlibm_isnan
|
|
#define finite fdlibm_finite
|
|
#define j0 fdlibm_j0
|
|
#define j1 fdlibm_j1
|
|
#define jn fdlibm_jn
|
|
#define lgamma fdlibm_lgamma
|
|
#define y0 fdlibm_y0
|
|
#define y1 fdlibm_y1
|
|
#define yn fdlibm_yn
|
|
|
|
#define acosh fdlibm_acosh
|
|
#define asinh fdlibm_asinh
|
|
#define atanh fdlibm_atanh
|
|
#define cbrt fdlibm_cbrt
|
|
#define logb fdlibm_logb
|
|
#define nextafter fdlibm_nextafter
|
|
#define remainder fdlibm_remainder
|
|
#define scalb fdlibm_scalb
|
|
|
|
#define significand fdlibm_significand
|
|
|
|
#define copysign fdlibm_copysign
|
|
#define ilogb fdlibm_ilogb
|
|
#define rint fdlibm_rint
|
|
#define scalbn fdlibm_scalbn
|
|
|
|
#define expm1 fdlibm_expm1
|
|
#define log1p fdlibm_log1p
|
|
|
|
|
|
/*
|
|
* ANSI/POSIX
|
|
*/
|
|
|
|
extern int signgam;
|
|
|
|
#define MAXFLOAT ((float)3.40282346638528860e+38)
|
|
|
|
#define HUGE MAXFLOAT
|
|
|
|
/*
|
|
* set X_TLOSS = pi*2**52, which is possibly defined in <values.h>
|
|
* (one may replace the following line by "#include <values.h>")
|
|
*/
|
|
|
|
#define X_TLOSS 1.41484755040568800000e+16
|
|
|
|
#define DOMAIN 1
|
|
#define SING 2
|
|
#define OVERFLOW 3
|
|
#define UNDERFLOW 4
|
|
#define TLOSS 5
|
|
#define PLOSS 6
|
|
|
|
/*
|
|
* ANSI/POSIX
|
|
*/
|
|
extern double acos(double);
|
|
extern double asin(double);
|
|
extern double atan(double);
|
|
extern double atan2(double, double);
|
|
extern double cos(double);
|
|
extern double sin(double);
|
|
extern double tan(double);
|
|
|
|
extern double cosh(double);
|
|
extern double sinh(double);
|
|
extern double tanh(double);
|
|
|
|
extern double exp(double);
|
|
extern double frexp(double, int*);
|
|
extern double ldexp(double, int);
|
|
extern double log(double);
|
|
extern double log10(double);
|
|
extern double modf(double, double*);
|
|
|
|
extern double pow(double, double);
|
|
extern double sqrt(double);
|
|
|
|
extern double ceil(double);
|
|
extern double fabs(double);
|
|
extern double floor(double);
|
|
extern double fmod(double, double);
|
|
|
|
extern double erf(double);
|
|
extern double erfc(double);
|
|
extern double gamma(double);
|
|
extern double hypot(double, double);
|
|
extern int isnan(double);
|
|
extern int finite(double);
|
|
extern double j0(double);
|
|
extern double j1(double);
|
|
extern double jn(int, double);
|
|
extern double lgamma(double);
|
|
extern double y0(double);
|
|
extern double y1(double);
|
|
extern double yn(int, double);
|
|
|
|
extern double acosh(double);
|
|
extern double asinh(double);
|
|
extern double atanh(double);
|
|
extern double cbrt(double);
|
|
extern double logb(double);
|
|
extern double nextafter(double, double);
|
|
extern double remainder(double, double);
|
|
extern double scalb(double, double);
|
|
|
|
/*
|
|
* IEEE Test Vector
|
|
*/
|
|
extern double significand(double);
|
|
|
|
/*
|
|
* Functions callable from C, intended to support IEEE arithmetic.
|
|
*/
|
|
extern double copysign(double, double);
|
|
extern int ilogb(double);
|
|
extern double rint(double);
|
|
extern double scalbn(double, int);
|
|
|
|
/*
|
|
* BSD math library entry points
|
|
*/
|
|
extern double expm1(double);
|
|
extern double log1p(double);
|
|
|
|
/*
|
|
* Reentrant version of gamma & lgamma; passes signgam back by reference
|
|
* as the second argument; user must allocate space for signgam.
|
|
*/
|
|
#ifdef _REENTRANT
|
|
#define gamma_r fdlibm_gamma_r
|
|
#define lgamma_r fdlibm_lgamma_r
|
|
|
|
extern double gamma_r(double, int*);
|
|
extern double lgamma_r(double, int*);
|
|
#endif /* _REENTRANT */
|
|
|
|
/* ieee style elementary functions */
|
|
extern double __fdlibm_sqrt(double);
|
|
extern double __fdlibm_acos(double);
|
|
extern double __fdlibm_acosh(double);
|
|
extern double __fdlibm_log(double);
|
|
extern double __fdlibm_atanh(double);
|
|
extern double __fdlibm_asin(double);
|
|
extern double __fdlibm_atan2(double, double);
|
|
extern double __fdlibm_exp(double);
|
|
extern double __fdlibm_cosh(double);
|
|
extern double __fdlibm_fmod(double, double);
|
|
extern double __fdlibm_pow(double, double);
|
|
extern double __fdlibm_lgamma_r(double, int*);
|
|
extern double __fdlibm_gamma_r(double, int*);
|
|
extern double __fdlibm_lgamma(double);
|
|
extern double __fdlibm_gamma(double);
|
|
extern double __fdlibm_log10(double);
|
|
extern double __fdlibm_sinh(double);
|
|
extern double __fdlibm_hypot(double, double);
|
|
extern double __fdlibm_j0(double);
|
|
extern double __fdlibm_j1(double);
|
|
extern double __fdlibm_y0(double);
|
|
extern double __fdlibm_y1(double);
|
|
extern double __fdlibm_jn(int, double);
|
|
extern double __fdlibm_yn(int, double);
|
|
extern double __fdlibm_remainder(double, double);
|
|
extern int __fdlibm_rem_pio2(double, double*);
|
|
#ifdef _SCALB_INT
|
|
extern double __fdlibm_scalb(double, int);
|
|
#else
|
|
extern double __fdlibm_scalb(double, double);
|
|
#endif
|
|
|
|
/* fdlibm kernel function */
|
|
extern double __fdlibm_kernel_sin(double, double, int);
|
|
extern double __fdlibm_kernel_cos(double, double);
|
|
extern double __fdlibm_kernel_tan(double, double, int);
|
|
extern int __fdlibm_kernel_rem_pio2(double*, double*, int, int, int, const int*);
|
|
|
|
#endif
|