aboutsummaryrefslogtreecommitdiffstats
path: root/src/zrand.c
diff options
context:
space:
mode:
authorMattias Andrée <maandree@kth.se>2016-03-25 13:21:19 +0100
committerMattias Andrée <maandree@kth.se>2016-03-25 13:21:19 +0100
commit8dc182ff87cafe3337490bc8db90a67449b9c837 (patch)
treef23e6a63ec1a921270693ecd2b03ddb071ae412c /src/zrand.c
parentRename zsplit_unsigned_fast_small_tainted to zsplit_unsigned_fast_small_auto (diff)
downloadlibzahl-8dc182ff87cafe3337490bc8db90a67449b9c837.tar.gz
libzahl-8dc182ff87cafe3337490bc8db90a67449b9c837.tar.bz2
libzahl-8dc182ff87cafe3337490bc8db90a67449b9c837.tar.xz
zrand: add MODUNIFORM and add tests for QUASIUNIFORM and MODUNIFORM
Signed-off-by: Mattias Andrée <maandree@kth.se>
Diffstat (limited to 'src/zrand.c')
-rw-r--r--src/zrand.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/zrand.c b/src/zrand.c
index 1bb1a90..17968af 100644
--- a/src/zrand.c
+++ b/src/zrand.c
@@ -94,6 +94,14 @@ zrand(z_t r, enum zranddev dev, enum zranddist dist, z_t n)
while (unlikely(zcmpmag(r, n) > 0));
break;
+ case MODUNIFORM:
+ if (unlikely(znegative(n)))
+ libzahl_failure(-ZERROR_NEGATIVE);
+ zrand_get_random_bits(r, zbits(n), fd);
+ if (unlikely(zcmpmag(r, n) > 0))
+ zsub(r, r, n);
+ break;
+
default:
libzahl_failure(EINVAL);
}