| author | |
| committer | |
| log | b4b90af4e0a9b15a940d836d275ac9dc50198217 |
| tree | 44cb548fe91d52662d06c5a00f0dd75ebf71dd74 |
| parent | 1f0b77b3b88112ef458f62c23df72003c843e7cc |
| signature | Signed by PGP key 4AEE18F83AFDEB23 |
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"); |
| 23 | 23 | const maxInt = std.math.maxInt; |
| 24 | 24 | |
| 25 | 25 | /// Fast unbiased random numbers. |
| 26 | pub const DefaultPrng = Xoroshiro128; | |
| 26 | pub const DefaultPrng = Xoshiro256; | |
| 27 | 27 | |
| 28 | 28 | /// Cryptographically secure random numbers. |
| 29 | 29 | pub const DefaultCsprng = Gimli; |