Rework random(6)
authortb <tb@openbsd.org>
Tue, 23 Aug 2022 06:35:53 +0000 (06:35 +0000)
committertb <tb@openbsd.org>
Tue, 23 Aug 2022 06:35:53 +0000 (06:35 +0000)
commit534f87a39f2f8b9fc6b98949287b67a607e25da4
treef0ebbd1ce85b2335a661e2ad350d2424d4272fc6
parent3d0e367a975b0546e3ed2bf99080ee6c7eb8514c
Rework random(6)

Fix putchar(3) handling and a number of other issues in the random(6)
code. In -e mode, avoid bias due to truncation of the return code to
8 bits. In default mode, actually treat the denominator as a floating
point number and print the line with a probability of 1 / denominator.
This allows e.g. printing 2/3 of stdin with 'random 1.5'.

Includes code for uniform random floats by Taylor R. Campbell from
https://mumble.net/~campbell/2014/04/28/uniform-random-float
and clz64() by me.

From lucic71 () bronze ! ctrl-c ! club, thanks.

ok deraadt
games/random/random.6
games/random/random.c