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 uniform(string boundaries = "[)", T1, T2)
(
T1 a,
T2 b
)
if (!is(CommonType!(T1, T2) == void));
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 uniform(T, UniformRandomNumberGenerator)
(
ref UniformRandomNumberGenerator urng
)
if (!is(T == enum) && (isIntegral!T || isSomeChar!T) && isUniformRNG!UniformRandomNumberGenerator);
auto uniform(T)()
if (!is(T == enum) && (isIntegral!T || isSomeChar!T));
auto uniform(E, UniformRandomNumberGenerator)
(
ref UniformRandomNumberGenerator urng
)
if (is(E == enum) && isUniformRNG!UniformRandomNumberGenerator);
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) // https://issues.dlang.org/show_bug.cgi?id=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)