Update Spanish translation
[gnumeric.git] / src / mathfunc.h
blob32a68ab8ac0f3c3aee6eebd9d5979587a92ba7c9
1 #ifndef _GNM_MATHFUNC_H_
2 # define _GNM_MATHFUNC_H_
4 #include <numbers.h>
5 #include <math.h>
6 #include <glib.h>
7 #include <gnumeric.h>
9 G_BEGIN_DECLS
11 #ifdef qgamma
12 /* It was reported that mips-sgi-irix6.5 has a weird and conflicting define
13 for qgamma. See bug 1689. */
14 #warning "Your <math.h> is somewhat broken; we'll work around that."
15 #undef qgamma
16 #endif
18 #define M_PIgnum GNM_const(3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117)
19 #define M_PI_2gnum (M_PIgnum / 2)
20 /* The following are very good given a good compiler. */
21 #define M_LN2gnum GNM_const(0.693147180559945309417232121458176568075500134360255254120680009493393621969694715605863326996419)
22 #define M_LN10gnum GNM_const(2.302585092994045684017991454684364207601101488628772976033327900967572609677352480235997205089598)
23 #define M_LN10INVgnum GNM_const(0.434294481903251827651128918916605082294397005803666566114)
24 #define M_SQRT2gnum GNM_const(1.414213562373095048801688724209698078569671875376948073176679737990732478462107038850387534327642)
25 #define M_Egnum GNM_const(2.718281828459045235360287471352662497757247)
26 #define M_LN_SQRT_2PI GNM_const(0.918938533204672741780329736406) /* log(sqrt(2*pi)) */
28 /* ------------------------------------------------------------------------- */
30 gnm_float log1pmx (gnm_float x);
31 gnm_float swap_log_tail (gnm_float lp);
32 gnm_float pow1p (gnm_float x, gnm_float y);
33 gnm_float pow1pm1 (gnm_float x, gnm_float y);
34 gnm_float gnm_trunc (gnm_float x);
35 gnm_float logspace_add (gnm_float logx, gnm_float logy);
36 gnm_float logspace_sub (gnm_float logx, gnm_float logy);
37 gnm_float gnm_owent (gnm_float h, gnm_float a);
38 gnm_float gnm_logcf (gnm_float x, gnm_float i, gnm_float d);
39 gnm_float expmx2h (gnm_float x);
40 gnm_float gnm_agm(gnm_float a, gnm_float b);
42 /* "d": density. */
43 /* "p": distribution function. */
44 /* "q": inverse distribution function. */
46 /* The normal distribution. */
47 gnm_float pnorm (gnm_float x, gnm_float mu, gnm_float sigma, gboolean lower_tail, gboolean log_p);
48 gnm_float qnorm (gnm_float p, gnm_float mu, gnm_float sigma, gboolean lower_tail, gboolean log_p);
50 /* The gamma distribution. */
51 gnm_float dgamma (gnm_float x, gnm_float shape, gnm_float scale, gboolean give_log);
52 gnm_float pgamma (gnm_float x, gnm_float shape, gnm_float scale, gboolean lower_tail, gboolean log_p);
53 gnm_float qgamma (gnm_float p, gnm_float shape, gnm_float scale, gboolean lower_tail, gboolean log_p);
55 /* The beta distribution. */
56 gnm_float dbeta (gnm_float x, gnm_float a, gnm_float b, gboolean give_log);
57 gnm_float pbeta (gnm_float x, gnm_float a, gnm_float b, gboolean lower_tail, gboolean log_p);
58 gnm_float qbeta (gnm_float p, gnm_float a, gnm_float b, gboolean lower_tail, gboolean log_p);
60 /* The t distribution. */
61 gnm_float dt (gnm_float x, gnm_float n, gboolean give_log);
62 gnm_float pt (gnm_float x, gnm_float n, gboolean lower_tail, gboolean log_p);
63 gnm_float qt (gnm_float p, gnm_float n, gboolean lower_tail, gboolean log_p);
65 /* The F distribution. */
66 gnm_float df (gnm_float x, gnm_float n1, gnm_float n2, gboolean give_log);
67 gnm_float pf (gnm_float x, gnm_float n1, gnm_float n2, gboolean lower_tail, gboolean log_p);
68 gnm_float qf (gnm_float p, gnm_float n1, gnm_float n2, gboolean lower_tail, gboolean log_p);
70 /* The chi-squared distribution. */
71 gnm_float dchisq (gnm_float x, gnm_float df, gboolean give_log);
72 gnm_float pchisq (gnm_float x, gnm_float df, gboolean lower_tail, gboolean log_p);
73 gnm_float qchisq (gnm_float p, gnm_float df, gboolean lower_tail, gboolean log_p);
75 /* The Weibull distribution. */
76 gnm_float dweibull (gnm_float x, gnm_float shape, gnm_float scale, gboolean give_log);
77 gnm_float pweibull (gnm_float x, gnm_float shape, gnm_float scale, gboolean lower_tail, gboolean log_p);
78 gnm_float qweibull (gnm_float p, gnm_float shape, gnm_float scale, gboolean lower_tail, gboolean log_p);
80 /* The Poisson distribution. */
81 gnm_float dpois (gnm_float x, gnm_float lambda, gboolean give_log);
82 gnm_float ppois (gnm_float x, gnm_float lambda, gboolean lower_tail, gboolean log_p);
83 gnm_float qpois (gnm_float p, gnm_float lambda, gboolean lower_tail, gboolean log_p);
85 /* The exponential distribution. */
86 gnm_float dexp (gnm_float x, gnm_float scale, gboolean give_log);
87 gnm_float pexp (gnm_float x, gnm_float scale, gboolean lower_tail, gboolean log_p);
88 gnm_float qexp (gnm_float p, gnm_float scale, gboolean lower_tail, gboolean log_p);
90 /* Binomial distribution. */
91 gnm_float dbinom (gnm_float x, gnm_float n, gnm_float psuc, gboolean give_log);
92 gnm_float pbinom (gnm_float x, gnm_float n, gnm_float psuc, gboolean lower_tail, gboolean log_p);
93 gnm_float pbinom2 (gnm_float x0, gnm_float x1, gnm_float n, gnm_float p);
94 gnm_float qbinom (gnm_float p, gnm_float n, gnm_float psuc, gboolean lower_tail, gboolean log_p);
96 /* Negative binomial distribution. */
97 gnm_float dnbinom (gnm_float x, gnm_float n, gnm_float psuc, gboolean give_log);
98 gnm_float pnbinom (gnm_float x, gnm_float n, gnm_float psuc, gboolean lower_tail, gboolean log_p);
99 gnm_float qnbinom (gnm_float p, gnm_float n, gnm_float psuc, gboolean lower_tail, gboolean log_p);
101 /* Hyper-geometrical distribution. */
102 gnm_float dhyper (gnm_float x, gnm_float r, gnm_float b, gnm_float n, gboolean give_log);
103 gnm_float phyper (gnm_float x, gnm_float r, gnm_float b, gnm_float n, gboolean lower_tail, gboolean log_p);
105 /* Geometric distribution. */
106 gnm_float dgeom (gnm_float x, gnm_float psuc, gboolean give_log);
107 gnm_float pgeom (gnm_float x, gnm_float psuc, gboolean lower_tail, gboolean log_p);
108 gnm_float qgeom (gnm_float p, gnm_float psuc, gboolean lower_tail, gboolean log_p);
110 /* Cauchy distribution. */
111 gnm_float dcauchy (gnm_float x, gnm_float location, gnm_float scale, gboolean give_log);
112 gnm_float pcauchy (gnm_float x, gnm_float location, gnm_float scale, gboolean lower_tail, gboolean log_p);
114 /* The probability density functions. */
115 gnm_float random_exppow_pdf (gnm_float x, gnm_float a, gnm_float b);
116 gnm_float random_laplace_pdf (gnm_float x, gnm_float a);
118 /* Studentized range distribution */
119 /* Note: argument order differs from R. */
120 gnm_float ptukey(gnm_float x, gnm_float nmeans, gnm_float df, gnm_float nranges, gboolean lower_tail, gboolean log_p);
121 gnm_float qtukey(gnm_float p, gnm_float nmeans, gnm_float df, gnm_float nranges, gboolean lower_tail, gboolean log_p);
123 /* ------------------------------------------------------------------------- */
125 /* Matrix functions. */
127 GType gnm_matrix_get_type (void);
129 struct GnmMatrix_ {
130 int ref_count;
131 gnm_float **data; /* [y][x] */
132 int cols, rows;
135 GnmMatrix *gnm_matrix_new (int rows, int cols); /* Note the order: y then x. */
136 GnmMatrix *gnm_matrix_ref (GnmMatrix *m);
137 void gnm_matrix_unref (GnmMatrix *m);
138 GnmMatrix *gnm_matrix_from_value (GnmValue const *v, GnmValue **perr, GnmEvalPos const *ep);
139 GnmValue *gnm_matrix_to_value (GnmMatrix const *m);
140 gboolean gnm_matrix_is_empty (GnmMatrix const *m);
142 void gnm_matrix_multiply (GnmMatrix *C, const GnmMatrix *A, const GnmMatrix *B);
144 gboolean gnm_matrix_eigen (GnmMatrix const *m, GnmMatrix *EIG, gnm_float *eigenvalues);
146 gboolean gnm_matrix_modified_cholesky (GnmMatrix const *A,
147 GnmMatrix *L,
148 gnm_float *D,
149 gnm_float *E,
150 int *P);
152 GORegressionResult gnm_linear_solve_posdef (GnmMatrix const *A, const gnm_float *b,
153 gnm_float *x);
155 GORegressionResult gnm_linear_solve (GnmMatrix const *A, const gnm_float *b,
156 gnm_float *x);
158 GORegressionResult gnm_linear_solve_multiple (GnmMatrix const *A, GnmMatrix *B);
160 /* ------------------------------------------------------------------------- */
162 void mathfunc_init (void);
164 /* ------------------------------------------------------------------------- */
166 G_END_DECLS
168 #endif /* _GNM_MATHFUNC_H_ */