diff --git a/tfprng.c b/tfprng.c index 5022857..f83963c 100644 --- a/tfprng.c +++ b/tfprng.c @@ -85,7 +85,7 @@ TFNG_UNIT_TYPE tfng_prng_range_r(void *sdata, TFNG_UNIT_TYPE s, TFNG_UNIT_TYPE d { TFNG_UNIT_TYPE c = tfng_prng_random_r(sdata); if (d <= s) return s; - return s + c / ((TFNG_UNIT_TYPE)~0 / (d - s + 1) + 1); + return TFNG_PRNG_RANGE(c, TFNG_UNIT_TYPE, s, d); } TFNG_UNIT_TYPE tfng_prng_range(TFNG_UNIT_TYPE s, TFNG_UNIT_TYPE d) diff --git a/tfprng.h b/tfprng.h index f7d3b3f..15880b7 100644 --- a/tfprng.h +++ b/tfprng.h @@ -6,6 +6,7 @@ #define TFNG_PRNG_KEY_SIZE TFNG_KEY_SIZE #define TFNG_PRNG_SIZE_UNIT TFNG_SIZE_UNIT +#define TFNG_PRNG_RANGE(C, T, S, D) (S + C / ((T)~0 / (D - S + 1) + 1)) size_t tfng_prng_datasize(void); void tfng_prng_seedkey_r(void *sdata, const void *skey);