std.random.uniform - multiple declarations
Function uniform
Generates a number between a and b. The boundaries
parameter controls the shape of the interval (open vs. closed on
either side). Valid values for boundaries are "[]", "(]", "[)", and "()". The default interval
is closed to the left and open to the right. The version that does not
take urng uses the default generator rndGen.
auto auto uniform(string boundaries = "[)", T1, T2)
(
T1 a,
T2 b
)
if (!is(CommonType!(T1, T2) == void));
auto auto uniform(string boundaries = "[)", T1, T2, UniformRandomNumberGenerator)
(
T1 a,
T2 b,
ref UniformRandomNumberGenerator urng
)
if (isFloatingPoint!(CommonType!(T1, T2)) && isUniformRNG!UniformRandomNumberGenerator);
Parameters
| Name | Description |
|---|---|
| a | lower bound of the uniform distribution |
| b | upper bound of the uniform distribution |
| urng | (optional) random number generator to use;
if not specified, defaults to rndGen |
Returns
A single random variate drawn from the uniform distribution
between a and b, whose type is the common type of
these parameters
Example
auto rnd = Random(unpredictableSeed);
// Generate an integer in [0, 1023]
auto a = uniform(0, 1024, rnd);
assert(0 <= a && a < 1024);
// Generate a float in [0, 1)
auto b = uniform(0.0f, 1.0f, rnd);
assert(0 <= b && b < 1);
// Generate a float in [0, 1]
b = uniform!"[]"(0.0f, 1.0f, rnd);
assert(0 <= b && b <= 1);
// Generate a float in (0, 1)
b = uniform!"()"(0.0f, 1.0f, rnd);
assert(0 < b && b < 1);
Example
Create an array of random numbers using range functions and UFCS
import std .array : array;
import std .range : generate, takeExactly;
int[] arr = generate!(() => uniform(0, 100)) .takeExactly(10) .array;
writeln(arr .length); // 10
assert(arr[0] >= 0 && arr[0] < 100);
Function uniform
Generates a uniformly-distributed number in the range [T for any integral or character type T. If no random
number generator is passed, uses the default rndGen.
auto auto uniform(T, UniformRandomNumberGenerator)
(
ref UniformRandomNumberGenerator urng
)
if (!is(T == enum) && (isIntegral!T || isSomeChar!T) && isUniformRNG!UniformRandomNumberGenerator);
auto auto uniform(T)()
if (!is(T == enum) && (isIntegral!T || isSomeChar!T));
auto auto uniform(E, UniformRandomNumberGenerator)
(
ref UniformRandomNumberGenerator urng
)
if (is(E == enum) && isUniformRNG!UniformRandomNumberGenerator);
auto auto uniform(E)()
if (is(E == enum));
If an enum is used as type, the random variate is drawn with
equal probability from any of the possible values of the enum E.
Parameters
| Name | Description |
|---|---|
| urng | (optional) random number generator to use;
if not specified, defaults to rndGen |
Returns
Random variate drawn from the uniform distribution across all
possible values of the integral, character or enum type T.
Example
auto rnd = MinstdRand0(42);
writeln(rnd .uniform!ubyte); // 102
writeln(rnd .uniform!ulong); // 4838462006927449017
enum Fruit { apple, mango, pear }
version (X86_64) // Issue 15147
writeln(rnd .uniform!Fruit); // Fruit.mango
Authors
Andrei Alexandrescu Masahiro Nakagawa (Xorshift random generator) Joseph Rushton Wakeling (Algorithm D for random sampling) Ilya Yaroshenko (Mersenne Twister implementation, adapted from mir-random)