Rev 605 | Blame | Last modification | View Log | Download | RSS feed
#ifndef MATHLIB_H#define MATHLIB_H#include "Arith.h"#include <errno.h>#include <float.h>#include <limits.h>#include <math.h>#include <stdlib.h>/* 30 Decimal-place constants computed with bc (scale=32; proper round) */#ifndef M_1_SQRT_2#define M_1_SQRT_2 0.707106781186547524400844362105#endif#ifndef M_PI#define M_PI 3.141592653589793238462643383279#endif#ifndef M_PI_half#define M_PI_half 1.570796326794896619231321691640#endif#ifndef M_SQRT_PI#define M_SQRT_PI 1.772453850905516027298167483341#endif#ifndef M_1_SQRT_2PI#define M_1_SQRT_2PI 0.398942280401432677939946059934#endif/* log(sqrt(2*pi)) = log(2*pi)/2 : */#ifndef M_LN_SQRT_2PI#define M_LN_SQRT_2PI 0.918938533204672741780329736406#endif#define MATHLIB_ERROR(x) { printf("%s\n",x); exit(1); }#define MATHLIB_WARNING(x) { printf("%s\n",x); }#define ME_NONE 0#define ME_DOMAIN 1#define ME_RANGE 2#define ME_NOCONV 3#define ME_PRECISION 4#define ME_UNDERFLOW 5#undef ML_PRECISION_WARNINGS#ifdef IEEE_754extern double m_zero;extern double m_one;extern double m_tiny;#define ML_ERROR(x) /* nothing */#define ML_POSINF (m_one / m_zero)#define ML_NEGINF ((-m_one) / m_zero)#define ML_NAN (m_zero / m_zero)#define ML_UNDERFLOW (m_tiny * m_tiny)#define ML_VALID(x) (!isnan(x))#else#define ML_ERROR(x) ml_error(x)#define ML_POSINF DBL_MAX#define ML_NEGINF (-DBL_MAX)#define ML_NAN (-DBL_MAX)#define ML_UNDERFLOW 0#define ML_VALID(x) (errno == 0)#endif/* Splus Compatibility */#define snorm norm_rand#define sunif unif_rand#define sexp exp_rand/* Name Hiding to Avoid Clashes with Fortran */#ifdef HIDE_NAMES#define d1mach c_d1mach#define i1mach c_i1mach#endif#define rround fround#define prec fprec#define trunc ftrunc#define sign fsign/* Machine Characteristics */double d1mach(int);double d1mach_(int*);int i1mach(int);int i1mach_(int*);/* General Support Functions */int imax2(int, int);int imin2(int, int);double fmax2(double, double);double fmin2(double, double);double fmod(double, double);double fprec(double, double);double fround(double, double);double ftrunc(double);double fsign(double, double);double fsquare(double);double fcube(double);/* Random Number Generators */double snorm(void);double sunif(void);double sexp(void);/* Chebyshev Series */int chebyshev_init(double*, int, double);double chebyshev_eval(double, double *, int);/* Gamma and Related Functions */double logrelerr(double);void gammalims(double*, double*);double lgammacor(double);double gamma(double);double lgamma(double);void dpsifn(double, int, int, int, double*, int*, int*);double digamma(double);double trigamma(double);double tetragamma(double);double pentagamma(double);double choose(double, double);double lchoose(double, double);double fastchoose(double, double);double lfastchoose(double, double);/* Beta and Related Functions */double beta(double, double);double lbeta(double, double);/* Normal Distribution */double dnorm(double, double, double);double pnorm(double, double, double);double qnorm(double, double, double);double rnorm(double, double);/* Uniform Distribution */double dunif(double, double, double);double punif(double, double, double);double qunif(double, double, double);double runif(double, double);/* Gamma Distribution */double dgamma(double, double, double);double pgamma(double, double, double);double qgamma(double, double, double);double rgamma(double, double);/* Beta Distribution */double dbeta(double, double, double);double pbeta(double, double, double);double pbeta_raw(double, double, double);double qbeta(double, double, double);double rbeta(double, double);/* Lognormal Distribution */double dlnorm(double, double, double);double plnorm(double, double, double);double qlnorm(double, double, double);double rlnorm(double, double);/* Chi-squared Distribution */double dchisq(double, double);double pchisq(double, double);double qchisq(double, double);double rchisq(double);/* Non-central Chi-squared Distribution */double dnchisq(double, double, double);double pnchisq(double, double, double);double qnchisq(double, double, double);double rnchisq(double, double);/* F Distibution */double df(double, double, double);double pf(double, double, double);double qf(double, double, double);double rf(double, double);/* Student t Distibution */double dt(double, double);double pt(double, double);double qt(double, double);double rt(double);/* Binomial Distribution */double dbinom(double, double, double);double pbinom(double, double, double);double qbinom(double, double, double);double rbinom(double, double);/* Cauchy Distribution */double dcauchy(double, double, double);double pcauchy(double, double, double);double qcauchy(double, double, double);double rcauchy(double, double);/* Exponential Distribution */double dexp(double, double);double pexp(double, double);double qexp(double, double);double rexp(double);/* Geometric Distribution */double dgeom(double, double);double pgeom(double, double);double qgeom(double, double);double rgeom(double);/* Hypergeometric Distibution */double dhyper(double, double, double, double);double phyper(double, double, double, double);double qhyper(double, double, double, double);double rhyper(double, double, double);/* Negative Binomial Distribution */double dnbinom(double, double, double);double pnbinom(double, double, double);double qnbinom(double, double, double);double rnbinom(double, double);/* Poisson Distribution */double dpois(double, double);double ppois(double, double);double qpois(double, double);double rpois(double);/* Weibull Distribution */double dweibull(double, double, double);double pweibull(double, double, double);double qweibull(double, double, double);double rweibull(double, double);/* Logistic Distribution */double dlogis(double, double, double);double plogis(double, double, double);double qlogis(double, double, double);double rlogis(double, double);/* Non-central Beta Distribution */double dnbeta(double, double, double, double);double pnbeta(double, double, double, double);double qnbeta(double, double, double, double);double rnbeta(double, double, double);/* Non-central F Distribution */double dnf(double, double, double, double);double pnf(double, double, double, double);double qnf(double, double, double, double);double rnf(double, double, double);/* Non-central Student t Distribution */double dnt(double, double, double);double pnt(double, double, double);double qnt(double, double, double);double rnt(double, double);/* Studentized Range Distribution */double dtukey(double, double, double, double);double ptukey(double, double, double, double);double qtukey(double, double, double, double);double rtukey(double, double, double);#endif