pub struct Range<X> { /* fields omitted */ }
Sample values uniformly between two bounds.
This gives a uniform distribution (assuming the RNG used to sample
it is itself uniform & the SampleRange
implementation for the
given type is correct), even for edge cases like low = 0u8
,
high = 170u8
, for which a naive modulo operation would return
numbers less than 85 with double the probability to those greater
than 85.
Types should attempt to sample in [low, high)
, i.e., not
including high
, but this may be very difficult. All the
primitive integer types satisfy this property, and the float types
normally satisfy it, but rounding may mean high
can occur.
use rand::distributions::{IndependentSample, Range};
fn main() {
let between = Range::new(10, 10000);
let mut rng = rand::thread_rng();
let mut sum = 0;
for _ in 0..1000 {
sum += between.ind_sample(&mut rng);
}
println!("{}", sum);
}
Create a new Range
instance that samples uniformly from
[low, high)
. Panics if low >= high
.
Performs copy-assignment from source
. Read more
[−]
Generate a random value of Support
, using rng
as the source of randomness. Read more
Formats the value using the given formatter. Read more