diff --git a/bin/ikarus b/bin/ikarus index 9636837..0c1a8ee 100755 Binary files a/bin/ikarus and b/bin/ikarus differ diff --git a/bin/ikarus-numerics.c b/bin/ikarus-numerics.c index e04c951..1434555 100644 --- a/bin/ikarus-numerics.c +++ b/bin/ikarus-numerics.c @@ -1273,3 +1273,21 @@ ikrt_bignum_to_bytevector(ikp x, ikpcb* pcb){ return bv + bytevector_tag; } + +ikp +ikrt_fxrandom(ikp x){ + int mask = 1; + int n = unfix(x); + { + while(mask < n){ + mask = (mask << 1) | 1; + } + } + while(1){ + long r = random() & mask; + if(r < n){ + return fix(r); + } + } +} +