X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=lib%2Fgauss.c;h=1d24e187ab733793fa4ece4dc50c8c15a5efa332;hp=1bb6c41d9ab035b12ef3a3e7c7290679f472f823;hb=3d2d14bcb844e72809192311369a642c5d415472;hpb=f88cd2226c594876ae58f36ca94cddb4fc1b719f;ds=sidebyside diff --git a/lib/gauss.c b/lib/gauss.c index 1bb6c41d..1d24e187 100644 --- a/lib/gauss.c +++ b/lib/gauss.c @@ -1,6 +1,5 @@ #include #include -#include #include "../hash.h" #include "gauss.h" @@ -15,7 +14,7 @@ static int gauss_dev(struct gauss_state *gs) return 0; r = __rand(&gs->r); - vr = gs->stddev * (r / (FRAND_MAX + 1.0)); + vr = gs->stddev * (r / (FRAND32_MAX + 1.0)); return vr - gs->stddev / 2; } @@ -38,14 +37,17 @@ unsigned long long gauss_next(struct gauss_state *gs) sum += dev; } - return __hash_u64(sum) % gs->nranges; + if (!gs->disable_hash) + sum = __hash_u64(sum); + + return sum % gs->nranges; } void gauss_init(struct gauss_state *gs, unsigned long nranges, double dev, unsigned int seed) { memset(gs, 0, sizeof(*gs)); - init_rand_seed(&gs->r, seed); + init_rand_seed(&gs->r, seed, 0); gs->nranges = nranges; if (dev != 0.0) { @@ -54,3 +56,8 @@ void gauss_init(struct gauss_state *gs, unsigned long nranges, double dev, gs->stddev = nranges / 2; } } + +void gauss_disable_hash(struct gauss_state *gs) +{ + gs->disable_hash = true; +}