14 #define DATA_COUNT (1024*1024)
15 double data_items[DATA_COUNT];
17 int num_data_items = 0;
23 compare_double(const void *p1, const void *p2)
25 double val1 = *(u_int64_t *)p1;
26 double val2 = *(u_int64_t *)p2;
36 main(int argc, char **argv)
47 double one_sd_low, one_sd_high;
48 double two_sd_low, two_sd_high;
49 double three_sd_low, three_sd_high;
56 in_fp = fopen(in_file, "r");
58 while (fgets(in_buf, BUFSIZE, in_fp)) {
59 if (num_data_items == DATA_COUNT) {
61 "DATA overflow, increase size of data_items array\n");
64 sscanf(in_buf, "%lf", &data_items[num_data_items]);
66 printf("%lf\n", data_items[num_data_items]);
70 if (num_data_items == 0) {
71 fprintf(stderr, "Empty input file ?\n");
75 printf("Total items %lu\n", num_data_items);
77 for (i = 0 ; i < num_data_items ; i++) {
78 sum_x += data_items[i];
79 sum_sq_x += data_items[i] * data_items[i];
81 mean = sum_x / num_data_items;
82 printf("\tMean %.4f\n", mean);
83 std_dev = sqrt((sum_sq_x / num_data_items) - (mean * mean));
84 printf("\tStd Dev %.4f (%.4f%% of mean)\n",
85 std_dev, (std_dev * 100.0) / mean);
86 one_sd_low = mean - std_dev;
87 one_sd_high = mean + std_dev;
88 two_sd_low = mean - (2 * std_dev);
89 two_sd_high = mean + (2 * std_dev);
90 three_sd_low = mean - (3 * std_dev);
91 three_sd_high = mean + (3 * std_dev);
92 for (i = 0 ; i < num_data_items ; i++) {
93 if (data_items[i] >= one_sd_low &&
94 data_items[i] <= one_sd_high)
96 if (data_items[i] >= two_sd_low &&
97 data_items[i] <= two_sd_high)
99 if (data_items[i] >= three_sd_low &&
100 data_items[i] <= three_sd_high)
103 printf("\tWithin 1 SD %.2f%%\n",
104 ((double)one_sd * 100) / num_data_items);
105 printf("\tWithin 2 SD %.2f%%\n",
106 ((double)two_sd * 100) / num_data_items);
107 printf("\tWithin 3 SD %.2f%%\n",
108 ((double)three_sd* 100) / num_data_items);
109 printf("\tOutside 3 SD %.2f%%\n",
110 ((double)(num_data_items - three_sd) * 100) / num_data_items);
111 /* Sort the data to get percentiles */
112 qsort(data_items, num_data_items, sizeof(u_int64_t), compare_double);
113 printf("\t50th percentile %lf\n", data_items[num_data_items / 2]);
114 printf("\t75th percentile %lf\n", data_items[(3 * num_data_items) / 4]);
115 printf("\t90th percentile %lf\n", data_items[(9 * num_data_items) / 10]);
116 printf("\t99th percentile %lf\n", data_items[(99 * num_data_items) / 100]);