The R Project SVN R

Rev

Rev 2 | Rev 602 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2 Rev 571
Line 1... Line -...
1
/*
-
 
2
 *  R : A Computer Langage for Statistical Data Analysis
-
 
3
 *  Copyright (C) 1995, 1996  Robert Gentleman and Ross Ihaka
-
 
4
 *
-
 
5
 *  This program is free software; you can redistribute it and/or modify
-
 
6
 *  it under the terms of the GNU General Public License as published by
-
 
7
 *  the Free Software Foundation; either version 2 of the License, or
-
 
8
 *  (at your option) any later version.
-
 
9
 *
-
 
10
 *  This program is distributed in the hope that it will be useful,
-
 
11
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-
 
12
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-
 
13
 *  GNU General Public License for more details.
-
 
14
 *
-
 
15
 *  You should have received a copy of the GNU General Public License
-
 
16
 *  along with this program; if not, write to the Free Software
-
 
17
 *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
 
18
 */
-
 
19
 
-
 
20
#ifndef MATHLIB_H_
1
#ifndef MATHLIB_H
21
#define MATHLIB_H_
2
#define MATHLIB_H
22
 
3
 
23
#include "Arith.h"
4
#include "Arith.h"
24
 
5
 
25
#ifdef Macintosh
6
#include <errno.h>
26
#include <fp.h>
7
#include <float.h>
27
double hypot(double x, double y);
8
#include <limits.h>
28
#else
-
 
29
#include <math.h>
9
#include <math.h>
30
#endif
-
 
31
 
-
 
32
/* SGI math.h conflict */
-
 
33
#undef qexp
-
 
34
 
-
 
35
#include <stdlib.h>
10
#include <stdlib.h>
36
#include <limits.h>
-
 
37
#include <float.h>
-
 
38
#include <errno.h>
-
 
39
 
11
 
40
/* 30 Decimal-place constants computed with bc  (scale=32; proper round) */
12
/* 30 Decimal-place constants computed with bc  (scale=32; proper round) */
41
 
13
 
42
#ifndef M_1_SQRT_2
14
#ifndef M_1_SQRT_2
43
#define M_1_SQRT_2	0.707106781186547524400844362105
15
#define M_1_SQRT_2      0.707106781186547524400844362105
44
#endif
16
#endif
45
 
17
 
46
#ifndef M_PI
18
#ifndef M_PI
47
#define M_PI		3.141592653589793238462643383279
19
#define M_PI            3.141592653589793238462643383279
48
#endif
20
#endif
49
 
21
 
50
#ifndef M_PI_half
22
#ifndef M_PI_half
51
#define M_PI_half	1.570796326794896619231321691640
23
#define M_PI_half       1.570796326794896619231321691640
52
#endif
24
#endif
53
 
25
 
54
#ifndef M_SQRT_PI
26
#ifndef M_SQRT_PI
55
#define M_SQRT_PI	1.772453850905516027298167483341
27
#define M_SQRT_PI       1.772453850905516027298167483341
56
#endif
28
#endif
57
 
29
 
58
#ifndef M_1_SQRT_2PI
30
#ifndef M_1_SQRT_2PI
59
#define M_1_SQRT_2PI	0.398942280401432677939946059934
31
#define M_1_SQRT_2PI    0.398942280401432677939946059934
60
#endif
32
#endif
61
 
33
 
62
/* log(sqrt(2*pi)) = log(2*pi)/2 : */
34
/* log(sqrt(2*pi)) = log(2*pi)/2 : */
63
#ifndef M_LN_SQRT_2PI
35
#ifndef M_LN_SQRT_2PI
64
#define M_LN_SQRT_2PI	0.918938533204672741780329736406
36
#define M_LN_SQRT_2PI   0.918938533204672741780329736406
-
 
37
#endif
-
 
38
 
-
 
39
#define MATHLIB_ERROR(x)   { printf("%s\n",x); exit(1); }
-
 
40
#define MATHLIB_WARNING(x) { printf("%s\n",x); }
-
 
41
 
-
 
42
#define ME_NONE		0
-
 
43
#define ME_DOMAIN	1
-
 
44
#define ME_RANGE	2
-
 
45
#define ME_NOCONV	3
-
 
46
#define ME_PRECISION	4
-
 
47
#define ME_UNDERFLOW	5
-
 
48
 
-
 
49
#undef ML_PRECISION_WARNINGS
-
 
50
 
-
 
51
#ifdef IEEE_754
-
 
52
extern double m_zero;
-
 
53
extern double m_one;
-
 
54
extern double m_tiny;
-
 
55
#define ML_ERROR(x)	/* nothing */
-
 
56
#define ML_POSINF	(m_one / m_zero)
-
 
57
#define ML_NEGINF	((-m_one) / m_zero)
-
 
58
#define ML_NAN		(m_zero / m_zero)
-
 
59
#define ML_UNDERFLOW	(m_tiny * m_tiny)
-
 
60
#define ML_VALID(x)     (!isnan(x))
-
 
61
#else
-
 
62
#define ML_ERROR(x)	ml_error(x)
-
 
63
#define ML_POSINF	DBL_MAX
-
 
64
#define ML_NEGINF	(-DBL_MAX)
-
 
65
#define ML_NAN		(-DBL_MAX)
-
 
66
#define ML_UNDERFLOW	0
-
 
67
#define ML_VALID(x)     (errno == 0)
65
#endif
68
#endif
66
 
69
 
-
 
70
	/* Splus Compatibility */
-
 
71
 
-
 
72
#define snorm	norm_rand
-
 
73
#define sunif	unif_rand
-
 
74
#define sexp	exp_rand
-
 
75
 
-
 
76
	/* Name Hiding to Avoid Clashes with Fortran */
67
 
77
 
68
#ifndef	HAVE_RINT
78
#ifdef HIDE_NAMES
69
double rint(double);
79
#define d1mach	c_d1mach
-
 
80
#define i1mach	c_i1mach
70
#endif
81
#endif
71
 
82
 
72
	/* Random Number Generation */
83
#define	rround	fround
73
 
84
#define	prec	fprec
74
extern double snorm(void);
85
#define	trunc	ftrunc
75
extern double sunif(void);
86
#define	sign	fsign
76
extern double sexp(void);
87
 
77
 
88
	/* Machine Characteristics */
78
	/* Port Constants */
89
 
79
 
90
double	d1mach(int);
80
extern int F77_SYMBOL(i1mach)(int*);
91
double	d1mach_(int*);
81
extern double F77_SYMBOL(d1mach)(int*);
92
int	i1mach(int);
82
 
93
int	i1mach_(int*);
83
	/* Fortran Compatibility */
94
 
84
 
95
	/* General Support Functions */
85
extern double fint(double);
96
 
86
extern double fmax2(double, double);
97
int	imax2(int, int);
87
extern double fmin2(double, double);
98
int	imin2(int, int);
88
extern double fmod(double, double);
99
double	fmax2(double, double);
89
extern double fsign(double, double);
100
double	fmin2(double, double);
90
extern double fsquare(double);
101
double	fmod(double, double);
91
extern double fcube(double);
102
double	fprec(double, double);
92
extern int imax2(int, int);
103
double	fround(double, double);
93
extern int imin2(int, int);
104
double	ftrunc(double);
94
 
105
double	fsign(double, double);
95
	/* Utilities */
106
double	fsquare(double);
96
 
107
double	fcube(double);
97
extern double rround(double, double);
108
 
98
extern double prec(double, double);
109
	/* Random Number Generators */
99
extern double sign(double);
110
 
100
extern double trunc(double);
111
double	snorm(void);
101
 
112
double	sunif(void);
102
 
113
double	sexp(void);
103
	/* Mathematical Special Functions */
114
 
104
 
115
	/* Chebyshev Series */
105
extern double beta(double, double);
116
 
106
extern double lbeta(double, double);
117
int	chebyshev_init(double*, int, double);
107
extern double gamma(double);
118
double	chebyshev_eval(double, double *, int);
108
extern double lgamma(double);
119
 
109
extern double lfastchoose(double, double);
120
	/* Gamma and Related Functions */
110
extern double fastchoose(double, double);
121
 
111
extern double choose(double, double);
122
double	logrelerr(double);
112
extern double lchoose(double, double);
123
void	gammalims(double*, double*);
113
extern void dpsifn(double, int, int, int, double*, int*, int*);
124
double	lgammacor(double);
114
extern double digamma(double);
125
double	gamma(double);
115
extern double trigamma(double);
126
double	lgamma(double);
116
extern double tetragamma(double);
127
void	dpsifn(double, int, int, int, double*, int*, int*);
117
extern double pentagamma(double);
128
double	digamma(double);
118
 
129
double	trigamma(double);
119
	/* Distributions */
130
double	tetragamma(double);
120
 
131
double	pentagamma(double);
121
extern double dbeta(double, double, double);
132
 
122
extern double pbeta(double, double, double);
133
double	choose(double, double);
123
extern double pbeta_b(double, double, double, double);
134
double	lchoose(double, double);
124
extern double qbeta(double, double, double);
135
double	fastchoose(double, double);
125
extern double rbeta(double, double);
136
double	lfastchoose(double, double);
126
 
137
 
127
extern double dbinom(double, double, double);
138
	/* Beta and Related Functions */
128
extern double pbinom(double, double, double);
139
 
129
extern double qbinom(double, double, double);
140
double	beta(double, double);
130
extern double rbinom(double, double);
141
double	lbeta(double, double);
131
 
142
 
132
extern double dcauchy(double, double, double);
143
	/* Normal Distribution */
133
extern double pcauchy(double, double, double);
144
 
134
extern double qcauchy(double, double, double);
145
double	dnorm(double, double, double);
135
extern double rcauchy(double, double);
146
double	pnorm(double, double, double);
136
 
147
double	qnorm(double, double, double);
137
extern double dchisq(double, double);
148
double	rnorm(double, double);
138
extern double pchisq(double, double);
149
 
139
extern double qchisq(double, double);
150
	/* Uniform Distribution */
140
extern double rchisq(double);
151
 
141
 
152
double	dunif(double, double, double);
142
extern double dexp(double, double);
153
double	punif(double, double, double);
143
extern double pexp(double, double);
154
double	qunif(double, double, double);
144
extern double qexp(double, double);
155
double	runif(double, double);
145
extern double rexp(double);
156
 
146
 
157
	/* Gamma Distribution */
147
extern double df(double, double, double);
158
 
148
extern double pf(double, double, double);
159
double	dgamma(double, double, double);
149
extern double qf(double, double, double);
160
double	pgamma(double, double, double);
150
extern double rf(double, double);
161
double	qgamma(double, double, double);
151
 
162
double	rgamma(double, double);
152
extern double dgamma(double, double, double);
163
 
153
extern double pgamma(double, double, double);
164
	/* Beta Distribution */
154
extern double qgamma(double, double, double);
165
 
155
extern double rgamma(double, double);
166
double	dbeta(double, double, double);
156
 
167
double	pbeta(double, double, double);
157
extern double dgeom(double, double);
168
double	pbeta_raw(double, double, double);
158
extern double pgeom(double, double);
169
double	qbeta(double, double, double);
159
extern double qgeom(double, double);
170
double	rbeta(double, double);
160
extern double rgeom(double);
171
 
161
 
172
	/* Lognormal Distribution */
162
extern double dhyper(double, double, double, double);
173
 
163
extern double phyper(double, double, double, double);
174
double	dlnorm(double, double, double);
164
extern double qhyper(double, double, double, double);
175
double	plnorm(double, double, double);
165
extern double rhyper(double, double, double);
176
double	qlnorm(double, double, double);
166
 
177
double	rlnorm(double, double);
167
extern double dlnorm(double, double, double);
178
 
168
extern double plnorm(double, double, double);
179
	/* Chi-squared Distribution */
169
extern double qlnorm(double, double, double);
180
 
170
extern double rlnorm(double, double);
181
double	dchisq(double, double);
171
 
182
double	pchisq(double, double);
172
extern double dlogis(double, double, double);
183
double	qchisq(double, double);
173
extern double plogis(double, double, double);
184
double	rchisq(double);
174
extern double qlogis(double, double, double);
185
 
175
extern double rlogis(double, double);
186
	/* Non-central Chi-squared Distribution */
176
 
187
 
177
extern double dnbinom(double, double, double);
188
double	pnchisq(double, double, double);
178
extern double pnbinom(double, double, double);
189
double	qnchisq(double, double, double);
179
extern double qnbinom(double, double, double);
190
 
180
extern double rnbinom(double, double);
191
	/* F Distibution */
181
 
192
 
182
extern double dnchisq(double, double, double);
193
double	df(double, double, double);
183
extern double pnchisq(double, double, double);
194
double	pf(double, double, double);
184
extern double qnchisq(double, double, double);
195
double	qf(double, double, double);
185
extern double rnchisq(double, double);
196
double	rf(double, double);
186
 
197
 
187
extern double dnorm(double, double, double);
198
	/* Student t Distibution */
188
extern double pnorm(double, double, double);
199
 
189
extern double qnorm(double, double, double);
200
double	dt(double, double);
190
extern double rnorm(double, double);
201
double	pt(double, double);
191
 
202
double	qt(double, double);
192
extern double dpois(double, double);
203
double	rt(double);
193
extern double ppois(double, double);
204
 
194
extern double qpois(double, double);
205
	/* Binomial Distribution */
195
extern double rpois(double);
206
 
196
 
207
double	dbinom(double, double, double);
197
extern double dt(double, double);
208
double	pbinom(double, double, double);
198
extern double pt(double, double);
209
double	qbinom(double, double, double);
199
extern double qt(double, double);
210
double	rbinom(double, double);
200
extern double rt(double);
211
 
201
 
212
	/* Cauchy Distribution */
202
extern double dunif(double, double, double);
213
 
203
extern double punif(double, double, double);
214
double	dcauchy(double, double, double);
204
extern double qunif(double, double, double);
215
double	pcauchy(double, double, double);
205
extern double runif(double, double);
216
double	qcauchy(double, double, double);
206
 
217
double	rcauchy(double, double);
207
extern double dweibull(double, double, double);
218
 
208
extern double pweibull(double, double, double);
219
	/* Exponential Distribution */
209
extern double qweibull(double, double, double);
220
 
210
extern double rweibull(double, double);
221
double	dexp(double, double);
-
 
222
double	pexp(double, double);
-
 
223
double	qexp(double, double);
-
 
224
double	rexp(double);
-
 
225
 
-
 
226
	/* Geometric Distribution */
-
 
227
 
-
 
228
double	dgeom(double, double);
-
 
229
double	pgeom(double, double);
-
 
230
double	qgeom(double, double);
-
 
231
double	rgeom(double);
-
 
232
 
-
 
233
	/* Hypergeometric Distibution */
-
 
234
 
-
 
235
double	dhyper(double, double, double, double);
-
 
236
double	phyper(double, double, double, double);
-
 
237
double	qhyper(double, double, double, double);
-
 
238
double	rhyper(double, double, double);
-
 
239
 
-
 
240
	/* Negative Binomial Distribution */
-
 
241
 
-
 
242
double	dnbinom(double, double, double);
-
 
243
double	pnbinom(double, double, double);
-
 
244
double	qnbinom(double, double, double);
-
 
245
double	rnbinom(double, double);
-
 
246
 
-
 
247
	/* Poisson Distribution */
-
 
248
 
-
 
249
double	dpois(double, double);
-
 
250
double	ppois(double, double);
-
 
251
double	qpois(double, double);
-
 
252
double	rpois(double);
-
 
253
 
-
 
254
	/* Weibull Distribution */
-
 
255
 
-
 
256
double	dweibull(double, double, double);
-
 
257
double	pweibull(double, double, double);
-
 
258
double	qweibull(double, double, double);
-
 
259
double	rweibull(double, double);
-
 
260
 
-
 
261
	/* Logistic Distribution */
211
 
262
 
-
 
263
double	dlogis(double, double, double);
-
 
264
double	plogis(double, double, double);
-
 
265
double	qlogis(double, double, double);
212
extern int errno;
266
double	rlogis(double, double);
213
 
267
 
214
#endif
268
#endif