gKit2 light
Loading...
Searching...
No Matches
Threefry Struct Reference

Classes

struct  array2x32

Public Types

typedef unsigned result_type

Public Member Functions

 Threefry (const uint64_t s)
 Threefry (const unsigned hi, const unsigned lo=0xacac820c)
void seed (const unsigned hi, const unsigned lo=0xacac820c)
void seed64 (const uint64_t s)
Threefryindex (const uint64_t i)
unsigned sample ()
unsigned sample_range (const unsigned range)
unsigned operator() ()

Static Public Member Functions

static constexpr unsigned min ()
static constexpr unsigned max ()

Detailed Description

Definition at line 215 of file rand123.h.


Class Documentation

◆ Threefry::array2x32

struct Threefry::array2x32

Definition at line 261 of file rand123.h.

Class Members
unsigned v[2]

Member Typedef Documentation

◆ result_type

typedef unsigned Threefry::result_type

Definition at line 259 of file rand123.h.

Constructor & Destructor Documentation

◆ Threefry() [1/3]

Threefry::Threefry ( )
inline

Definition at line 217 of file rand123.h.

217: n(), key() { seed64(0xcf492074862957a3); }

◆ Threefry() [2/3]

Threefry::Threefry ( const uint64_t s)
inline

Definition at line 218 of file rand123.h.

218: n(), key() { seed64(s); }

◆ Threefry() [3/3]

Threefry::Threefry ( const unsigned hi,
const unsigned lo = 0xacac820c )
inline

Definition at line 219 of file rand123.h.

219: n(), key() { seed(hi, lo); }

Member Function Documentation

◆ seed()

void Threefry::seed ( const unsigned hi,
const unsigned lo = 0xacac820c )
inline

Definition at line 221 of file rand123.h.

221{ seed64( uint64_t(hi) << 32 | uint64_t(lo) ); }

◆ seed64()

void Threefry::seed64 ( const uint64_t s)
inline

Definition at line 222 of file rand123.h.

223 {
224 n= 0;
225 key= { unsigned(s >> 32), unsigned(s) };
226 }

◆ index()

Threefry & Threefry::index ( const uint64_t i)
inline

Definition at line 228 of file rand123.h.

229 {
230 n= i;
231 return *this;
232 }

◆ sample()

unsigned Threefry::sample ( )
inline

Definition at line 234 of file rand123.h.

235 {
236 n++;
237 array2x32 ctr= { { unsigned(n >>32), unsigned(n) } };
238 return threefry2x32<13>(ctr, key).v[0];
239 }

◆ sample_range()

unsigned Threefry::sample_range ( const unsigned range)
inline

Definition at line 241 of file rand123.h.

242 {
243 // Efficiently Generating a Number in a Range
244 // cf http://www.pcg-random.org/posts/bounded-rands.html
245 unsigned divisor= ((-range) / range) + 1; // (2^32) / range
246 if(divisor == 0) return 0;
247
248 while(true)
249 {
250 unsigned x= sample() / divisor;
251 if(x < range) return x;
252 }
253 }

◆ operator()()

unsigned Threefry::operator() ( )
inline

Definition at line 256 of file rand123.h.

256{ return sample(); }

◆ min()

constexpr unsigned Threefry::min ( )
inlinestaticconstexpr

Definition at line 257 of file rand123.h.

257{ return 0; }

◆ max()

constexpr unsigned Threefry::max ( )
inlinestaticconstexpr

Definition at line 258 of file rand123.h.

258{ return ~unsigned(0); }

The documentation for this struct was generated from the following file: