int main(){ //pareto distribution double val; int i; for(i = 0; i<1000; i++) { val = pareto(10.0, 2.0); printf("%lf ", val); } printf("\n"); }
int main(int argc, char *argv[]) { int i, which = 0, cnt = 100, trunc = 0, verbose = 0, weight = 1; float alpha = 0, k = 0, value = 0, scale = 1.0, limit = 0; float total = 0, median = -1, min = 0, max = 0; for (i=1 ; i<argc ; i++) { if (strcmp(argv[i], "-zipf") == 0) { which = DIST_ZIPF; if (++i >= argc || *argv[i] == '-') usage(); alpha = atof(argv[i]); if (verbose) { fprintf(stderr, "zipf(a=%0.2f)\n", alpha); } } else if (strcmp(argv[i], "-pareto") == 0) { which = DIST_PARETO; if (++i >= argc || *argv[i] == '-') usage(); alpha = atof(argv[i]); if (++i >= argc || *argv[i] == '-') usage(); k = atof(argv[i]); if (verbose) { fprintf(stderr, "pareto(a=%0.2f, k=%0.2f)\n", alpha, k); } } else if (strcmp(argv[i], "-uniform") == 0) { which = DIST_UNIFORM; if (verbose) { fprintf(stderr, "uniform()\n"); } } else if (strcmp(argv[i], "-cnt") == 0) { if (++i >= argc || *argv[i] == '-') usage(); cnt = atoi(argv[i]); if (verbose) { fprintf(stderr, "cnt=%d\n", cnt); } } else if (strcmp(argv[i], "-scale") == 0) { if (++i >= argc || *argv[i] == '-') usage(); scale = atof(argv[i]); if (verbose) { fprintf(stderr, "scale=%0.2f\n", scale); } } else if (strcmp(argv[i], "-limit") == 0) { if (++i >= argc || *argv[i] == '-') usage(); limit = atof(argv[i]); if (verbose) { fprintf(stderr, "limit=%0.2f\n", limit); } } else if (strcmp(argv[i], "-trunc") == 0) { trunc = 1; if (verbose) { fprintf(stderr, "truncating values\n"); } } else if (strcmp(argv[i], "-weight") == 0) { if (++i >= argc || *argv[i] == '-') usage(); weight = atoi(argv[i]); if (verbose) { fprintf(stderr, "weight=%d\n", weight); } } else if (strcmp(argv[i], "-v") == 0) { verbose = 1; if (verbose) { fprintf(stderr, "verbose output\n"); } } else { fprintf(stderr, "unknown option \"%s\"\n", argv[i]); usage(); } } for (i=1 ; i<=cnt ; i++) { switch (which) { case DIST_ZIPF: value = zipf(i, alpha); break; case DIST_PARETO: value = pareto(i, alpha, k); break; case DIST_UNIFORM: value = uniform(i, cnt); break; default: usage(); break; } /* * scale value. */ value = value * scale; /* * optionally truncate values exceeding limit. */ if (limit && value > limit) { value = limit; } /* * optionally truncate values to integers. */ if (trunc) { value = (int)value; } /* * print value with proper decimal format. */ if (trunc) { printf("%d\t%d\n", (int)value, weight); } else { printf("%0.2f\t%d\n", value, weight); } /* * statistics: max, median, min, and total (for avg). */ if (i == 1) { max = value; } if (i == cnt / 2) { median = value; } if (i == cnt) { min = value; } total += value; } if (verbose) { fprintf(stderr, "total = %0.2f\n", total); fprintf(stderr, "min = %0.2f (%0.2f%% of total)\n", min, min / total * 100.0); fprintf(stderr, "max = %0.2f (%0.2f%% of total)\n", max, max / total * 100.0); fprintf(stderr, "average = %0.2f (%0.2f%% of total)\n", total/(float)cnt, (total/(float)cnt) / total * 100.0); fprintf(stderr, "median = %0.2f (%0.2f%% of total)\n", median, median / total * 100.0); } return 0; }
static int discretePareto(int min, int max, int step, double k) { int r = min + step * ((int)std::floor(pareto(step, k, max - min) / step) - 1); return r; }