| 3279 |
pd |
1 |
/*
|
|
|
2 |
* Mathlib : A C Library of Special Functions
|
| 5458 |
ripley |
3 |
* Copyright (C) 1998-1999 R Development Core Team
|
| 3279 |
pd |
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
|
| 5458 |
ripley |
17 |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
| 3279 |
pd |
18 |
*
|
|
|
19 |
|
|
|
20 |
* Mathlib.h should contain ALL headers from R's C code in `src/nmath'
|
|
|
21 |
--------- such that ``the Math library'' can be used by simply
|
|
|
22 |
|
|
|
23 |
``#include "Mathlib.h" ''
|
|
|
24 |
|
|
|
25 |
and nothing else.
|
|
|
26 |
*/
|
| 571 |
ihaka |
27 |
#ifndef MATHLIB_H
|
|
|
28 |
#define MATHLIB_H
|
| 2 |
r |
29 |
|
| 3279 |
pd |
30 |
/*-- Mathlib as part of R -- undefine this for standalone : */
|
|
|
31 |
#define MATHLIB_IN_R
|
| 3076 |
pd |
32 |
|
| 7003 |
ripley |
33 |
#include "Rconfig.h" /* for IEEE_754 etc */
|
|
|
34 |
#include "R_ext/Arith.h"
|
|
|
35 |
/*#include "R_ext/Random.h"*/
|
| 2 |
r |
36 |
|
| 2629 |
maechler |
37 |
#ifdef FORTRAN_H
|
|
|
38 |
#error __MUST__include "Mathlib.h" _before_ "Fortran.h"
|
|
|
39 |
#endif
|
|
|
40 |
|
| 571 |
ihaka |
41 |
#include <errno.h>
|
| 2737 |
hornik |
42 |
#include <limits.h>
|
| 571 |
ihaka |
43 |
#include <float.h>
|
| 2 |
r |
44 |
#include <math.h>
|
|
|
45 |
#include <stdlib.h>
|
|
|
46 |
|
| 2629 |
maechler |
47 |
/* TRUE and FALSE conflict with the Mac --- Fortran.h still defines them... */
|
|
|
48 |
#define LTRUE (1)
|
|
|
49 |
#define LFALSE (0)
|
|
|
50 |
|
| 3244 |
ihaka |
51 |
/* 30 Decimal-place constants */
|
|
|
52 |
/* Computed with bc -l (scale=32; proper round) */
|
| 2 |
r |
53 |
|
| 3244 |
ihaka |
54 |
/* SVID & X/Open Constants */
|
|
|
55 |
/* Names from Solaris math.h */
|
|
|
56 |
|
|
|
57 |
#ifndef M_E
|
|
|
58 |
#define M_E 2.718281828459045235360287471353 /* e */
|
|
|
59 |
#endif
|
|
|
60 |
|
|
|
61 |
#ifndef M_LOG2E
|
|
|
62 |
#define M_LOG2E 1.442695040888963407359924681002 /* log2(e) */
|
|
|
63 |
#endif
|
|
|
64 |
|
|
|
65 |
#ifndef M_LOG10E
|
| 4835 |
maechler |
66 |
#define M_LOG10E 0.434294481903251827651128918917 /* log10(e) */
|
| 3244 |
ihaka |
67 |
#endif
|
|
|
68 |
|
|
|
69 |
#ifndef M_LN2
|
|
|
70 |
#define M_LN2 0.693147180559945309417232121458 /* ln(2) */
|
|
|
71 |
#endif
|
|
|
72 |
|
|
|
73 |
#ifndef M_LN10
|
|
|
74 |
#define M_LN10 2.302585092994045684017991454684 /* ln(10) */
|
|
|
75 |
#endif
|
|
|
76 |
|
|
|
77 |
#ifndef M_PI
|
| 4835 |
maechler |
78 |
#define M_PI 3.141592653589793238462643383280 /* pi */
|
| 3244 |
ihaka |
79 |
#endif
|
|
|
80 |
|
|
|
81 |
#ifndef M_PI_2
|
|
|
82 |
#define M_PI_2 1.570796326794896619231321691640 /* pi/2 */
|
|
|
83 |
#endif
|
|
|
84 |
|
|
|
85 |
#ifndef M_PI_4
|
|
|
86 |
#define M_PI_4 0.785398163397448309615660845820 /* pi/4 */
|
|
|
87 |
#endif
|
|
|
88 |
|
| 4835 |
maechler |
89 |
#ifndef M_1_PI
|
| 3244 |
ihaka |
90 |
#define M_1_PI 0.318309886183790671537767526745 /* 1/pi */
|
|
|
91 |
#endif
|
|
|
92 |
|
| 4835 |
maechler |
93 |
#ifndef M_2_PI
|
| 3244 |
ihaka |
94 |
#define M_2_PI 0.636619772367581343075535053490 /* 1/pi */
|
|
|
95 |
#endif
|
|
|
96 |
|
|
|
97 |
#ifndef M_2_SQRTPI
|
|
|
98 |
#define M_2_SQRTPI 1.128379167095512573896158903122 /* 1/sqrt(pi) */
|
|
|
99 |
#endif
|
|
|
100 |
|
|
|
101 |
#ifndef M_SQRT2
|
|
|
102 |
#define M_SQRT2 1.414213562373095048801688724210 /* sqrt(2) */
|
|
|
103 |
#endif
|
|
|
104 |
|
|
|
105 |
#ifndef M_SQRT1_2
|
|
|
106 |
#define M_SQRT1_2 0.707106781186547524400844362105 /* 1/sqrt(2) */
|
|
|
107 |
#endif
|
|
|
108 |
|
|
|
109 |
/* Other, R-Specific Constants */
|
|
|
110 |
/* Note there are some repeats of values above */
|
|
|
111 |
/* Needs a cleanup */
|
|
|
112 |
|
|
|
113 |
#ifndef M_1_SQRT_2
|
| 777 |
maechler |
114 |
#define M_1_SQRT_2 0.707106781186547524400844362105 /* 1/sqrt(2) */
|
| 3244 |
ihaka |
115 |
#endif
|
|
|
116 |
|
|
|
117 |
#ifndef M_SQRT_32
|
| 777 |
maechler |
118 |
#define M_SQRT_32 5.656854249492380195206754896838 /* sqrt(32) */
|
| 2 |
r |
119 |
#endif
|
|
|
120 |
|
| 3244 |
ihaka |
121 |
#ifndef M_LOG10_2
|
|
|
122 |
#define M_LOG10_2 0.301029995663981195213738894724 /* log10(2) */
|
| 777 |
maechler |
123 |
#endif
|
|
|
124 |
|
| 2 |
r |
125 |
#ifndef M_PI_half
|
| 3244 |
ihaka |
126 |
#define M_PI_half 1.570796326794896619231321691640 /* pi/2 */
|
| 2 |
r |
127 |
#endif
|
|
|
128 |
|
|
|
129 |
#ifndef M_SQRT_PI
|
| 3244 |
ihaka |
130 |
#define M_SQRT_PI 1.772453850905516027298167483341 /* sqrt(pi) */
|
| 2 |
r |
131 |
#endif
|
|
|
132 |
|
| 3244 |
ihaka |
133 |
#ifndef M_1_SQRT_2PI
|
|
|
134 |
#define M_1_SQRT_2PI 0.398942280401432677939946059934 /* 1/sqrt(2pi) */
|
|
|
135 |
#endif
|
| 2 |
r |
136 |
|
| 3244 |
ihaka |
137 |
#ifndef M_SQRT_2dPI
|
|
|
138 |
#define M_SQRT_2dPI 0.797884560802865355879892119869 /* sqrt(2/pi) */
|
|
|
139 |
#endif
|
|
|
140 |
|
|
|
141 |
|
| 777 |
maechler |
142 |
#ifndef M_LN_SQRT_PI
|
| 3244 |
ihaka |
143 |
#define M_LN_SQRT_PI 0.572364942924700087071713675677 /* log(sqrt(pi)) */
|
| 2 |
r |
144 |
#endif
|
|
|
145 |
|
| 3244 |
ihaka |
146 |
#ifndef M_LN_SQRT_2PI
|
|
|
147 |
#define M_LN_SQRT_2PI 0.918938533204672741780329736406 /* log(sqrt(2*pi)) */
|
|
|
148 |
#endif
|
| 777 |
maechler |
149 |
|
| 3244 |
ihaka |
150 |
#ifndef M_LN_SQRT_PId2
|
|
|
151 |
#define M_LN_SQRT_PId2 0.225791352644727432363097614947 /* log(sqrt(pi/2)) */
|
|
|
152 |
#endif
|
|
|
153 |
|
|
|
154 |
|
| 3076 |
pd |
155 |
#ifdef MATHLIB_IN_R/* Mathlib in R */
|
| 777 |
maechler |
156 |
|
| 7007 |
ripley |
157 |
#include "R_ext/Error.h"
|
| 3076 |
pd |
158 |
# define MATHLIB_ERROR(fmt,x) error(fmt,x);
|
|
|
159 |
# define MATHLIB_WARNING(fmt,x) warning(fmt,x)
|
|
|
160 |
# define MATHLIB_WARNING2(fmt,x,x2) warning(fmt,x,x2)
|
|
|
161 |
# define MATHLIB_WARNING3(fmt,x,x2,x3) warning(fmt,x,x2,x3)
|
|
|
162 |
# define MATHLIB_WARNING4(fmt,x,x2,x3,x4) warning(fmt,x,x2,x3,x4)
|
| 2 |
r |
163 |
|
| 3076 |
pd |
164 |
#else/* Mathlib standalone */
|
|
|
165 |
|
|
|
166 |
#include <stdio.h>
|
| 3786 |
pd |
167 |
# define MATHLIB_ERROR(fmt,x) { printf(fmt,x); exit(1) }
|
| 3076 |
pd |
168 |
# define MATHLIB_WARNING(fmt,x) printf(fmt,x)
|
|
|
169 |
# define MATHLIB_WARNING2(fmt,x,x2) printf(fmt,x,x2)
|
|
|
170 |
# define MATHLIB_WARNING3(fmt,x,x2,x3) printf(fmt,x,x2,x3)
|
|
|
171 |
# define MATHLIB_WARNING4(fmt,x,x2,x3,x4) printf(fmt,x,x2,x3,x4)
|
|
|
172 |
#endif
|
|
|
173 |
|
| 571 |
ihaka |
174 |
#define ME_NONE 0
|
| 3786 |
pd |
175 |
/* no error */
|
| 571 |
ihaka |
176 |
#define ME_DOMAIN 1
|
| 3786 |
pd |
177 |
/* argument out of domain */
|
| 571 |
ihaka |
178 |
#define ME_RANGE 2
|
| 3786 |
pd |
179 |
/* value out of range */
|
|
|
180 |
#define ME_NOCONV 4
|
|
|
181 |
/* process did not converge */
|
|
|
182 |
#define ME_PRECISION 8
|
|
|
183 |
/* does not have "full" precision */
|
|
|
184 |
#define ME_UNDERFLOW 16
|
|
|
185 |
/* and underflow occured (important for IEEE)*/
|
| 571 |
ihaka |
186 |
|
|
|
187 |
|
|
|
188 |
#ifdef IEEE_754
|
| 3786 |
pd |
189 |
|
| 3609 |
pd |
190 |
# ifdef HAVE_IEEE754_H
|
|
|
191 |
# include <ieee754.h> /* newer Linuxen */
|
|
|
192 |
# else
|
|
|
193 |
# ifdef HAVE_IEEEFP_H
|
|
|
194 |
# include <ieeefp.h> /* others [Solaris 2.5.x], .. */
|
|
|
195 |
# endif
|
|
|
196 |
# endif
|
| 995 |
ihaka |
197 |
|
| 571 |
ihaka |
198 |
extern double m_zero;
|
|
|
199 |
extern double m_one;
|
| 3548 |
ihaka |
200 |
/* extern double m_tiny; */
|
| 571 |
ihaka |
201 |
#define ML_ERROR(x) /* nothing */
|
|
|
202 |
#define ML_POSINF (m_one / m_zero)
|
|
|
203 |
#define ML_NEGINF ((-m_one) / m_zero)
|
|
|
204 |
#define ML_NAN (m_zero / m_zero)
|
| 3548 |
ihaka |
205 |
#define ML_UNDERFLOW (DBL_MIN * DBL_MIN)
|
| 777 |
maechler |
206 |
#define ML_VALID(x) (!isnan(x))
|
| 3609 |
pd |
207 |
|
|
|
208 |
#else/*--- NO IEEE: No +/-Inf, NAN,... ---*/
|
| 7016 |
ripley |
209 |
void ml_error(int n);
|
| 571 |
ihaka |
210 |
#define ML_ERROR(x) ml_error(x)
|
|
|
211 |
#define ML_POSINF DBL_MAX
|
|
|
212 |
#define ML_NEGINF (-DBL_MAX)
|
|
|
213 |
#define ML_NAN (-DBL_MAX)
|
|
|
214 |
#define ML_UNDERFLOW 0
|
| 777 |
maechler |
215 |
#define ML_VALID(x) (errno == 0)
|
| 2 |
r |
216 |
#endif
|
|
|
217 |
|
| 571 |
ihaka |
218 |
/* Splus Compatibility */
|
| 2 |
r |
219 |
|
| 571 |
ihaka |
220 |
#define snorm norm_rand
|
|
|
221 |
#define sunif unif_rand
|
|
|
222 |
#define sexp exp_rand
|
| 2 |
r |
223 |
|
| 1394 |
ihaka |
224 |
/* Undo SGI Madness */
|
|
|
225 |
|
|
|
226 |
#ifdef ftrunc
|
| 5408 |
hornik |
227 |
# undef ftrunc
|
| 1394 |
ihaka |
228 |
#endif
|
|
|
229 |
#ifdef qexp
|
| 5408 |
hornik |
230 |
# undef qexp
|
| 1394 |
ihaka |
231 |
#endif
|
| 5408 |
hornik |
232 |
#ifdef qgamma
|
|
|
233 |
# undef qgamma
|
|
|
234 |
#endif
|
| 1394 |
ihaka |
235 |
|
| 571 |
ihaka |
236 |
/* Name Hiding to Avoid Clashes with Fortran */
|
| 2 |
r |
237 |
|
| 571 |
ihaka |
238 |
#ifdef HIDE_NAMES
|
| 3076 |
pd |
239 |
# define d1mach c_d1mach
|
|
|
240 |
# define i1mach c_i1mach
|
| 571 |
ihaka |
241 |
#endif
|
| 2 |
r |
242 |
|
| 571 |
ihaka |
243 |
#define rround fround
|
|
|
244 |
#define prec fprec
|
| 3244 |
ihaka |
245 |
#undef trunc
|
| 571 |
ihaka |
246 |
#define trunc ftrunc
|
| 2 |
r |
247 |
|
| 4835 |
maechler |
248 |
|
|
|
249 |
/* Utilities for `dpq' handling (density/probability/quantile) */
|
|
|
250 |
|
|
|
251 |
#define R_D__0 (give_log ? ML_NEGINF : 0.)
|
|
|
252 |
#define R_D__1 (give_log ? 0. : 1.)
|
|
|
253 |
#define R_DT_0 (lower_tail ? R_D__0 : R_D__1)
|
|
|
254 |
#define R_DT_1 (lower_tail ? R_D__1 : R_D__0)
|
|
|
255 |
|
|
|
256 |
#define R_D_val(x) (give_log ? log(x) : x) /* x */
|
|
|
257 |
#define R_D_log(x) (give_log ? x : exp(x)) /* log(x) */
|
|
|
258 |
|
|
|
259 |
#define R_DT_val(x) R_D_val(lower_tail ? x : 1. - x) /* x */
|
|
|
260 |
#define R_DT_Cval(x) R_D_val(lower_tail ? 1. - x : x) /* 1 - x */
|
|
|
261 |
#define R_DT_log(x) R_D_log(lower_tail ? x : 1. - x) /* log(x) */
|
|
|
262 |
#define R_DT_Clog(x) R_D_log(lower_tail ? 1. - x : x) /* log(1 - x) */
|
|
|
263 |
|
|
|
264 |
#define R_D_give_log(dd) (((int)dd) >> 1) /* Extract ``give_log'' flag */
|
|
|
265 |
#define R_D_lower_tail(dd) (((int)dd) % 2) /* Extract ``lower_tail'' flag */
|
|
|
266 |
|
|
|
267 |
/* R's version of C functions: */
|
|
|
268 |
|
|
|
269 |
double R_log(double x);
|
|
|
270 |
double R_pow(double x, double y);
|
|
|
271 |
|
| 571 |
ihaka |
272 |
/* Machine Characteristics */
|
| 2 |
r |
273 |
|
| 571 |
ihaka |
274 |
double d1mach(int);
|
|
|
275 |
double d1mach_(int*);
|
|
|
276 |
int i1mach(int);
|
|
|
277 |
int i1mach_(int*);
|
| 2 |
r |
278 |
|
| 571 |
ihaka |
279 |
/* General Support Functions */
|
| 2 |
r |
280 |
|
| 571 |
ihaka |
281 |
int imax2(int, int);
|
|
|
282 |
int imin2(int, int);
|
|
|
283 |
double fmax2(double, double);
|
|
|
284 |
double fmin2(double, double);
|
|
|
285 |
double fmod(double, double);
|
|
|
286 |
double fprec(double, double);
|
|
|
287 |
double fround(double, double);
|
|
|
288 |
double ftrunc(double);
|
| 3076 |
pd |
289 |
double sign(double);
|
| 571 |
ihaka |
290 |
double fsign(double, double);
|
|
|
291 |
double fsquare(double);
|
|
|
292 |
double fcube(double);
|
| 2 |
r |
293 |
|
| 571 |
ihaka |
294 |
/* Random Number Generators */
|
| 2 |
r |
295 |
|
| 571 |
ihaka |
296 |
double snorm(void);
|
|
|
297 |
double sunif(void);
|
|
|
298 |
double sexp(void);
|
| 2 |
r |
299 |
|
| 571 |
ihaka |
300 |
/* Chebyshev Series */
|
| 2 |
r |
301 |
|
| 571 |
ihaka |
302 |
int chebyshev_init(double*, int, double);
|
|
|
303 |
double chebyshev_eval(double, double *, int);
|
| 2 |
r |
304 |
|
| 571 |
ihaka |
305 |
/* Gamma and Related Functions */
|
| 2 |
r |
306 |
|
| 571 |
ihaka |
307 |
double logrelerr(double);
|
|
|
308 |
void gammalims(double*, double*);
|
|
|
309 |
double lgammacor(double);
|
| 2278 |
maechler |
310 |
double gammafn(double);
|
| 2629 |
maechler |
311 |
double gamma_cody(double);
|
| 2278 |
maechler |
312 |
double lgammafn(double);
|
| 571 |
ihaka |
313 |
void dpsifn(double, int, int, int, double*, int*, int*);
|
|
|
314 |
double digamma(double);
|
|
|
315 |
double trigamma(double);
|
|
|
316 |
double tetragamma(double);
|
|
|
317 |
double pentagamma(double);
|
| 2 |
r |
318 |
|
| 571 |
ihaka |
319 |
double choose(double, double);
|
|
|
320 |
double lchoose(double, double);
|
|
|
321 |
double fastchoose(double, double);
|
|
|
322 |
double lfastchoose(double, double);
|
| 2 |
r |
323 |
|
| 2629 |
maechler |
324 |
/* Bessel Functions of All Kinds */
|
|
|
325 |
|
| 3786 |
pd |
326 |
double bessel_i(double, double, double);
|
|
|
327 |
double bessel_j(double, double);
|
|
|
328 |
double bessel_k(double, double, double);
|
|
|
329 |
double bessel_y(double, double);
|
|
|
330 |
void I_bessel(double*, double*, long*, long*, double*, long*);
|
|
|
331 |
void J_bessel(double*, double*, long*, double*, long*);
|
|
|
332 |
void K_bessel(double*, double*, long*, long*, double*, long*);
|
|
|
333 |
void Y_bessel(double*, double*, long*, double*, long*);
|
| 2629 |
maechler |
334 |
|
| 571 |
ihaka |
335 |
/* Beta and Related Functions */
|
| 2 |
r |
336 |
|
| 571 |
ihaka |
337 |
double beta(double, double);
|
|
|
338 |
double lbeta(double, double);
|
| 2 |
r |
339 |
|
| 571 |
ihaka |
340 |
/* Normal Distribution */
|
| 2 |
r |
341 |
|
| 571 |
ihaka |
342 |
double dnorm(double, double, double);
|
|
|
343 |
double pnorm(double, double, double);
|
|
|
344 |
double qnorm(double, double, double);
|
|
|
345 |
double rnorm(double, double);
|
| 2 |
r |
346 |
|
| 571 |
ihaka |
347 |
/* Uniform Distribution */
|
| 2 |
r |
348 |
|
| 571 |
ihaka |
349 |
double dunif(double, double, double);
|
|
|
350 |
double punif(double, double, double);
|
|
|
351 |
double qunif(double, double, double);
|
|
|
352 |
double runif(double, double);
|
| 2 |
r |
353 |
|
| 571 |
ihaka |
354 |
/* Gamma Distribution */
|
| 2 |
r |
355 |
|
| 571 |
ihaka |
356 |
double dgamma(double, double, double);
|
|
|
357 |
double pgamma(double, double, double);
|
|
|
358 |
double qgamma(double, double, double);
|
|
|
359 |
double rgamma(double, double);
|
| 2 |
r |
360 |
|
| 571 |
ihaka |
361 |
/* Beta Distribution */
|
| 2 |
r |
362 |
|
| 571 |
ihaka |
363 |
double dbeta(double, double, double);
|
|
|
364 |
double pbeta(double, double, double);
|
|
|
365 |
double pbeta_raw(double, double, double);
|
|
|
366 |
double qbeta(double, double, double);
|
|
|
367 |
double rbeta(double, double);
|
| 2 |
r |
368 |
|
| 571 |
ihaka |
369 |
/* Lognormal Distribution */
|
| 2 |
r |
370 |
|
| 571 |
ihaka |
371 |
double dlnorm(double, double, double);
|
|
|
372 |
double plnorm(double, double, double);
|
|
|
373 |
double qlnorm(double, double, double);
|
|
|
374 |
double rlnorm(double, double);
|
| 2 |
r |
375 |
|
| 571 |
ihaka |
376 |
/* Chi-squared Distribution */
|
| 2 |
r |
377 |
|
| 571 |
ihaka |
378 |
double dchisq(double, double);
|
|
|
379 |
double pchisq(double, double);
|
|
|
380 |
double qchisq(double, double);
|
|
|
381 |
double rchisq(double);
|
| 2 |
r |
382 |
|
| 571 |
ihaka |
383 |
/* Non-central Chi-squared Distribution */
|
| 2 |
r |
384 |
|
| 605 |
ihaka |
385 |
double dnchisq(double, double, double);
|
| 571 |
ihaka |
386 |
double pnchisq(double, double, double);
|
|
|
387 |
double qnchisq(double, double, double);
|
| 605 |
ihaka |
388 |
double rnchisq(double, double);
|
| 571 |
ihaka |
389 |
|
|
|
390 |
/* F Distibution */
|
|
|
391 |
|
|
|
392 |
double df(double, double, double);
|
|
|
393 |
double pf(double, double, double);
|
|
|
394 |
double qf(double, double, double);
|
|
|
395 |
double rf(double, double);
|
|
|
396 |
|
|
|
397 |
/* Student t Distibution */
|
|
|
398 |
|
|
|
399 |
double dt(double, double);
|
|
|
400 |
double pt(double, double);
|
|
|
401 |
double qt(double, double);
|
|
|
402 |
double rt(double);
|
|
|
403 |
|
|
|
404 |
/* Binomial Distribution */
|
|
|
405 |
|
|
|
406 |
double dbinom(double, double, double);
|
|
|
407 |
double pbinom(double, double, double);
|
|
|
408 |
double qbinom(double, double, double);
|
|
|
409 |
double rbinom(double, double);
|
|
|
410 |
|
|
|
411 |
/* Cauchy Distribution */
|
|
|
412 |
|
|
|
413 |
double dcauchy(double, double, double);
|
|
|
414 |
double pcauchy(double, double, double);
|
|
|
415 |
double qcauchy(double, double, double);
|
|
|
416 |
double rcauchy(double, double);
|
|
|
417 |
|
|
|
418 |
/* Exponential Distribution */
|
|
|
419 |
|
|
|
420 |
double dexp(double, double);
|
|
|
421 |
double pexp(double, double);
|
|
|
422 |
double qexp(double, double);
|
|
|
423 |
double rexp(double);
|
|
|
424 |
|
|
|
425 |
/* Geometric Distribution */
|
|
|
426 |
|
|
|
427 |
double dgeom(double, double);
|
|
|
428 |
double pgeom(double, double);
|
|
|
429 |
double qgeom(double, double);
|
|
|
430 |
double rgeom(double);
|
|
|
431 |
|
|
|
432 |
/* Hypergeometric Distibution */
|
|
|
433 |
|
|
|
434 |
double dhyper(double, double, double, double);
|
|
|
435 |
double phyper(double, double, double, double);
|
|
|
436 |
double qhyper(double, double, double, double);
|
|
|
437 |
double rhyper(double, double, double);
|
|
|
438 |
|
|
|
439 |
/* Negative Binomial Distribution */
|
|
|
440 |
|
|
|
441 |
double dnbinom(double, double, double);
|
|
|
442 |
double pnbinom(double, double, double);
|
|
|
443 |
double qnbinom(double, double, double);
|
|
|
444 |
double rnbinom(double, double);
|
|
|
445 |
|
|
|
446 |
/* Poisson Distribution */
|
|
|
447 |
|
|
|
448 |
double dpois(double, double);
|
|
|
449 |
double ppois(double, double);
|
|
|
450 |
double qpois(double, double);
|
|
|
451 |
double rpois(double);
|
|
|
452 |
|
|
|
453 |
/* Weibull Distribution */
|
|
|
454 |
|
|
|
455 |
double dweibull(double, double, double);
|
|
|
456 |
double pweibull(double, double, double);
|
|
|
457 |
double qweibull(double, double, double);
|
|
|
458 |
double rweibull(double, double);
|
|
|
459 |
|
|
|
460 |
/* Logistic Distribution */
|
|
|
461 |
|
|
|
462 |
double dlogis(double, double, double);
|
|
|
463 |
double plogis(double, double, double);
|
|
|
464 |
double qlogis(double, double, double);
|
|
|
465 |
double rlogis(double, double);
|
|
|
466 |
|
| 602 |
ihaka |
467 |
/* Non-central Beta Distribution */
|
|
|
468 |
|
|
|
469 |
double dnbeta(double, double, double, double);
|
|
|
470 |
double pnbeta(double, double, double, double);
|
|
|
471 |
double qnbeta(double, double, double, double);
|
|
|
472 |
double rnbeta(double, double, double);
|
|
|
473 |
|
|
|
474 |
/* Non-central F Distribution */
|
|
|
475 |
|
|
|
476 |
double dnf(double, double, double, double);
|
|
|
477 |
double pnf(double, double, double, double);
|
|
|
478 |
double qnf(double, double, double, double);
|
|
|
479 |
double rnf(double, double, double);
|
|
|
480 |
|
|
|
481 |
/* Non-central Student t Distribution */
|
|
|
482 |
|
|
|
483 |
double dnt(double, double, double);
|
|
|
484 |
double pnt(double, double, double);
|
|
|
485 |
double qnt(double, double, double);
|
|
|
486 |
double rnt(double, double);
|
|
|
487 |
|
| 624 |
ihaka |
488 |
/* Studentized Range Distribution */
|
|
|
489 |
|
|
|
490 |
double dtukey(double, double, double, double);
|
|
|
491 |
double ptukey(double, double, double, double);
|
|
|
492 |
double qtukey(double, double, double, double);
|
|
|
493 |
double rtukey(double, double, double);
|
|
|
494 |
|
| 2235 |
hornik |
495 |
/* Wilcoxon Rank Sum Distribution */
|
| 1276 |
hornik |
496 |
|
| 3865 |
pd |
497 |
#define WILCOX_MAX 50
|
| 1276 |
hornik |
498 |
double dwilcox(double, double, double);
|
|
|
499 |
double pwilcox(double, double, double);
|
|
|
500 |
double qwilcox(double, double, double);
|
|
|
501 |
double rwilcox(double, double);
|
|
|
502 |
|
| 2235 |
hornik |
503 |
/* Wilcoxon Signed Rank Distribution */
|
|
|
504 |
|
| 3865 |
pd |
505 |
#define SIGNRANK_MAX 50
|
| 2235 |
hornik |
506 |
double dsignrank(double, double);
|
|
|
507 |
double psignrank(double, double);
|
|
|
508 |
double qsignrank(double, double);
|
|
|
509 |
double rsignrank(double);
|
|
|
510 |
|
| 2 |
r |
511 |
#endif
|