Init
This commit is contained in:
332
include/math.h
Normal file
332
include/math.h
Normal file
@@ -0,0 +1,332 @@
|
||||
/* @(#)math.h 1.1 94/10/31 SMI */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1988 by Sun Microsystems, Inc.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Math library definitions for all the public functions implemented in libm.a.
|
||||
*/
|
||||
|
||||
#ifndef __math_h
|
||||
#define __math_h
|
||||
|
||||
/*
|
||||
* Posix (actually ansi C) section
|
||||
*/
|
||||
#define HUGE_VAL (__infinity()) /* Produces IEEE Infinity. */
|
||||
|
||||
|
||||
extern double __infinity();
|
||||
extern double acos(/* double x */);
|
||||
extern double asin(/* double x */);
|
||||
extern double atan(/* double x */);
|
||||
extern double atan2(/* double y, double x */);
|
||||
extern double ceil(/* double x */);
|
||||
extern double cos(/* double x */);
|
||||
extern double cosh(/* double x */);
|
||||
extern double exp(/* double x */);
|
||||
extern double fabs(/* double x */);
|
||||
extern double floor(/* double x */);
|
||||
extern double fmod(/* double x, double y */);
|
||||
extern double frexp(/* double value, int *exp */);
|
||||
extern double ldexp(/* double value, int exp */);
|
||||
extern double log(/* double x */);
|
||||
extern double log10(/* double x */);
|
||||
extern double modf(/* double value, double *iptr */);
|
||||
extern double pow(/* double x, double y */);
|
||||
extern double sin(/* double x */);
|
||||
extern double sinh(/* double x */);
|
||||
extern double sqrt(/* double x */);
|
||||
extern double tan(/* double x */);
|
||||
extern double tanh(/* double x */);
|
||||
|
||||
#ifndef _POSIX_SOURCE /* the rest of the file is !POSIX */
|
||||
#include <floatingpoint.h> /* Contains definitions for types and
|
||||
* functions implemented in libc.a.
|
||||
*/
|
||||
extern double acosh();
|
||||
extern double asinh();
|
||||
extern double atanh();
|
||||
extern double cbrt();
|
||||
extern double copysign();
|
||||
extern double erf();
|
||||
extern double erfc();
|
||||
extern double expm1();
|
||||
extern int finite();
|
||||
extern double hypot();
|
||||
extern double j0();
|
||||
extern double j1();
|
||||
extern double jn();
|
||||
extern double lgamma();
|
||||
extern double log1p();
|
||||
extern double rint();
|
||||
extern double y0();
|
||||
extern double y1();
|
||||
extern double yn();
|
||||
|
||||
/*
|
||||
* Sun definitions.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Implemented precisions for trigonometric argument reduction.
|
||||
*/
|
||||
enum fp_pi_type {
|
||||
fp_pi_infinite = 0, /* Infinite-precision approximation to pi. */
|
||||
fp_pi_66 = 1, /* 66-bit approximation to pi. */
|
||||
fp_pi_53 = 2 /* 53-bit approximation to pi. */
|
||||
};
|
||||
|
||||
/*
|
||||
* Pi precision to use for trigonometric argument reduction.
|
||||
*/
|
||||
extern enum fp_pi_type fp_pi;
|
||||
|
||||
/*
|
||||
* Functions callable from C, intended to support IEEE arithmetic.
|
||||
*/
|
||||
extern enum fp_class_type fp_class();
|
||||
extern int ieee_flags();
|
||||
extern int ieee_handler();
|
||||
extern void ieee_retrospective();
|
||||
extern int ilogb();
|
||||
extern double infinity();
|
||||
extern int irint();
|
||||
extern int isinf();
|
||||
extern int isnan();
|
||||
extern int isnormal();
|
||||
extern int issubnormal();
|
||||
extern int iszero();
|
||||
extern double logb();
|
||||
extern double max_normal();
|
||||
extern double max_subnormal();
|
||||
extern double min_normal();
|
||||
extern double min_subnormal();
|
||||
extern double nextafter();
|
||||
extern void nonstandard_arithmetic();
|
||||
extern double quiet_nan();
|
||||
extern double remainder();
|
||||
extern double scalb();
|
||||
extern double scalbn();
|
||||
extern double signaling_nan();
|
||||
extern int signbit();
|
||||
extern double significand();
|
||||
extern void standard_arithmetic();
|
||||
|
||||
/*
|
||||
* Other functions for C programmers.
|
||||
*/
|
||||
extern double acospi();
|
||||
extern double aint();
|
||||
extern double anint();
|
||||
extern double annuity();
|
||||
extern double asinpi();
|
||||
extern double atan2pi();
|
||||
extern double atanpi();
|
||||
extern double compound();
|
||||
extern double cospi();
|
||||
extern double exp10();
|
||||
extern double exp2();
|
||||
extern double log2();
|
||||
extern int nint();
|
||||
extern void sincos();
|
||||
extern void sincospi();
|
||||
extern double sinpi();
|
||||
extern double tanpi();
|
||||
extern int matherr();
|
||||
|
||||
|
||||
/*
|
||||
* Single-precision functions callable from Fortran, Pascal, Modula-2, etc,
|
||||
* take float* arguments instead of double and
|
||||
* return FLOATFUNCTIONTYPE results instead of double.
|
||||
* RETURNFLOAT is used to return a float function value without conversion
|
||||
* to double.
|
||||
* ASSIGNFLOAT is used to get the float value out of a FLOATFUNCTIONTYPE
|
||||
* result.
|
||||
* We don't want you to have to think about -fsingle2.
|
||||
*
|
||||
* Some internal library functions pass float parameters as 32-bit values,
|
||||
* disguised as FLOATPARAMETER. FLOATPARAMETERVALUE(x) extracts the
|
||||
* float value from the FLOATPARAMETER.
|
||||
*/
|
||||
|
||||
/* mc68000 returns float results in d0, same as int */
|
||||
|
||||
#ifdef mc68000
|
||||
#define FLOATFUNCTIONTYPE int
|
||||
#define RETURNFLOAT(x) return (*(int *)(&(x)))
|
||||
#define ASSIGNFLOAT(x,y) *(int *)(&x) = y
|
||||
#endif
|
||||
|
||||
/* sparc returns float results in %f0, same as top half of double */
|
||||
|
||||
#ifdef sparc
|
||||
#define FLOATFUNCTIONTYPE double
|
||||
#define RETURNFLOAT(x) { union {double _d; float _f } _kluge; _kluge._f = (x); return _kluge._d; }
|
||||
#define ASSIGNFLOAT(x,y) { union {double _d; float _f } _kluge; _kluge._d = (y); x = _kluge._f; }
|
||||
#endif
|
||||
|
||||
/* i386 returns float results on stack as extendeds, same as double */
|
||||
|
||||
#ifdef i386
|
||||
#define FLOATFUNCTIONTYPE float
|
||||
#define RETURNFLOAT(x) return (x)
|
||||
#define ASSIGNFLOAT(x,y) x = y
|
||||
#endif
|
||||
|
||||
/* So far everybody passes float parameters as 32 bits on stack, same as int. */
|
||||
|
||||
#define FLOATPARAMETER int
|
||||
#define FLOATPARAMETERVALUE(x) (*(float *)(&(x)))
|
||||
|
||||
extern int ir_finite_();
|
||||
extern enum fp_class_type ir_fp_class_();
|
||||
extern int ir_ilogb_();
|
||||
extern int ir_irint_();
|
||||
extern int ir_isinf_();
|
||||
extern int ir_isnan_();
|
||||
extern int ir_isnormal_();
|
||||
extern int ir_issubnormal_();
|
||||
extern int ir_iszero_();
|
||||
extern int ir_nint_();
|
||||
extern int ir_signbit_();
|
||||
extern void r_sincos_();
|
||||
extern void r_sincospi_();
|
||||
extern FLOATFUNCTIONTYPE r_acos_();
|
||||
extern FLOATFUNCTIONTYPE r_acosh_();
|
||||
extern FLOATFUNCTIONTYPE r_acospi_();
|
||||
extern FLOATFUNCTIONTYPE r_aint_();
|
||||
extern FLOATFUNCTIONTYPE r_anint_();
|
||||
extern FLOATFUNCTIONTYPE r_annuity_();
|
||||
extern FLOATFUNCTIONTYPE r_asin_();
|
||||
extern FLOATFUNCTIONTYPE r_asinh_();
|
||||
extern FLOATFUNCTIONTYPE r_asinpi_();
|
||||
extern FLOATFUNCTIONTYPE r_atan2_();
|
||||
extern FLOATFUNCTIONTYPE r_atan2pi_();
|
||||
extern FLOATFUNCTIONTYPE r_atan_();
|
||||
extern FLOATFUNCTIONTYPE r_atanh_();
|
||||
extern FLOATFUNCTIONTYPE r_atanpi_();
|
||||
extern FLOATFUNCTIONTYPE r_cbrt_();
|
||||
extern FLOATFUNCTIONTYPE r_ceil_();
|
||||
extern FLOATFUNCTIONTYPE r_compound_();
|
||||
extern FLOATFUNCTIONTYPE r_copysign_();
|
||||
extern FLOATFUNCTIONTYPE r_cos_();
|
||||
extern FLOATFUNCTIONTYPE r_cosh_();
|
||||
extern FLOATFUNCTIONTYPE r_cospi_();
|
||||
extern FLOATFUNCTIONTYPE r_erf_();
|
||||
extern FLOATFUNCTIONTYPE r_erfc_();
|
||||
extern FLOATFUNCTIONTYPE r_exp10_();
|
||||
extern FLOATFUNCTIONTYPE r_exp2_();
|
||||
extern FLOATFUNCTIONTYPE r_exp_();
|
||||
extern FLOATFUNCTIONTYPE r_expm1_();
|
||||
extern FLOATFUNCTIONTYPE r_fabs_();
|
||||
extern FLOATFUNCTIONTYPE r_floor_();
|
||||
extern FLOATFUNCTIONTYPE r_fmod_();
|
||||
extern FLOATFUNCTIONTYPE r_hypot_();
|
||||
extern FLOATFUNCTIONTYPE r_infinity_();
|
||||
extern FLOATFUNCTIONTYPE r_j0_();
|
||||
extern FLOATFUNCTIONTYPE r_j1_();
|
||||
extern FLOATFUNCTIONTYPE r_jn_();
|
||||
extern FLOATFUNCTIONTYPE r_lgamma_();
|
||||
extern FLOATFUNCTIONTYPE r_log10_();
|
||||
extern FLOATFUNCTIONTYPE r_log1p_();
|
||||
extern FLOATFUNCTIONTYPE r_log2_();
|
||||
extern FLOATFUNCTIONTYPE r_log_();
|
||||
extern FLOATFUNCTIONTYPE r_logb_();
|
||||
extern FLOATFUNCTIONTYPE r_max_normal_();
|
||||
extern FLOATFUNCTIONTYPE r_max_subnormal_();
|
||||
extern FLOATFUNCTIONTYPE r_min_normal_();
|
||||
extern FLOATFUNCTIONTYPE r_min_subnormal_();
|
||||
extern FLOATFUNCTIONTYPE r_nextafter_();
|
||||
extern FLOATFUNCTIONTYPE r_pow_();
|
||||
extern FLOATFUNCTIONTYPE r_quiet_nan_();
|
||||
extern FLOATFUNCTIONTYPE r_remainder_();
|
||||
extern FLOATFUNCTIONTYPE r_rint_();
|
||||
extern FLOATFUNCTIONTYPE r_scalb_();
|
||||
extern FLOATFUNCTIONTYPE r_scalbn_();
|
||||
extern FLOATFUNCTIONTYPE r_signaling_nan_();
|
||||
extern FLOATFUNCTIONTYPE r_significand_();
|
||||
extern FLOATFUNCTIONTYPE r_sin_();
|
||||
extern FLOATFUNCTIONTYPE r_sinh_();
|
||||
extern FLOATFUNCTIONTYPE r_sinpi_();
|
||||
extern FLOATFUNCTIONTYPE r_sqrt_();
|
||||
extern FLOATFUNCTIONTYPE r_tan_();
|
||||
extern FLOATFUNCTIONTYPE r_tanh_();
|
||||
extern FLOATFUNCTIONTYPE r_tanpi_();
|
||||
extern FLOATFUNCTIONTYPE r_y0_();
|
||||
extern FLOATFUNCTIONTYPE r_y1_();
|
||||
extern FLOATFUNCTIONTYPE r_yn_();
|
||||
|
||||
/* Constants, variables, and functions from System V */
|
||||
|
||||
#define _ABS(x) ((x) < 0 ? -(x) : (x))
|
||||
|
||||
#define HUGE (infinity()) /* For historical compatibility. */
|
||||
|
||||
#define DOMAIN 1
|
||||
#define SING 2
|
||||
#define OVERFLOW 3
|
||||
#define UNDERFLOW 4
|
||||
#define TLOSS 5
|
||||
#define PLOSS 6
|
||||
|
||||
struct exception {
|
||||
int type;
|
||||
char *name;
|
||||
double arg1;
|
||||
double arg2;
|
||||
double retval;
|
||||
};
|
||||
|
||||
/*
|
||||
* First three have to be defined exactly as in values.h including spacing!
|
||||
*/
|
||||
#define M_LN2 0.69314718055994530942
|
||||
#define M_PI 3.14159265358979323846
|
||||
#define M_SQRT2 1.41421356237309504880
|
||||
|
||||
#define M_E 2.7182818284590452354
|
||||
#define M_LOG2E 1.4426950408889634074
|
||||
#define M_LOG10E 0.43429448190325182765
|
||||
#define M_LN10 2.30258509299404568402
|
||||
#define M_PI_2 1.57079632679489661923
|
||||
#define M_PI_4 0.78539816339744830962
|
||||
#define M_1_PI 0.31830988618379067154
|
||||
#define M_2_PI 0.63661977236758134308
|
||||
#define M_2_SQRTPI 1.12837916709551257390
|
||||
#define M_SQRT1_2 0.70710678118654752440
|
||||
#define _REDUCE(TYPE, X, XN, C1, C2) { \
|
||||
double x1 = (double)(TYPE)X, x2 = X - x1; \
|
||||
X = x1 - (XN) * (C1); X += x2; X -= (XN) * (C2); }
|
||||
#define _POLY1(x, c) ((c)[0] * (x) + (c)[1])
|
||||
#define _POLY2(x, c) (_POLY1((x), (c)) * (x) + (c)[2])
|
||||
#define _POLY3(x, c) (_POLY2((x), (c)) * (x) + (c)[3])
|
||||
#define _POLY4(x, c) (_POLY3((x), (c)) * (x) + (c)[4])
|
||||
#define _POLY5(x, c) (_POLY4((x), (c)) * (x) + (c)[5])
|
||||
#define _POLY6(x, c) (_POLY5((x), (c)) * (x) + (c)[6])
|
||||
#define _POLY7(x, c) (_POLY6((x), (c)) * (x) + (c)[7])
|
||||
#define _POLY8(x, c) (_POLY7((x), (c)) * (x) + (c)[8])
|
||||
#define _POLY9(x, c) (_POLY8((x), (c)) * (x) + (c)[9])
|
||||
|
||||
extern int signgam;
|
||||
/*
|
||||
* Deprecated functions for compatibility with past.
|
||||
* Changes planned for future.
|
||||
*/
|
||||
|
||||
extern double cabs(); /* Use double hypot(x,y)
|
||||
* Traditional cabs usage is confused -
|
||||
* is its argument two doubles or one struct?
|
||||
*/
|
||||
extern double drem(); /* Use double remainder(x,y)
|
||||
* drem will disappear in a future release.
|
||||
*/
|
||||
extern double gamma(); /* Use double lgamma(x)
|
||||
* to compute log of gamma function.
|
||||
* Name gamma is reserved for true gamma function
|
||||
* to appear in a future release.
|
||||
*/
|
||||
#endif /* !_POSIX_SOURCE */
|
||||
#endif /* !__math_h */
|
||||
Reference in New Issue
Block a user