/* calc_dispersion(double[], uint32_t) * calcuate dispersion of data. * arg1: data * arg2: number of elemet in data */ double calc_dispersion(double data[], uint32_t element_num){ double value = 0; int i = 0; double average = calc_average(data, element_num); for(i = 0; i < element_num; i++){ value += (data[i] - average) * (data[i] - average); } value = value/element_num; return value; }
static void write_stats(PktBuf *buf, PgStats *stat, PgStats *old, char *dbname) { PgStats avg; calc_average(&avg, stat, old); pktbuf_write_DataRow(buf, "sqqqqqqqqqqqqqq", dbname, stat->xact_count, stat->query_count, stat->client_bytes, stat->server_bytes, stat->xact_time, stat->query_time, stat->wait_time, avg.xact_count, avg.query_count, avg.client_bytes, avg.server_bytes, avg.xact_time, avg.query_time, avg.wait_time); }
void print_tstats( timer_stats* ts ){ ts->avg = calc_average( ts->value_list ); ts->dev = calc_deviation( ts->value_list , ts->avg ); printf("total: %0.3f, max/min/avg/dev : %0.3f/%0.3f/%0.3f/%0.3f\n" , ts->totaltime ,ts->max , ts->min ,ts->avg , ts->dev); }
int main(int argc, char** argv) { if(argc != 3){ char buf[1024]; printf("ファイルをドラッグアンドドロップして下さい。\r\n\r\n"); printf("コマンドラインからは\r\n"); printf("%s [infile] [outfile]\r\n", argv[0]); printf("で実行します。\r\n"); exit(-1); } char csvfile[1024]; sprintf(csvfile, "%s", argv[2]); FILE* wp = fopen(csvfile, "w"); if(wp == NULL){ printf("ファイルが開けません: %s\n\n", csvfile); printf("Enterで終了します。\n"); char buf[1024]; gets(buf); exit(-1); } fprintf(wp, "time," "x:70W7,y:70W7,z:70W7," "x:70E1,y:70E1,z:70E1," "x:70W1,y:70W1,z:70W1," "x:70E7,y:70E7,z:70E7," "x:65E1,y:65E1,z:65E1\n"); float avgs[15]; int num_line = calc_average(argv[1], avgs); printf("num_line = %d\n", num_line); int step; if(num_line == 600000){ step = 10; }else{ step = 1; } FILE* fp = fopen(argv[1], "r"); char buf[1024]; int16_t item[16]; uint64_t i = 0; float t = 0.0; while(char *p = fgets(buf, sizeof(buf), fp)){ i++; if(i % 10000 == 0){ printf("%6ld行経過\n", i); fflush(stdout); } if(i >= 5){ if(buf[0] == 'S' || buf[0] == '\r' || buf[0] == 'a' || buf[0] == 'D'){ continue; } if((i - 5) % step != 0){ continue; } t++; sscanf(buf, "%04x\t%04x\t%04x\t" "%04x\t%04x\t%04x\t" "%04x\t%04x\t%04x\t" "%04x\t%04x\t%04x\t" "%04x\t%04x\t%04x\n", &item[0], &item[1], &item[2], &item[3], &item[4], &item[5], &item[6], &item[7], &item[8], &item[9], &item[10], &item[11], &item[12], &item[13], &item[14]); double val[15]; for(int j = 0; j < 15; j++){ double alpha = 2.762937E-20; double beta = 5.922332E-16; double gamma = 6.582092E-6; double delta = 0.002276; double x = (double) item[j]; double ad_val = alpha * x * x * x + beta * x * x + gamma * x + delta; double a = ad_val / 2.0 * 980.665; val[j] = a - avgs[j]; } fprintf(wp, "%0.03f," "%e,%e,%e," "%e,%e,%e," "%e,%e,%e," "%e,%e,%e," "%e,%e,%e\n", t / 100.0, val[0], val[1], val[2], val[3], val[4], val[5], val[6], val[7], val[8], val[9], val[10], val[11], val[12], val[13], val[14]); }else if(i == 1){ if(strcmp(buf, "Sampling=1000\r\n") == 0){ printf("1000 Hz sampling\n"); }else if(strcmp(buf, "Sampling=100\r\n") == 0){ printf("100 Hz sampling\n"); }else{ printf("ファイル形式が異なります。\r\n"); printf("Enterで終了します。\n"); gets(buf); exit(-1); } } } fclose(fp); fclose(wp); }