View source code
Display the source code in std/random.d from which this page was generated on github.
Report a bug
If you spot a problem with this page, click here to create a Bugzilla issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page. Requires a signed-in GitHub account. This works well for small changes. If you'd like to make larger changes you may want to consider using local clone.

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

NameDescription
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.min, T.max] 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

NameDescription
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)

License

Boost License 1.0.