X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=lib%2Fgauss.c;h=afd0490d54786130acf04e0bb3c64bd8a4473bbd;hp=cd8b6e3e491a8669b3d5cad6e92c80567d656acb;hb=c3546b531f48a2ff413c9508aed465e0145c8dfc;hpb=50d795a5b72ea43ee125012a2aec7e4cfad20de9 diff --git a/lib/gauss.c b/lib/gauss.c index cd8b6e3e..afd0490d 100644 --- a/lib/gauss.c +++ b/lib/gauss.c @@ -15,7 +15,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; } @@ -41,13 +41,16 @@ unsigned long long gauss_next(struct gauss_state *gs) return __hash_u64(sum) % gs->nranges; } -void gauss_init(struct gauss_state *gs, unsigned long nranges, unsigned int d, +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; - gs->stddev = d; - if (gs->stddev > nranges / 2) - gs->stddev = nranges / 2; + + if (dev != 0.0) { + gs->stddev = ceil((double) (nranges * 100.0) / dev); + if (gs->stddev > nranges / 2) + gs->stddev = nranges / 2; + } }