Skip to content

A high-performance C++ pseudo-random-number library suitable for scientific simulation.

License

Notifications You must be signed in to change notification settings

CartwrightLab/cxxutils

Repository files navigation

MinionRNG

MinionRNG is a high-performance pseudo-random-number library suitable for scientific simulation. It is based on the xoshiro256** algorithm developed by David Blackman and Sebastiano Vigna.

Copyright © 2019 Reed A. Cartwright, PhD <[email protected]>

See below for example usage.

Example

#include <cstdio>

#include "minion.hpp"

// create a PRNG object with default seed
minion::Random mrand;

int main() {
    // create a 64-bit pre-seed using (1) well-mixed bits, (2) pid, (3) time, and (4) std::random_device
    uint64_t seed64 = minion::create_uint64_seed(minion::create_seed_seq());
    // reduce seed to 31 bits (not needed, but easier for users to work with)
    int seed = seed64 >> 33;
    // reseed mrand
    mrand.seed(seed);
    printf("Seed is %d\n",seed);

    // generate random values
    for(int i=0;i<1000;++i) {
        // uniformly distributed integers between [0,2^64)
        uint64_t u = mrand.u64();
        // uniformly distributed floating-point numbers between (0,1)
        double f = mrand.f52();

        printf("%d %lu %f\n", i, u, f);
    }
    return 0;
}

About

A high-performance C++ pseudo-random-number library suitable for scientific simulation.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published