limitRangeBiased
Convert a random integer 0 <= random_int <= maxValue(T), into an integer 0 <= result < less_than. This function introduces a minor bias.
Function parameters
Parameters
- T:type
- random_int:T
- less_than:T
Fast unbiased random numbers.
Types
- DefaultPrng
- Fast unbiased random numbers.
- DefaultCsprng
- Cryptographically secure random numbers.
Functions in this namespace
Functions
- bytes
- Read random bytes into the specified buffer until full.
- enumValue
- Returns a random value from an enum, evenly distributed.
- enumValueWithIndex
- Returns a random value from an enum, evenly distributed.
- int
- Returns a random int `i` such that `minInt(T) <= i <= maxInt(T)`.
- uintLessThanBiased
- Constant-time implementation off `uintLessThan`.
- uintLessThan
- Returns an evenly distributed random unsigned integer `0 <= i < less_than`.
- uintAtMostBiased
- Constant-time implementation off `uintAtMost`.
- uintAtMost
- Returns an evenly distributed random unsigned integer `0 <= i <= at_most`.
- intRangeLessThanBiased
- Constant-time implementation off `intRangeLessThan`.
- intRangeLessThan
- Returns an evenly distributed random integer `at_least <= i < less_than`.
- intRangeAtMostBiased
- Constant-time implementation off `intRangeAtMostBiased`.
- intRangeAtMost
- Returns an evenly distributed random integer `at_least <= i <= at_most`.
- float
- Return a floating point value evenly distributed in the range [0, 1).
- floatNorm
- Return a floating point value normally distributed with mean = 0, stddev = 1.
- floatExp
- Return an exponentially distributed float with a rate parameter of 1.
- shuffle
- Shuffle a slice into a random order.
- shuffleWithIndex
- Shuffle a slice into a random order, using an index of a
- weightedIndex
- Randomly selects an index into `proportions`, where the likelihood of each
- limitRangeBiased
- Convert a random integer 0 <= random_int <= maxValue(T),
Source
Implementation
pub fn limitRangeBiased(comptime T: type, random_int: T, less_than: T) T {
comptime assert(@typeInfo(T).int.signedness == .unsigned);
const bits = @typeInfo(T).int.bits;
// adapted from:
// http://www.pcg-random.org/posts/bounded-rands.html
// "Integer Multiplication (Biased)"
const m = math.mulWide(T, random_int, less_than);
return @intCast(m >> bits);
}