authorgravatar for 124872+jedisct1@users.noreply.github.comFrank Denis <124872+jedisct1@users.noreply.github.com> 2021-07-08 23:19:49+02:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2021-07-08 23:19:49+02:00
logb4b90af4e0a9b15a940d836d275ac9dc50198217
tree44cb548fe91d52662d06c5a00f0dd75ebf71dd74
parent1f0b77b3b88112ef458f62c23df72003c843e7cc
signature Signed by PGP key 4AEE18F83AFDEB23

Switch rand.DefaultPrng to Xoshiro256++ (#9301)

Xoroshiro128+ is the current default non-cryptographic random number generator. This algorithm was designed to generate floating-point numbers, by only using the top 53 bits. Lower bits have a significant bias, that contradicts the documented properties for `rand.DefaultPrng`. This also has implications on everything using `Random.fill()`, including the way we generate random floating-point numbers. In addition, Xoroshiro128+ has known issues. See for example: - https://lemire.me/blog/2017/08/22/cracking-random-number-generators-xoroshiro128/ - https://www.pcg-random.org/posts/xoroshiro-fails-truncated.html Xoshiro256++ addresses these issues, while remaining very fast.

1 files changed, 1 insertions(+), 1 deletions(-)

lib/std/rand.zig+1-1
......@@ -23,7 +23,7 @@ const ziggurat = @import("rand/ziggurat.zig");
2323const maxInt = std.math.maxInt;
2424
2525/// Fast unbiased random numbers.
26pub const DefaultPrng = Xoroshiro128;
26pub const DefaultPrng = Xoshiro256;
2727
2828/// Cryptographically secure random numbers.
2929pub const DefaultCsprng = Gimli;