# [−][src]Struct rand::distributions::Uniform

Sample values uniformly between two bounds.

`Uniform::new`

and `Uniform::new_inclusive`

construct a uniform
distribution sampling from the given range; these functions may do extra
work up front to make sampling of multiple values faster.

When sampling from a constant range, many calculations can happen at
compile-time and all methods should be fast; for floating-point ranges and
the full range of integer types this should have comparable performance to
the `Standard`

distribution.

Steps are taken to avoid bias which might be present in naive
implementations; for example `rng.gen::<u8>() % 170`

samples from the range
`[0, 169]`

but is twice as likely to select numbers less than 85 than other
values. Further, the implementations here give more weight to the high-bits
generated by the RNG than the low bits, since with some RNGs the low-bits
are of lower quality than the high bits.

Implementations must sample in `[low, high)`

range for
`Uniform::new(low, high)`

, i.e., excluding `high`

. In particular care must
be taken to ensure that rounding never results values `< low`

or `>= high`

.

# Example

use rand::distributions::{Distribution, Uniform}; fn main() { let between = Uniform::from(10..10000); let mut rng = rand::thread_rng(); let mut sum = 0; for _ in 0..1000 { sum += between.sample(&mut rng); } println!("{}", sum); }

## Methods

`impl<X: SampleUniform> Uniform<X>`

[src]

`pub fn new<B1, B2>(low: B1, high: B2) -> Uniform<X> where`

B1: SampleBorrow<X> + Sized,

B2: SampleBorrow<X> + Sized,

[src]

B1: SampleBorrow<X> + Sized,

B2: SampleBorrow<X> + Sized,

Create a new `Uniform`

instance which samples uniformly from the half
open range `[low, high)`

(excluding `high`

). Panics if `low >= high`

.

`pub fn new_inclusive<B1, B2>(low: B1, high: B2) -> Uniform<X> where`

B1: SampleBorrow<X> + Sized,

B2: SampleBorrow<X> + Sized,

[src]

B1: SampleBorrow<X> + Sized,

B2: SampleBorrow<X> + Sized,

Create a new `Uniform`

instance which samples uniformly from the closed
range `[low, high]`

(inclusive). Panics if `low > high`

.

## Trait Implementations

`impl<X: SampleUniform> Distribution<X> for Uniform<X>`

[src]

`fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> X`

[src]

#### ⓘImportant traits for DistIter<D, R, T>`fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T> where`

R: Rng,

Self: Sized,

[src]

R: Rng,

Self: Sized,

Create an iterator that generates random values of `T`

, using `rng`

as the source of randomness. Read more

`impl<X: Copy + SampleUniform> Copy for Uniform<X> where`

X::Sampler: Copy,

[src]

X::Sampler: Copy,

`impl<X: Clone + SampleUniform> Clone for Uniform<X> where`

X::Sampler: Clone,

[src]

X::Sampler: Clone,

`fn clone(&self) -> Uniform<X>`

[src]

`fn clone_from(&mut self, source: &Self)`

1.0.0[src]

Performs copy-assignment from `source`

. Read more

`impl<X: SampleUniform> From<Range<X>> for Uniform<X>`

[src]

`impl<X: SampleUniform> From<RangeInclusive<X>> for Uniform<X>`

[src]

`fn from(r: RangeInclusive<X>) -> Uniform<X>`

[src]

`impl<X: Debug + SampleUniform> Debug for Uniform<X> where`

X::Sampler: Debug,

[src]

X::Sampler: Debug,

## Auto Trait Implementations

`impl<X> Send for Uniform<X> where`

<X as SampleUniform>::Sampler: Send,

<X as SampleUniform>::Sampler: Send,

`impl<X> Unpin for Uniform<X> where`

<X as SampleUniform>::Sampler: Unpin,

<X as SampleUniform>::Sampler: Unpin,

`impl<X> Sync for Uniform<X> where`

<X as SampleUniform>::Sampler: Sync,

<X as SampleUniform>::Sampler: Sync,

`impl<X> UnwindSafe for Uniform<X> where`

<X as SampleUniform>::Sampler: UnwindSafe,

<X as SampleUniform>::Sampler: UnwindSafe,

`impl<X> RefUnwindSafe for Uniform<X> where`

<X as SampleUniform>::Sampler: RefUnwindSafe,

<X as SampleUniform>::Sampler: RefUnwindSafe,

## Blanket Implementations

`impl<T> ToOwned for T where`

T: Clone,

[src]

T: Clone,

`type Owned = T`

The resulting type after obtaining ownership.

`fn to_owned(&self) -> T`

[src]

`fn clone_into(&self, target: &mut T)`

[src]

`impl<T, U> Into<U> for T where`

U: From<T>,

[src]

U: From<T>,

`impl<T> From<T> for T`

[src]

`impl<T, U> TryFrom<U> for T where`

U: Into<T>,

[src]

U: Into<T>,

`type Error = Infallible`

The type returned in the event of a conversion error.

`fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>`

[src]

`impl<T, U> TryInto<U> for T where`

U: TryFrom<T>,

[src]

U: TryFrom<T>,

`type Error = <U as TryFrom<T>>::Error`

The type returned in the event of a conversion error.

`fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>`

[src]

`impl<T> BorrowMut<T> for T where`

T: ?Sized,

[src]

T: ?Sized,

`fn borrow_mut(&mut self) -> &mut T`

[src]

`impl<T> Borrow<T> for T where`

T: ?Sized,

[src]

T: ?Sized,

`impl<T> Any for T where`

T: 'static + ?Sized,

[src]

T: 'static + ?Sized,

`impl<T> FromCast<T> for T`

`fn from_cast(t: T) -> T`

`impl<T, U> Cast<U> for T where`

U: FromCast<T>,

U: FromCast<T>,

`fn cast(self) -> U`

`impl<T, U> IntoBits<U> for T where`

U: FromBits<T>,

U: FromBits<T>,

`fn into_bits(self) -> U`

`impl<T> FromBits<T> for T`

`fn from_bits(t: T) -> T`

`impl<V, T> VZip<V> for T where`

V: MultiLane<T>,

V: MultiLane<T>,