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: X
Implementations§
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