// -*- C++ -*-

// ===== FUNCTIONS declared in auxil/auxdouble.h: =====

// ----- SRCFILE=auxil/auxdouble.cc: -----
double rnd01();
// random number in [0,1[

double white_noise();
// returns one sample of white noise (with mean=0, sigma=1)

double pythag(double a, double b);
// return sqrt(a*a+b*b)

double extr3_estimate(const double *f, double *xvalp/*=0*/);
// return extremum (y-value) of parabola through 
// the points (-1,a), (0,b), (+1,c)
// optional also get the x-value

double sinc(double x);
// return sin(pi*x)/(pi*x)

void sumdiff(double *x, double *y, ulong n);
// x[]=(x[]+y[]),  y[]=(x[]+y[])

void sumdiff_05(double *x, double *y, ulong n);
// x[]=(x[]+y[])*0.5,  y[]=(x[]+y[])*0.5

double norm(const double *f, ulong n);
// return sqrt(\sum_k{f[k]*f[k]})

void normalize(double *f, ulong n, double v/*=1.0*/);
// scale f[] to norm v

double scalar_product(const double *f, const double *g, ulong n);
// return \sum_k{f[k]*g[k]}

double mean(const double *f, ulong n);
// return (\sum_k{f[k]})/n

double subtract_mean(double *f, ulong n, double *dst=0);
// subtract from f[] its mean value

double sigma(const double *f, ulong n, double *mp/*=0*/);
// return standard deviation
// = sqrt(\sum_k{sqr(f[k]-mean(f[]))}/n)

void mean_sigma(const double *f, ulong n, double *mp, double *sp);
// set *mp to mean, sp *to standard deviation of f[]

void smooth(double *f, ulong n, ulong m/*=1*/);
//  apply (1/4,1/2,1/4) - filter

double rms_diff(const double *f, const double *g, ulong n);
// return sqrt(\sum_k{sqr(f[k]-g[k])})/n

double rms_diff(const Complex *f, const Complex *g, ulong n);
// return sqrt(\sum_k{sqr(abs(f[k]-g[k]))})/n

ulong * histogram(const double *f, ulong n, ulong nbox, ulong *hh/*=0*/);
// put histogram of f[] (with nbox boxes) into hh[]

void welch_win(double *f, ulong n);
// multiply f[] with a welch window

void ri_multiply(const double *fr, const double *fi,
            double *gr, double *gi, ulong n);
// complex multiply array g[] by f[]:
//  Complex(gr[],gi[]) *= Complex(fr[],fi[])

