[BACK]Return to ko-time.c CVS log [TXT][DIR] Up to [local] / OpenXM / src / hgm / fisher-bingham / src

File: [local] / OpenXM / src / hgm / fisher-bingham / src / ko-time.c (download)

Revision 1.1, Thu Mar 27 05:24:28 2014 UTC (10 years, 5 months ago) by takayama
Branch: MAIN
CVS Tags: RELEASE_1_3_1_13b, HEAD

A manual and a library for nk_fb_ten_c.
nk_fb_gen_c-ja.texi generated from nk_fb_gen_c.oxg gives an explanation
how to make a maximal likelihood estimate (MLE) for the Fisher-Bingham distribution
with this package.

(commit by proxy of T.Koyama, H.Nakayama, K.Nishiyama).

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <stdarg.h>

#define KO_TIME_TAB_LEN 10
#define KO_TIME_NAME_LEN 20

struct ko_time{
  char name[KO_TIME_NAME_LEN];
  clock_t start, end;
};

struct ko_time ko_time_tab[KO_TIME_TAB_LEN];

static int 
ko_time_getindex(char *s)
{
  int i;
  for(i=0; i<KO_TIME_TAB_LEN; i++)
    if (!strcmp(ko_time_tab[i].name, s))
      return i;
  fprintf(stderr, "Error: In ko_time_getindex,");
  fprintf(stderr, " unknown name `%s`\n", s);  
  exit(EXIT_FAILURE);
}

void 
ko_time_init(int n, ...)
{
  va_list ap;
  char *s;
  double *v;
  int i,j;

  if (n > KO_TIME_TAB_LEN -1){
    fprintf(stderr, "Error: in ko_time_init\n");
    exit(EXIT_FAILURE);
  }

  va_start(ap, n);
  for(i= 0; i<n; i++){
    s = va_arg(ap, char*);
#ifdef _DEBUG
    fprintf(stderr,"ko_time_tab[%d].name=%s\n",i,s);
#endif
    if(strlen(s) < KO_TIME_NAME_LEN )
      strcpy(ko_time_tab[i].name, s);
    else{
      fprintf(stderr, "Error: in ko_time_init\n");
      exit(EXIT_FAILURE);
    }
  }
  va_end(ap);

  for( ; i<KO_TIME_TAB_LEN; i++)
    strcpy(ko_time_tab[i].name, "");
}

void
ko_time_print(void)
{
  int i,j, len, maxlen=0;
  for(i=0; i<KO_TIME_TAB_LEN; i++)
    if((len = strlen(ko_time_tab[i].name)) > maxlen)
      maxlen = len;

  printf("time\n");
  for(i=0; i<KO_TIME_TAB_LEN && (len=strlen(ko_time_tab[i].name)); i++){
    printf("\t%s",ko_time_tab[i].name);
    for(j=len; j<maxlen; j++)
      putchar(' ');
    printf(": %f sec\n", (double)(ko_time_tab[i].end-ko_time_tab[i].start)/CLOCKS_PER_SEC);
  }
}

void 
ko_time_start(char *s)
{
  int i = ko_time_getindex(s);
  ko_time_tab[i].start = clock();
}

void 
ko_time_end(char *s)
{
  int i = ko_time_getindex(s);
  ko_time_tab[i].end = clock();
}