pub struct UniformFloat<X> {
low: X,
scale: X,
}Expand description
The back-end implementing UniformSampler for floating-point types.
Unless you are implementing UniformSampler for your own type, this type
should not be used directly, use Uniform instead.
§Implementation notes
UniformFloat implementations convert RNG output to a float in the range
[1, 2) via transmutation, map this to [0, 1), then scale and translate
to the desired range. Values produced this way have what equals 23 bits of
random digits for an f32 and 52 for an f64.
§Bias and range errors
Bias may be expected within the least-significant bit of the significand.
It is not guaranteed that exclusive limits of a range are respected; i.e.
when sampling the range [a, b) it is not guaranteed that b is never
sampled.
Fields§
§low: X§scale: XImplementations§
Source§impl UniformFloat<f32>
impl UniformFloat<f32>
Sourcefn new_bounded(low: f32, high: f32, scale: f32) -> Self
fn new_bounded(low: f32, high: f32, scale: f32) -> Self
Construct, reducing scale as required to ensure that rounding
can never yield values greater than high.
Note: though it may be tempting to use a variant of this method
to ensure that samples from [low, high) are always strictly
less than high, this approach may be very slow where
scale.abs() is much smaller than high.abs()
(example: low=0.99999999997819644, high=1.).
Source§impl UniformFloat<f64>
impl UniformFloat<f64>
Sourcefn new_bounded(low: f64, high: f64, scale: f64) -> Self
fn new_bounded(low: f64, high: f64, scale: f64) -> Self
Construct, reducing scale as required to ensure that rounding
can never yield values greater than high.
Note: though it may be tempting to use a variant of this method
to ensure that samples from [low, high) are always strictly
less than high, this approach may be very slow where
scale.abs() is much smaller than high.abs()
(example: low=0.99999999997819644, high=1.).
Trait Implementations§
Source§impl<X: Clone> Clone for UniformFloat<X>
impl<X: Clone> Clone for UniformFloat<X>
Source§fn clone(&self) -> UniformFloat<X>
fn clone(&self) -> UniformFloat<X>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<X: Debug> Debug for UniformFloat<X>
impl<X: Debug> Debug for UniformFloat<X>
Source§impl<X: PartialEq> PartialEq for UniformFloat<X>
impl<X: PartialEq> PartialEq for UniformFloat<X>
Source§impl UniformSampler for UniformFloat<f32>
impl UniformSampler for UniformFloat<f32>
Source§fn new<B1, B2>(low_b: B1, high_b: B2) -> Result<Self, Error>
fn new<B1, B2>(low_b: B1, high_b: B2) -> Result<Self, Error>
[low, high). Read moreSource§fn new_inclusive<B1, B2>(low_b: B1, high_b: B2) -> Result<Self, Error>
fn new_inclusive<B1, B2>(low_b: B1, high_b: B2) -> Result<Self, Error>
[low, high]. Read moreSource§fn sample_single<R: Rng + ?Sized, B1, B2>(
low_b: B1,
high_b: B2,
rng: &mut R,
) -> Result<Self::X, Error>
fn sample_single<R: Rng + ?Sized, B1, B2>( low_b: B1, high_b: B2, rng: &mut R, ) -> Result<Self::X, Error>
[low, high). Read moreSource§impl UniformSampler for UniformFloat<f64>
impl UniformSampler for UniformFloat<f64>
Source§fn new<B1, B2>(low_b: B1, high_b: B2) -> Result<Self, Error>
fn new<B1, B2>(low_b: B1, high_b: B2) -> Result<Self, Error>
[low, high). Read moreSource§fn new_inclusive<B1, B2>(low_b: B1, high_b: B2) -> Result<Self, Error>
fn new_inclusive<B1, B2>(low_b: B1, high_b: B2) -> Result<Self, Error>
[low, high]. Read moreSource§fn sample_single<R: Rng + ?Sized, B1, B2>(
low_b: B1,
high_b: B2,
rng: &mut R,
) -> Result<Self::X, Error>
fn sample_single<R: Rng + ?Sized, B1, B2>( low_b: B1, high_b: B2, rng: &mut R, ) -> Result<Self::X, Error>
[low, high). Read more