Mercurial > hg > CbC > CbC_gcc
view libphobos/libdruntime/rt/util/random.d @ 158:494b0b89df80 default tip
...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 25 May 2020 18:13:55 +0900 |
parents | 1830386684a0 |
children |
line wrap: on
line source
/** * Random number generators for internal usage. * * Copyright: Copyright Digital Mars 2014. * License: $(WEB www.boost.org/LICENSE_1_0.txt, Boost License 1.0). */ module rt.util.random; struct Rand48 { private ulong rng_state; @safe @nogc nothrow: void defaultSeed() { import ctime = core.stdc.time : time; seed(cast(uint)ctime.time(null)); } pure: void seed(uint seedval) { assert(seedval); rng_state = cast(ulong)seedval << 16 | 0x330e; popFront(); } auto opCall() { auto result = front; popFront(); return result; } @property uint front() { return cast(uint)(rng_state >> 16); } void popFront() { immutable ulong a = 25214903917; immutable ulong c = 11; immutable ulong m_mask = (1uL << 48uL) - 1; rng_state = (a*rng_state+c) & m_mask; } enum empty = false; }