The R Project SVN R

Rev

Rev 2263 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2263 Rev 2278
1
#ifndef MATHLIB_H
1
#ifndef MATHLIB_H
2
#define MATHLIB_H
2
#define MATHLIB_H
3
 
3
 
4
#include "Arith.h"
4
#include "Arith.h"
5
 
5
 
6
#include <errno.h>
6
#include <errno.h>
7
#include <float.h>
7
#include <float.h>
8
#include <limits.h>
8
#include <limits.h>
9
#include <math.h>
9
#include <math.h>
10
#include <stdlib.h>
10
#include <stdlib.h>
11
 
11
 
12
/* 30 Decimal-place constants computed with bc -l (scale=32; proper round) */
12
/* 30 Decimal-place constants computed with bc -l (scale=32; proper round) */
13
 
13
 
14
#ifndef M_SQRT_2
14
#ifndef M_SQRT_2
15
#define M_SQRT_2	1.4142135623730950488016887242097
15
#define M_SQRT_2	1.4142135623730950488016887242097
16
#define M_1_SQRT_2	0.707106781186547524400844362105	/* 1/sqrt(2) */
16
#define M_1_SQRT_2	0.707106781186547524400844362105	/* 1/sqrt(2) */
17
#define M_SQRT_32	5.656854249492380195206754896838	/* sqrt(32) */
17
#define M_SQRT_32	5.656854249492380195206754896838	/* sqrt(32) */
18
#endif
18
#endif
19
 
19
 
20
#ifndef M_LN_2
20
#ifndef M_LN_2
21
#define M_LN_2		0.693147180559945309417232121458176568
21
#define M_LN_2		0.693147180559945309417232121458176568
22
#define M_LOG10_2	0.301029995663981195213738894724493027
22
#define M_LOG10_2	0.301029995663981195213738894724493027
23
#endif
23
#endif
24
 
24
 
25
#ifndef M_PI
25
#ifndef M_PI
26
#define M_PI		3.141592653589793238462643383279502884197169399375
26
#define M_PI		3.141592653589793238462643383279502884197169399375
27
#endif
27
#endif
28
#ifndef M_PI_half
28
#ifndef M_PI_half
29
#define M_PI_half	1.570796326794896619231321691640
29
#define M_PI_half	1.570796326794896619231321691640
30
#endif
30
#endif
31
 
31
 
32
#ifndef M_SQRT_PI
32
#ifndef M_SQRT_PI
33
/* sqrt(pi),  1/sqrt(2pi),  sqrt(2/pi) : */
33
/* sqrt(pi),  1/sqrt(2pi),  sqrt(2/pi) : */
34
#define M_SQRT_PI	1.772453850905516027298167483341
34
#define M_SQRT_PI	1.772453850905516027298167483341
35
#define M_1_SQRT_2PI	0.398942280401432677939946059934
35
#define M_1_SQRT_2PI	0.398942280401432677939946059934
36
#define M_SQRT_2dPI	0.79788456080286535587989211986876
36
#define M_SQRT_2dPI	0.79788456080286535587989211986876
37
#endif
37
#endif
38
 
38
 
39
 
39
 
40
#ifndef M_LN_SQRT_PI
40
#ifndef M_LN_SQRT_PI
41
/* log(sqrt(pi)) = log(pi)/2 : */
41
/* log(sqrt(pi)) = log(pi)/2 : */
42
#define M_LN_SQRT_PI	0.5723649429247000870717136756765293558
42
#define M_LN_SQRT_PI	0.5723649429247000870717136756765293558
43
/* log(sqrt(2*pi)) = log(2*pi)/2 : */
43
/* log(sqrt(2*pi)) = log(2*pi)/2 : */
44
#define M_LN_SQRT_2PI	0.91893853320467274178032973640562
44
#define M_LN_SQRT_2PI	0.91893853320467274178032973640562
45
/* log(sqrt(pi/2)) = log(pi/2)/2 : */
45
/* log(sqrt(pi/2)) = log(pi/2)/2 : */
46
#define M_LN_SQRT_PId2	0.225791352644727432363097614947441
46
#define M_LN_SQRT_PId2	0.225791352644727432363097614947441
47
#endif
47
#endif
48
 
48
 
49
 
49
 
50
 
50
 
51
#define MATHLIB_ERROR(x)   { printf("%s\n",x); exit(1); }
51
#define MATHLIB_ERROR(x)   { printf("%s\n",x); exit(1); }
52
#define MATHLIB_WARNING(x) { printf("%s\n",x); }
52
#define MATHLIB_WARNING(x) { printf("%s\n",x); }
53
 
53
 
54
#define ME_NONE		0
54
#define ME_NONE		0
55
#define ME_DOMAIN	1
55
#define ME_DOMAIN	1
56
#define ME_RANGE	2
56
#define ME_RANGE	2
57
#define ME_NOCONV	3
57
#define ME_NOCONV	3
58
#define ME_PRECISION	4
58
#define ME_PRECISION	4
59
#define ME_UNDERFLOW	5
59
#define ME_UNDERFLOW	5
60
 
60
 
61
#undef ML_PRECISION_WARNINGS
61
#undef ML_PRECISION_WARNINGS
62
 
62
 
63
#ifdef IEEE_754
63
#ifdef IEEE_754
64
#ifdef HAVE_IEEE754_H
64
#ifdef HAVE_IEEE754_H
65
#include <ieee754.h> /* newer Linuxen */
65
#include <ieee754.h> /* newer Linuxen */
66
#else
66
#else
67
#ifdef HAVE_IEEEFP_H
67
#ifdef HAVE_IEEEFP_H
68
#include <ieeefp.h> /* others [Solaris 2.5.x], .. */
68
#include <ieeefp.h> /* others [Solaris 2.5.x], .. */
69
#endif
69
#endif
70
#endif
70
#endif
71
 
71
 
72
extern double m_zero;
72
extern double m_zero;
73
extern double m_one;
73
extern double m_one;
74
extern double m_tiny;
74
extern double m_tiny;
75
#define ML_ERROR(x)	/* nothing */
75
#define ML_ERROR(x)	/* nothing */
76
#define ML_POSINF	(m_one / m_zero)
76
#define ML_POSINF	(m_one / m_zero)
77
#define ML_NEGINF	((-m_one) / m_zero)
77
#define ML_NEGINF	((-m_one) / m_zero)
78
#define ML_NAN		(m_zero / m_zero)
78
#define ML_NAN		(m_zero / m_zero)
79
#define ML_UNDERFLOW	(m_tiny * m_tiny)
79
#define ML_UNDERFLOW	(m_tiny * m_tiny)
80
#define ML_VALID(x)	(!isnan(x))
80
#define ML_VALID(x)	(!isnan(x))
81
#else
81
#else
82
#define ML_ERROR(x)	ml_error(x)
82
#define ML_ERROR(x)	ml_error(x)
83
#define ML_POSINF	DBL_MAX
83
#define ML_POSINF	DBL_MAX
84
#define ML_NEGINF	(-DBL_MAX)
84
#define ML_NEGINF	(-DBL_MAX)
85
#define ML_NAN		(-DBL_MAX)
85
#define ML_NAN		(-DBL_MAX)
86
#define ML_UNDERFLOW	0
86
#define ML_UNDERFLOW	0
87
#define ML_VALID(x)	(errno == 0)
87
#define ML_VALID(x)	(errno == 0)
88
#endif
88
#endif
89
 
89
 
90
	/* Splus Compatibility */
90
	/* Splus Compatibility */
91
 
91
 
92
#define snorm	norm_rand
92
#define snorm	norm_rand
93
#define sunif	unif_rand
93
#define sunif	unif_rand
94
#define sexp	exp_rand
94
#define sexp	exp_rand
95
 
95
 
96
	/* Undo SGI Madness */
96
	/* Undo SGI Madness */
97
 
97
 
98
#ifdef ftrunc
98
#ifdef ftrunc
99
#undef ftrunc
99
#undef ftrunc
100
#endif
100
#endif
101
#ifdef qexp
101
#ifdef qexp
102
#undef qexp
102
#undef qexp
103
#endif
103
#endif
104
 
104
 
105
	/* Name Hiding to Avoid Clashes with Fortran */
105
	/* Name Hiding to Avoid Clashes with Fortran */
106
 
106
 
107
#ifdef HIDE_NAMES
107
#ifdef HIDE_NAMES
108
#define d1mach	c_d1mach
108
#define d1mach	c_d1mach
109
#define i1mach	c_i1mach
109
#define i1mach	c_i1mach
110
#endif
110
#endif
111
 
111
 
112
#define	rround	fround
112
#define	rround	fround
113
#define	prec	fprec
113
#define	prec	fprec
114
#define	trunc	ftrunc
114
#define	trunc	ftrunc
115
/* NO!  fsign(.) has 2 arguments;  sign(.) has 1..
115
/* NO!  fsign(.) has 2 arguments;  sign(.) has 1..
116
 #define	sign	fsign
116
 #define	sign	fsign
117
*/
117
*/
118
 
118
 
119
	/* Machine Characteristics */
119
	/* Machine Characteristics */
120
 
120
 
121
double	d1mach(int);
121
double	d1mach(int);
122
double	d1mach_(int*);
122
double	d1mach_(int*);
123
int	i1mach(int);
123
int	i1mach(int);
124
int	i1mach_(int*);
124
int	i1mach_(int*);
125
 
125
 
126
	/* General Support Functions */
126
	/* General Support Functions */
127
 
127
 
128
int	imax2(int, int);
128
int	imax2(int, int);
129
int	imin2(int, int);
129
int	imin2(int, int);
130
double	sign(double);
130
double	sign(double);
131
double	fmax2(double, double);
131
double	fmax2(double, double);
132
double	fmin2(double, double);
132
double	fmin2(double, double);
133
double	fmod(double, double);
133
double	fmod(double, double);
134
double	fprec(double, double);
134
double	fprec(double, double);
135
double	fround(double, double);
135
double	fround(double, double);
136
double	ftrunc(double);
136
double	ftrunc(double);
137
double	fsign(double, double);
137
double	fsign(double, double);
138
double	fsquare(double);
138
double	fsquare(double);
139
double	fcube(double);
139
double	fcube(double);
140
 
140
 
141
	/* Random Number Generators */
141
	/* Random Number Generators */
142
 
142
 
143
double	snorm(void);
143
double	snorm(void);
144
double	sunif(void);
144
double	sunif(void);
145
double	sexp(void);
145
double	sexp(void);
146
 
146
 
147
	/* Chebyshev Series */
147
	/* Chebyshev Series */
148
 
148
 
149
int	chebyshev_init(double*, int, double);
149
int	chebyshev_init(double*, int, double);
150
double	chebyshev_eval(double, double *, int);
150
double	chebyshev_eval(double, double *, int);
151
 
151
 
152
	/* Gamma and Related Functions */
152
	/* Gamma and Related Functions */
153
 
153
 
154
double	logrelerr(double);
154
double	logrelerr(double);
155
void	gammalims(double*, double*);
155
void	gammalims(double*, double*);
156
double	lgammacor(double);
156
double	lgammacor(double);
157
double	gamma(double);
157
double	gammafn(double);
158
double	lgamma(double);
158
double	lgammafn(double);
159
void	dpsifn(double, int, int, int, double*, int*, int*);
159
void	dpsifn(double, int, int, int, double*, int*, int*);
160
double	digamma(double);
160
double	digamma(double);
161
double	trigamma(double);
161
double	trigamma(double);
162
double	tetragamma(double);
162
double	tetragamma(double);
163
double	pentagamma(double);
163
double	pentagamma(double);
164
 
164
 
165
double	choose(double, double);
165
double	choose(double, double);
166
double	lchoose(double, double);
166
double	lchoose(double, double);
167
double	fastchoose(double, double);
167
double	fastchoose(double, double);
168
double	lfastchoose(double, double);
168
double	lfastchoose(double, double);
169
 
169
 
170
	/* Beta and Related Functions */
170
	/* Beta and Related Functions */
171
 
171
 
172
double	beta(double, double);
172
double	beta(double, double);
173
double	lbeta(double, double);
173
double	lbeta(double, double);
174
 
174
 
175
	/* Normal Distribution */
175
	/* Normal Distribution */
176
 
176
 
177
double	dnorm(double, double, double);
177
double	dnorm(double, double, double);
178
double	pnorm(double, double, double);
178
double	pnorm(double, double, double);
179
double	qnorm(double, double, double);
179
double	qnorm(double, double, double);
180
double	rnorm(double, double);
180
double	rnorm(double, double);
181
 
181
 
182
	/* Uniform Distribution */
182
	/* Uniform Distribution */
183
 
183
 
184
double	dunif(double, double, double);
184
double	dunif(double, double, double);
185
double	punif(double, double, double);
185
double	punif(double, double, double);
186
double	qunif(double, double, double);
186
double	qunif(double, double, double);
187
double	runif(double, double);
187
double	runif(double, double);
188
 
188
 
189
	/* Gamma Distribution */
189
	/* Gamma Distribution */
190
 
190
 
191
double	dgamma(double, double, double);
191
double	dgamma(double, double, double);
192
double	pgamma(double, double, double);
192
double	pgamma(double, double, double);
193
double	qgamma(double, double, double);
193
double	qgamma(double, double, double);
194
double	rgamma(double, double);
194
double	rgamma(double, double);
195
 
195
 
196
	/* Beta Distribution */
196
	/* Beta Distribution */
197
 
197
 
198
double	dbeta(double, double, double);
198
double	dbeta(double, double, double);
199
double	pbeta(double, double, double);
199
double	pbeta(double, double, double);
200
double	pbeta_raw(double, double, double);
200
double	pbeta_raw(double, double, double);
201
double	qbeta(double, double, double);
201
double	qbeta(double, double, double);
202
double	rbeta(double, double);
202
double	rbeta(double, double);
203
 
203
 
204
	/* Lognormal Distribution */
204
	/* Lognormal Distribution */
205
 
205
 
206
double	dlnorm(double, double, double);
206
double	dlnorm(double, double, double);
207
double	plnorm(double, double, double);
207
double	plnorm(double, double, double);
208
double	qlnorm(double, double, double);
208
double	qlnorm(double, double, double);
209
double	rlnorm(double, double);
209
double	rlnorm(double, double);
210
 
210
 
211
	/* Chi-squared Distribution */
211
	/* Chi-squared Distribution */
212
 
212
 
213
double	dchisq(double, double);
213
double	dchisq(double, double);
214
double	pchisq(double, double);
214
double	pchisq(double, double);
215
double	qchisq(double, double);
215
double	qchisq(double, double);
216
double	rchisq(double);
216
double	rchisq(double);
217
 
217
 
218
	/* Non-central Chi-squared Distribution */
218
	/* Non-central Chi-squared Distribution */
219
 
219
 
220
double	dnchisq(double, double, double);
220
double	dnchisq(double, double, double);
221
double	pnchisq(double, double, double);
221
double	pnchisq(double, double, double);
222
double	qnchisq(double, double, double);
222
double	qnchisq(double, double, double);
223
double	rnchisq(double, double);
223
double	rnchisq(double, double);
224
 
224
 
225
	/* F Distibution */
225
	/* F Distibution */
226
 
226
 
227
double	df(double, double, double);
227
double	df(double, double, double);
228
double	pf(double, double, double);
228
double	pf(double, double, double);
229
double	qf(double, double, double);
229
double	qf(double, double, double);
230
double	rf(double, double);
230
double	rf(double, double);
231
 
231
 
232
	/* Student t Distibution */
232
	/* Student t Distibution */
233
 
233
 
234
double	dt(double, double);
234
double	dt(double, double);
235
double	pt(double, double);
235
double	pt(double, double);
236
double	qt(double, double);
236
double	qt(double, double);
237
double	rt(double);
237
double	rt(double);
238
 
238
 
239
	/* Binomial Distribution */
239
	/* Binomial Distribution */
240
 
240
 
241
double	dbinom(double, double, double);
241
double	dbinom(double, double, double);
242
double	pbinom(double, double, double);
242
double	pbinom(double, double, double);
243
double	qbinom(double, double, double);
243
double	qbinom(double, double, double);
244
double	rbinom(double, double);
244
double	rbinom(double, double);
245
 
245
 
246
	/* Cauchy Distribution */
246
	/* Cauchy Distribution */
247
 
247
 
248
double	dcauchy(double, double, double);
248
double	dcauchy(double, double, double);
249
double	pcauchy(double, double, double);
249
double	pcauchy(double, double, double);
250
double	qcauchy(double, double, double);
250
double	qcauchy(double, double, double);
251
double	rcauchy(double, double);
251
double	rcauchy(double, double);
252
 
252
 
253
	/* Exponential Distribution */
253
	/* Exponential Distribution */
254
 
254
 
255
double	dexp(double, double);
255
double	dexp(double, double);
256
double	pexp(double, double);
256
double	pexp(double, double);
257
double	qexp(double, double);
257
double	qexp(double, double);
258
double	rexp(double);
258
double	rexp(double);
259
 
259
 
260
	/* Geometric Distribution */
260
	/* Geometric Distribution */
261
 
261
 
262
double	dgeom(double, double);
262
double	dgeom(double, double);
263
double	pgeom(double, double);
263
double	pgeom(double, double);
264
double	qgeom(double, double);
264
double	qgeom(double, double);
265
double	rgeom(double);
265
double	rgeom(double);
266
 
266
 
267
	/* Hypergeometric Distibution */
267
	/* Hypergeometric Distibution */
268
 
268
 
269
double	dhyper(double, double, double, double);
269
double	dhyper(double, double, double, double);
270
double	phyper(double, double, double, double);
270
double	phyper(double, double, double, double);
271
double	qhyper(double, double, double, double);
271
double	qhyper(double, double, double, double);
272
double	rhyper(double, double, double);
272
double	rhyper(double, double, double);
273
 
273
 
274
	/* Negative Binomial Distribution */
274
	/* Negative Binomial Distribution */
275
 
275
 
276
double	dnbinom(double, double, double);
276
double	dnbinom(double, double, double);
277
double	pnbinom(double, double, double);
277
double	pnbinom(double, double, double);
278
double	qnbinom(double, double, double);
278
double	qnbinom(double, double, double);
279
double	rnbinom(double, double);
279
double	rnbinom(double, double);
280
 
280
 
281
	/* Poisson Distribution */
281
	/* Poisson Distribution */
282
 
282
 
283
double	dpois(double, double);
283
double	dpois(double, double);
284
double	ppois(double, double);
284
double	ppois(double, double);
285
double	qpois(double, double);
285
double	qpois(double, double);
286
double	rpois(double);
286
double	rpois(double);
287
 
287
 
288
	/* Weibull Distribution */
288
	/* Weibull Distribution */
289
 
289
 
290
double	dweibull(double, double, double);
290
double	dweibull(double, double, double);
291
double	pweibull(double, double, double);
291
double	pweibull(double, double, double);
292
double	qweibull(double, double, double);
292
double	qweibull(double, double, double);
293
double	rweibull(double, double);
293
double	rweibull(double, double);
294
 
294
 
295
	/* Logistic Distribution */
295
	/* Logistic Distribution */
296
 
296
 
297
double	dlogis(double, double, double);
297
double	dlogis(double, double, double);
298
double	plogis(double, double, double);
298
double	plogis(double, double, double);
299
double	qlogis(double, double, double);
299
double	qlogis(double, double, double);
300
double	rlogis(double, double);
300
double	rlogis(double, double);
301
 
301
 
302
	/* Non-central Beta Distribution */
302
	/* Non-central Beta Distribution */
303
 
303
 
304
double	dnbeta(double, double, double, double);
304
double	dnbeta(double, double, double, double);
305
double	pnbeta(double, double, double, double);
305
double	pnbeta(double, double, double, double);
306
double	qnbeta(double, double, double, double);
306
double	qnbeta(double, double, double, double);
307
double	rnbeta(double, double, double);
307
double	rnbeta(double, double, double);
308
 
308
 
309
	/* Non-central F Distribution */
309
	/* Non-central F Distribution */
310
 
310
 
311
double	dnf(double, double, double, double);
311
double	dnf(double, double, double, double);
312
double	pnf(double, double, double, double);
312
double	pnf(double, double, double, double);
313
double	qnf(double, double, double, double);
313
double	qnf(double, double, double, double);
314
double	rnf(double, double, double);
314
double	rnf(double, double, double);
315
 
315
 
316
	/* Non-central Student t Distribution */
316
	/* Non-central Student t Distribution */
317
 
317
 
318
double	dnt(double, double, double);
318
double	dnt(double, double, double);
319
double	pnt(double, double, double);
319
double	pnt(double, double, double);
320
double	qnt(double, double, double);
320
double	qnt(double, double, double);
321
double	rnt(double, double);
321
double	rnt(double, double);
322
 
322
 
323
	/* Studentized Range Distribution */
323
	/* Studentized Range Distribution */
324
 
324
 
325
double	dtukey(double, double, double, double);
325
double	dtukey(double, double, double, double);
326
double	ptukey(double, double, double, double);
326
double	ptukey(double, double, double, double);
327
double	qtukey(double, double, double, double);
327
double	qtukey(double, double, double, double);
328
double	rtukey(double, double, double);
328
double	rtukey(double, double, double);
329
 
329
 
330
/* Wilcoxon Rank Sum Distribution */
330
/* Wilcoxon Rank Sum Distribution */
331
 
331
 
332
#define WILCOX_MMAX 50
332
#define WILCOX_MMAX 50
333
#define WILCOX_NMAX 50
333
#define WILCOX_NMAX 50
334
double dwilcox(double, double, double);
334
double dwilcox(double, double, double);
335
double pwilcox(double, double, double);
335
double pwilcox(double, double, double);
336
double qwilcox(double, double, double);
336
double qwilcox(double, double, double);
337
double rwilcox(double, double);
337
double rwilcox(double, double);
338
 
338
 
339
/* Wilcoxon Signed Rank Distribution */
339
/* Wilcoxon Signed Rank Distribution */
340
 
340
 
341
#define SIGNRANK_NMAX 50
341
#define SIGNRANK_NMAX 50
342
double dsignrank(double, double);
342
double dsignrank(double, double);
343
double psignrank(double, double);
343
double psignrank(double, double);
344
double qsignrank(double, double);
344
double qsignrank(double, double);
345
double rsignrank(double);
345
double rsignrank(double);
346
 
346
 
347
#endif
347
#endif