int sz = (6000.0 - 0.0) / int_step_size;
double h = (6000.0 - 0.0) / sz;
- fftw_plan f1, f2, b;
- complex<double> *func1, *func2, *res;
-
- func1 = reinterpret_cast<complex<double> *>(fftw_malloc(sz*2*sizeof(complex<double>)));
- func2 = reinterpret_cast<complex<double> *>(fftw_malloc(sz*2*sizeof(complex<double>)));
- res = reinterpret_cast<complex<double> *>(fftw_malloc(sz*2*sizeof(complex<double>)));
- f1 = fftw_plan_dft_1d(sz*2,
- reinterpret_cast<fftw_complex*>(func1),
- reinterpret_cast<fftw_complex*>(func1),
- FFTW_FORWARD,
- FFTW_MEASURE);
- f2 = fftw_plan_dft_1d(sz*2,
- reinterpret_cast<fftw_complex*>(func2),
- reinterpret_cast<fftw_complex*>(func2),
- FFTW_FORWARD,
- FFTW_MEASURE);
- b = fftw_plan_dft_1d(sz*2,
- reinterpret_cast<fftw_complex*>(res),
- reinterpret_cast<fftw_complex*>(res),
- FFTW_BACKWARD,
- FFTW_MEASURE);
+ static bool inited = false;
+ static fftw_plan f1, f2, b;
+ static complex<double> *func1, *func2, *res;
+
+ if (!inited) {
+ func1 = reinterpret_cast<complex<double> *>(fftw_malloc(sz*2*sizeof(complex<double>)));
+ func2 = reinterpret_cast<complex<double> *>(fftw_malloc(sz*2*sizeof(complex<double>)));
+ res = reinterpret_cast<complex<double> *>(fftw_malloc(sz*2*sizeof(complex<double>)));
+ f1 = fftw_plan_dft_1d(sz*2,
+ reinterpret_cast<fftw_complex*>(func1),
+ reinterpret_cast<fftw_complex*>(func1),
+ FFTW_FORWARD,
+ FFTW_MEASURE);
+ f2 = fftw_plan_dft_1d(sz*2,
+ reinterpret_cast<fftw_complex*>(func2),
+ reinterpret_cast<fftw_complex*>(func2),
+ FFTW_FORWARD,
+ FFTW_MEASURE);
+ b = fftw_plan_dft_1d(sz*2,
+ reinterpret_cast<fftw_complex*>(res),
+ reinterpret_cast<fftw_complex*>(res),
+ FFTW_BACKWARD,
+ FFTW_MEASURE);
+ inited = true;
+ }
// start off by zero
for (int i = 0; i < sz*2; ++i) {
*sigma_result = sigma;
}
-static void compute_new_rating(double mu1, double sigma1, double mu2, double sigma2, int score1, int score2, double *mu, double *sigma, double *probability)
+void compute_new_rating(double mu1, double sigma1, double mu2, double sigma2, int score1, int score2, double *mu, double *sigma, double *probability)
{
vector<pair<double, double> > curve;