diff options
Diffstat (limited to 'debian/vendor-h2o/deps/klib/kmath.h')
-rw-r--r-- | debian/vendor-h2o/deps/klib/kmath.h | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/debian/vendor-h2o/deps/klib/kmath.h b/debian/vendor-h2o/deps/klib/kmath.h new file mode 100644 index 0000000..2c3e779 --- /dev/null +++ b/debian/vendor-h2o/deps/klib/kmath.h @@ -0,0 +1,53 @@ +#ifndef AC_KMATH_H +#define AC_KMATH_H + +#include <stdint.h> + +#ifdef __cplusplus +extern "C" { +#endif + + /********************************** + * Pseudo-random number generator * + **********************************/ + + typedef uint64_t krint64_t; + + struct _krand_t; + typedef struct _krand_t krand_t; + + #define kr_drand(_kr) ((kr_rand(_kr) >> 11) * (1.0/9007199254740992.0)) + #define kr_sample(_kr, _k, _cnt) ((*(_cnt))++ < (_k)? *(_cnt) - 1 : kr_rand(_kr) % *(_cnt)) + + krand_t *kr_srand(krint64_t seed); + krint64_t kr_rand(krand_t *kr); + + /************************** + * Non-linear programming * + **************************/ + + #define KMIN_RADIUS 0.5 + #define KMIN_EPS 1e-7 + #define KMIN_MAXCALL 50000 + + typedef double (*kmin_f)(int, double*, void*); + typedef double (*kmin1_f)(double, void*); + + double kmin_hj(kmin_f func, int n, double *x, void *data, double r, double eps, int max_calls); // Hooke-Jeeves' + double kmin_brent(kmin1_f func, double a, double b, void *data, double tol, double *xmin); // Brent's 1-dimenssion + + /********************* + * Special functions * + *********************/ + + double kf_lgamma(double z); // log gamma function + double kf_erfc(double x); // complementary error function + double kf_gammap(double s, double z); // regularized lower incomplete gamma function + double kf_gammaq(double s, double z); // regularized upper incomplete gamma function + double kf_betai(double a, double b, double x); // regularized incomplete beta function + +#ifdef __cplusplus +} +#endif + +#endif |