Produces random values of type T uniformly distributed in an interval.
Declared in <absl/random/distributions.h>
template<
typename R = void,
typename TagType,
typename URBG>
R
Uniform(
TagType tag,
URBG&& urbg,
R lo,
R hi)
requires !std::is_same_v<R, void>;
absl::Uniform() produces random values of type T uniformly distributed in a defined interval {lo, hi}. The interval tag defines the type of interval which should be one of the following possible values:
* absl::IntervalOpenOpen * absl::IntervalOpenClosed * absl::IntervalClosedOpen * absl::IntervalClosedClosed
where "open" refers to an exclusive value (excluded) from the output, while "closed" refers to an inclusive value (included) from the output.
In the absence of an explicit return type T, absl::Uniform() will deduce the return type based on the provided endpoint arguments {A lo, B hi}. Given these endpoints, one of {A, B} will be chosen as the return type, if a type can be implicitly converted into the other in a lossless way. The lack of any such implicit conversion between {A, B} will produce a compile-time error
See https://en.wikipedia.org/wiki/Uniform_distribution_(continuous)
Example:
absl::BitGen bitgen;
// Produce a random float value between 0.0 and 1.0, inclusive auto x = absl::Uniform(absl::IntervalClosedClosed, bitgen, 0.0f, 1.0f);
// The most common interval of absl::IntervalClosedOpen is available by // default:
auto x = absl::Uniform(bitgen, 0.0f, 1.0f);
// Return-types are typically inferred from the arguments, however callers // can optionally provide an explicit return-type to the template.
auto x = absl::Uniform<float>(bitgen, 0, 1);
A random value uniformly distributed in the interval.
| Name | Description |
|---|---|
| tag | The interval tag selecting which endpoints are included. |
| urbg | The uniform random bit generator. |
| lo | The lower bound of the interval. |
| hi | The upper bound of the interval. |