# Struct rand_distr::Uniform

source ·
[−]`pub struct Uniform<X>(_)`

where

X: SampleUniform;

## Expand description

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. If only one sample
from the range is required, `Rng::gen_range`

can be more efficient.

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};
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);
```

For a single sample, `Rng::gen_range`

may be preferred:

```
use rand::Rng;
let mut rng = rand::thread_rng();
println!("{}", rng.gen_range(0..10));
```

## Implementations

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

B1: SampleBorrow<X>,

B2: SampleBorrow<X>,

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

B1: SampleBorrow<X>,

B2: SampleBorrow<X>,

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>,

B2: SampleBorrow<X>,

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

B1: SampleBorrow<X>,

B2: SampleBorrow<X>,

Create a new `Uniform`

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

(inclusive). Panics if `low > high`

.

## Trait Implementations

### impl<X> Clone for Uniform<X> where

X: Clone + SampleUniform,

<X as SampleUniform>::Sampler: Clone,

### impl<X> Clone for Uniform<X> where

X: Clone + SampleUniform,

<X as SampleUniform>::Sampler: Clone,

### impl<X> Debug for Uniform<X> where

X: Debug + SampleUniform,

<X as SampleUniform>::Sampler: Debug,

### impl<X> Debug for Uniform<X> where

X: Debug + SampleUniform,

<X as SampleUniform>::Sampler: Debug,

### impl<'de, X> Deserialize<'de> for Uniform<X> where

X: SampleUniform,

<X as SampleUniform>::Sampler: Deserialize<'de>,

### impl<'de, X> Deserialize<'de> for Uniform<X> where

X: SampleUniform,

<X as SampleUniform>::Sampler: Deserialize<'de>,

#### pub fn deserialize<__D>(

__deserializer: __D

) -> Result<Uniform<X>, <__D as Deserializer<'de>>::Error> where

__D: Deserializer<'de>,

#### pub fn deserialize<__D>(

__deserializer: __D

) -> Result<Uniform<X>, <__D as Deserializer<'de>>::Error> where

__D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more

Generate a random value of `T`

, using `rng`

as the source of randomness.

#### fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>ⓘ where

R: Rng,

#### fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T>ⓘ where

R: Rng,

Create an iterator that generates random values of `T`

, using `rng`

as
the source of randomness. Read more

Performs the conversion.

### impl<X> Serialize for Uniform<X> where

X: SampleUniform,

<X as SampleUniform>::Sampler: Serialize,

### impl<X> Serialize for Uniform<X> where

X: SampleUniform,

<X as SampleUniform>::Sampler: Serialize,

#### pub fn serialize<__S>(

&self,

__serializer: __S

) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error> where

__S: Serializer,

#### pub fn serialize<__S>(

&self,

__serializer: __S

) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error> where

__S: Serializer,

Serialize this value into the given Serde serializer. Read more

### impl<X> Copy for Uniform<X> where

X: Copy + SampleUniform,

<X as SampleUniform>::Sampler: Copy,

## Auto Trait Implementations

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

<X as SampleUniform>::Sampler: RefUnwindSafe,

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

<X as SampleUniform>::Sampler: Send,

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

<X as SampleUniform>::Sampler: Sync,

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

<X as SampleUniform>::Sampler: Unpin,

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

<X as SampleUniform>::Sampler: UnwindSafe,

## Blanket Implementations

Mutably borrows from an owned value. Read more