📄 stat.c
字号:
/* Generates and displays a statrec report*/void StatrecReport(int node, STATREC *srptr){ int i ,j; long long total = 0; double stddev; double x; PSDELAY; if (srptr->type == PNTSTATTYPE) { /* This is a point statrec */ YS__statmsg(node, "\nStatistics Record %s:\n", srptr->name); YS__statmsg(node, " Number of samples = %lld, Max Value = %i, Min Value = %i\n", srptr->samples, srptr->maxval, srptr->minval); if (srptr->sumwt != 0.0 && srptr->sumwt != 1.0) { /* calculate standard dev. */ x = (((double)srptr->sumsq-((double)srptr->sum/(double)srptr->sumwt) *((double)srptr->sum/(double)srptr->sumwt)*(double)srptr->sumwt)/((double)srptr->sumwt-1.0)); if (x > 0.0) stddev = sqrt(x); else stddev = 0.0; } else stddev = 0.0; if (stddev == -0.0) stddev = 0.0; if (srptr->meanflag == MEANS) /* print out means & stddev also */ { YS__statmsg(node, " Mean = %g, Standard Deviation = %g\n", (double)srptr->sum/(double)srptr->sumwt, stddev); } if (srptr->hist) { /* print out histogram */ for (i = 0; i < srptr->bins; i++) total += srptr->hist[i]; if (total != 0) { YS__statmsg(node, " Bin Value\n"); YS__statmsg(node, " ------- ---------\n"); for (i = 0; i < srptr->bins; i++) { if (!srptr->histspecial || (srptr->hist[i] > 0)) { YS__statmsg(node, " %8.2f %15lld (%6.2f%%) |", (double)srptr->hist_low + i * (double)srptr->hist_incr, srptr->hist[i], (double)(((double)srptr->hist[i]/(double)total)*100.0)); for (j = 0; j < (int)(((double)srptr->hist[i]/(double)total)*40.0); j++) YS__statmsg(node, "%s","*"); YS__statmsg(node, "\n"); } } } else YS__statmsg(node, "All histogram entries = 0"); if (srptr->maxval+srptr->hist_low > srptr->hist_high) YS__statmsg(node, "Warning: maximum value exceeds histogram range (%i, %i)\n", srptr->hist_low,srptr->hist_high); } } else if (srptr->type == INTSTATTYPE) { /* interval statistics recd.*/ YS__statmsg(node, "\nStatistics Record %s:\n", srptr->name); if (srptr->intervalerr != 0) YS__statmsg(node, "Invalid statistics, interval error"); YS__statmsg(node, " Number of intervals = %lld, Max Value = %i, Min Value = %i\n", srptr->samples-1, srptr->maxval, srptr->minval); if (srptr->sumwt != 0 && srptr->sumwt != 1) { /* calculate standdard deviation */ x = (((double)srptr->sumsq-((double)srptr->sum/(double)srptr->sumwt) *((double)srptr->sum/(double)srptr->sumwt)*(double)srptr->sumwt)/((double)srptr->sumwt-1.0)); if (x > 0.0) stddev = sqrt(x); else stddev = 0.0; } else stddev = 0.0; if (stddev == -0.0) stddev = 0.0; if (srptr->meanflag == MEANS) /* print out means also */ YS__statmsg(node, " Mean = %g, Standard Deviation = %g\n", (double)srptr->sum/(double)srptr->sumwt, stddev); if (srptr->hist) { /* print out histogram bins */ for (i = 0; i < srptr->bins; i++) total += srptr->hist[i]; if (total != 0.0) { YS__statmsg(node, " Bin Value\n"); YS__statmsg(node, " ------- ---------\n"); for (i = 0; i < srptr->bins; i++) { if (!srptr->histspecial || (srptr->hist[i] > 0)) { YS__statmsg(node, " %8.2f %15lld (%6.2f%%) |", (double)srptr->hist_low+i*(double)srptr->hist_incr, srptr->hist[i], (double)(((double)srptr->hist[i]/(double)total)*100.0)); for (j = 0; j < (int)(((double)srptr->hist[i]/(double)total)*40.0); j++) YS__statmsg(node, "%s","*"); YS__statmsg(node, "\n"); } } } else YS__statmsg(node, "All histogram entries = 0"); } } else YS__statmsg(node, "Invalid statistic record type, use POINT or INTERVAL"); YS__statmsg(node, "\n");}/*****************************************************************************/long long StatrecSamples(STATREC *srptr) /* Returns the number of samples */{ PSDELAY; return srptr->samples; }/*****************************************************************************/int StatrecMaxVal(STATREC *srptr) /* Returns the maximum sample value */{ PSDELAY; return srptr->maxval; }/*****************************************************************************/int StatrecMinVal(STATREC *srptr) /* Returns the minimum sample value */{ PSDELAY; return srptr->minval; }/*****************************************************************************/int StatrecBins(STATREC *srptr) /* Returns the number of bins */{ PSDELAY; if (srptr->hist) return srptr->bins; return 0;}/*****************************************************************************/int StatrecLowBin(STATREC *srptr) /* Returns the low bin upper bound */{ PSDELAY; if (srptr->hist) return srptr->hist_low; return 0;}/*****************************************************************************/int StatrecHighBin(STATREC *srptr) /* Returns the high bin lower bound */{ PSDELAY; if (srptr->hist) return srptr->hist_high; return 0;}/*****************************************************************************/int StatrecBinSize(STATREC *srptr) /* Returns the bin size */{ PSDELAY; if (srptr->hist) return srptr->hist_incr; return 0;}/*****************************************************************************//* Returns value of the ith histogram element */long long StatrecHist(STATREC *srptr, int i){ PSDELAY; if (srptr->hist) return srptr->hist[i]; return 0;}/*****************************************************************************/double StatrecMean(STATREC *srptr) /* Returns the mean */{ PSDELAY; if (srptr->meanflag == MEANS) if (srptr->sumwt != 0) return srptr->sum/srptr->sumwt; else return 0; return 0.0;}/*****************************************************************************/long long StatrecSum(STATREC *srptr) /* Returns the sum */{ PSDELAY; if (srptr->meanflag == MEANS) return srptr->sum; return 0;}/*****************************************************************************/double StatrecSdv(STATREC *srptr) /* Returns the standard deviation */{ PSDELAY; if (srptr->meanflag == MEANS) return sqrt((double)(((double)srptr->sumsq-((double)srptr->sum/(double)srptr->sumwt)* ((double)srptr->sum/(double)srptr->sumwt)*(double)srptr->sumwt)/((double)srptr->sumwt-1.0))); return 0.0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -