Expand description
A simple and fast random number generator.
The implementation uses Wyrand, a simple and fast generator but not cryptographically secure.
§Examples
Flip a coin:
if fastrand::bool() {
println!("heads");
} else {
println!("tails");
}
Generate a random i32
:
let num = fastrand::i32(..);
Choose a random element in an array:
let v = vec![1, 2, 3, 4, 5];
let i = fastrand::usize(..v.len());
let elem = v[i];
Sample values from an array with O(n)
complexity (n
is the length of array):
fastrand::choose_multiple([1, 4, 5], 2);
fastrand::choose_multiple(0..20, 12);
Shuffle an array:
let mut v = vec![1, 2, 3, 4, 5];
fastrand::shuffle(&mut v);
Generate a random Vec
or [String
]:
use std::iter::repeat_with;
let v: Vec<i32> = repeat_with(|| fastrand::i32(..)).take(10).collect();
let s: String = repeat_with(fastrand::alphanumeric).take(10).collect();
To get reproducible results on every run, initialize the generator with a seed:
// Pick an arbitrary number as seed.
fastrand::seed(7);
// Now this prints the same number on every run:
println!("{}", fastrand::u32(..));
To be more efficient, create a new Rng
instance instead of using the thread-local
generator:
use std::iter::repeat_with;
let mut rng = fastrand::Rng::new();
let mut bytes: Vec<u8> = repeat_with(|| rng.u8(..)).take(10_000).collect();
This crate aims to expose a core set of useful randomness primitives. For more niche algorithms,
consider using the fastrand-contrib
crate alongside this one.
§Features
std
(enabled by default): Enables thestd
library. This is required for the global generator and global entropy. Without this feature,Rng
can only be instantiated using thewith_seed
method.js
: Assumes that WebAssembly targets are being run in a JavaScript environment. See the WebAssembly Notes section for more information.
§WebAssembly Notes
For non-WASI WASM targets, there is additional sublety to consider when utilizing the global RNG.
By default, std
targets will use entropy sources in the standard library to seed the global RNG.
However, these sources are not available by default on WASM targets outside of WASI.
If the js
feature is enabled, this crate will assume that it is running in a JavaScript
environment. At this point, the getrandom
crate will be used in order to access the available
entropy sources and seed the global RNG. If the js
feature is not enabled, the global RNG will
use a predefined seed.
Structs§
- Rng
- A random number generator.
Functions§
- alphabetic
std
- Generates a random
char
in ranges a-z and A-Z. - alphanumeric
std
- Generates a random
char
in ranges a-z, A-Z and 0-9. - bool
std
- Generates a random
bool
. - char
std
- Generates a random
char
in the given range. - choice
std
- Choose an item from an iterator at random.
- choose_
multiple std
- Collects
amount
values at random from the iterable into a vector. - digit
std
- Generates a random digit in the given
base
. - f32
std
- Generates a random
f32
in range0..1
. - f64
std
- Generates a random
f64
in range0..1
. - fill
std
- Fill a byte slice with random data.
- get_
seed std
- Gives back current seed that is being held by the thread-local generator.
- i8
std
- Generates a random
i8
in the given range. - i16
std
- Generates a random
i16
in the given range. - i32
std
- Generates a random
i32
in the given range. - i64
std
- Generates a random
i64
in the given range. - i128
std
- Generates a random
i128
in the given range. - isize
std
- Generates a random
isize
in the given range. - lowercase
std
- Generates a random
char
in range a-z. - seed
std
- Initializes the thread-local generator with the given seed.
- shuffle
std
- Shuffles a slice randomly.
- u8
std
- Generates a random
u8
in the given range. - u16
std
- Generates a random
u16
in the given range. - u32
std
- Generates a random
u32
in the given range. - u64
std
- Generates a random
u64
in the given range. - u128
std
- Generates a random
u128
in the given range. - uppercase
std
- Generates a random
char
in range A-Z. - usize
std
- Generates a random
usize
in the given range.