Ejemplo n.º 1
0
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");
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
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;
 }