Struct flow_sdk::algorithms::secp256k1::rand::distributions::uniform::UniformInt[][src]

pub struct UniformInt<X> { /* fields omitted */ }
Expand description

The back-end implementing UniformSampler for integer types.

Unless you are implementing UniformSampler for your own type, this type should not be used directly, use Uniform instead.

Implementation notes

For a closed range, the number of possible numbers we should generate is range = (high - low + 1). It is not possible to end up with a uniform distribution if we map all the random integers that can be generated to this range. We have to map integers from a zone that is a multiple of the range. The rest of the integers, that cause a bias, are rejected.

The problem with range is that to cover the full range of the type, it has to store unsigned_max + 1, which can’t be represented. But if the range covers the full range of the type, no modulus is needed. A range of size 0 can’t exist, so we use that to represent this special case. Wrapping arithmetic even makes representing unsigned_max + 1 as 0 simple.

We don’t calculate zone directly, but first calculate the number of integers to reject. To handle unsigned_max + 1 not fitting in the type, we use: ints_to_reject = (unsigned_max + 1) % range; ints_to_reject = (unsigned_max - range + 1) % range;

The smallest integer PRNGs generate is u32. That is why for small integer sizes (i8/u8 and i16/u16) there is an optimization: don’t pick the largest zone that can fit in the small type, but pick the largest zone that can fit in an u32. ints_to_reject is always less than half the size of the small integer. This means the first bit of zone is always 1, and so are all the other preceding bits of a larger integer. The easiest way to grow the zone for the larger type is to simply sign extend it.

An alternative to using a modulus is widening multiply: After a widening multiply by range, the result is in the high word. Then comparing the low word against zone makes sure our distribution is uniform.

Trait Implementations

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

Formats the value using the given formatter. Read more

The type sampled by this implementation.

Construct self, with inclusive lower bound and exclusive upper bound [low, high). Read more

Construct self, with inclusive bounds [low, high]. Read more

Sample a value.

Sample a single value uniformly from a range with inclusive lower bound and exclusive upper bound [low, high). Read more

The type sampled by this implementation.

Construct self, with inclusive lower bound and exclusive upper bound [low, high). Read more

Construct self, with inclusive bounds [low, high]. Read more

Sample a value.

Sample a single value uniformly from a range with inclusive lower bound and exclusive upper bound [low, high). Read more

The type sampled by this implementation.

Construct self, with inclusive lower bound and exclusive upper bound [low, high). Read more

Construct self, with inclusive bounds [low, high]. Read more

Sample a value.

Sample a single value uniformly from a range with inclusive lower bound and exclusive upper bound [low, high). Read more

The type sampled by this implementation.

Construct self, with inclusive lower bound and exclusive upper bound [low, high). Read more

Construct self, with inclusive bounds [low, high]. Read more

Sample a value.

Sample a single value uniformly from a range with inclusive lower bound and exclusive upper bound [low, high). Read more

The type sampled by this implementation.

Construct self, with inclusive lower bound and exclusive upper bound [low, high). Read more

Construct self, with inclusive bounds [low, high]. Read more

Sample a value.

Sample a single value uniformly from a range with inclusive lower bound and exclusive upper bound [low, high). Read more

The type sampled by this implementation.

Construct self, with inclusive lower bound and exclusive upper bound [low, high). Read more

Construct self, with inclusive bounds [low, high]. Read more

Sample a value.

Sample a single value uniformly from a range with inclusive lower bound and exclusive upper bound [low, high). Read more

The type sampled by this implementation.

Construct self, with inclusive lower bound and exclusive upper bound [low, high). Read more

Construct self, with inclusive bounds [low, high]. Read more

Sample a value.

Sample a single value uniformly from a range with inclusive lower bound and exclusive upper bound [low, high). Read more

The type sampled by this implementation.

Construct self, with inclusive lower bound and exclusive upper bound [low, high). Read more

Construct self, with inclusive bounds [low, high]. Read more

Sample a value.

Sample a single value uniformly from a range with inclusive lower bound and exclusive upper bound [low, high). Read more

The type sampled by this implementation.

Construct self, with inclusive lower bound and exclusive upper bound [low, high). Read more

Construct self, with inclusive bounds [low, high]. Read more

Sample a value.

Sample a single value uniformly from a range with inclusive lower bound and exclusive upper bound [low, high). Read more

The type sampled by this implementation.

Construct self, with inclusive lower bound and exclusive upper bound [low, high). Read more

Construct self, with inclusive bounds [low, high]. Read more

Sample a value.

Sample a single value uniformly from a range with inclusive lower bound and exclusive upper bound [low, high). Read more

The type sampled by this implementation.

Construct self, with inclusive lower bound and exclusive upper bound [low, high). Read more

Construct self, with inclusive bounds [low, high]. Read more

Sample a value.

Sample a single value uniformly from a range with inclusive lower bound and exclusive upper bound [low, high). Read more

The type sampled by this implementation.

Construct self, with inclusive lower bound and exclusive upper bound [low, high). Read more

Construct self, with inclusive bounds [low, high]. Read more

Sample a value.

Sample a single value uniformly from a range with inclusive lower bound and exclusive upper bound [low, high). Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Performs the conversion.

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more

Instruments this type with the current Span, returning an Instrumented wrapper. Read more

Performs the conversion.

Wrap the input message T in a tonic::Request

The resulting type after obtaining ownership.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more