1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- #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
|