Exemple #1
0
unsigned long long zipf_next(struct zipf_state *zs)
{
    double alpha, eta, rand_uni, rand_z;
    unsigned long long n = zs->nranges;
    unsigned long long val;

    alpha = 1.0 / (1.0 - zs->theta);
    eta = (1.0 - pow(2.0 / n, 1.0 - zs->theta)) / (1.0 - zs->zeta2 / zs->zetan);

    rand_uni = (double) __rand(&zs->rand) / (double) FRAND32_MAX;
    rand_z = rand_uni * zs->zetan;

    if (rand_z < 1.0)
        val = 1;
    else if (rand_z < (1.0 + pow(0.5, zs->theta)))
        val = 2;
    else
        val = 1 + (unsigned long long)(n * pow(eta*rand_uni - eta + 1.0, alpha));

    val--;

    if (!zs->disable_hash)
        val = __hash_u64(val);

    return (val + zs->rand_off) % zs->nranges;
}
Exemple #2
0
unsigned long long pareto_next(struct zipf_state *zs)
{
    double rand = (double) __rand(&zs->rand) / (double) FRAND32_MAX;
    unsigned long long n;

    n = (zs->nranges - 1) * pow(rand, zs->pareto_pow);

    if (!zs->disable_hash)
        n = __hash_u64(n);

    return (n + zs->rand_off)  % zs->nranges;
}
Exemple #3
0
unsigned long long gauss_next(struct gauss_state *gs)
{
	unsigned long long sum = 0;
	int i;

	for (i = 0; i < GAUSS_ITERS; i++)
		sum += __rand(&gs->r) % (gs->nranges + 1);

	sum = (sum + GAUSS_ITERS - 1) / GAUSS_ITERS;

	if (gs->stddev) {
		int dev = gauss_dev(gs);

		while (dev + sum >= gs->nranges)
			dev /= 2;
		sum += dev;
	}

	return __hash_u64(sum) % gs->nranges;
}