view xthresh.c @ 383:6cef34d6fc48 api-inversion

Create a branch for trying to "invert" the command-line program and library. That is, instead of having the library functions effectively "call" the command-line client (by faking up an argv[] and abusing the multiple constructors), have the functionality be contained in the API function itself, and have the command-line/C++ audioDB client call those functions. Eventually, each API function (and perhaps tightly-focused helper functions) will be in its own file (e.g. audiodb_create() will end up in create.cpp), and (hopefully) the command-line client will be so trivial as to be fully contained in a rather shortened audioDB.cpp file. This inversion should also solve the double-compilation-with-preprocessor-#defines of audioDB.cpp, and the position of soap.cpp: the soap calls and their callers will be entirely specific to the command-line binary, and will have all their hooks into the API removed. That's the plan, anyway. Anyone is welcome to play along.
author mas01cr
date Fri, 21 Nov 2008 15:05:56 +0000
parents 3be15407e814
children
line wrap: on
line source
#include <gsl/gsl_sf.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(int argc, char *argv[]) {
  if(argc != 4) {
    fprintf(stderr, "Wrong number of arguments: %d\n", argc);
    exit(1);
  }

  long int meanN = strtol(argv[1], NULL, 10);

  double d = strtod(argv[2], NULL);
  double sigma2 = strtod(argv[3], NULL);

  double logw = (2 / d) * gsl_sf_log(-gsl_sf_log(0.99));
  double logxthresh = gsl_sf_log(sigma2) + logw
    - (2 / d) * gsl_sf_log(meanN)
    - gsl_sf_log(d/2)
    - (2 / d) * gsl_sf_log(2 / d)
    + (2 / d) * gsl_sf_lngamma(d / 2);

  printf("w: %f\n", exp(logw));
  printf("x_thresh: %f\n", exp(logxthresh));
  exit(0);
}