FORTRAN SOFTWARE CATALOG

Repository owner: Jannis Teunissen (jannisteunissen)

rng-fortran

Xoroshiro128+ generator with uniform, normal and Poisson sampling.

Repository · Pinned source (5ead95f43632) · Try in playground · Checked package example

GAMS classifications

About this package

Category
Random numbers
License
GPL-3.0

Topics: normal-distribution, poisson-distribution, random, random-number-generation, random-number-generator, rng, xoroshiro, xoroshiro128, xoroshiro128plus

Classification scope and review notes

Xoroshiro128+ pseudo-random generator. An FPM wrapper selects unchanged m_random.f90 and uses -fwrapv for its intentional signed-integer wraparound. Two fresh generators replay 10000 seeded uniform draws exactly; the main checks the implementation range [0,1), broad uniform/normal/Poisson(4) moment tolerances, nonnegative counts and unit circle/sphere norms. These are deterministic smoke checks, not statistical quality or cryptographic validation. OpenMP, jump independence, large Poisson rates and all distributions are not covered. A separate hosted reproducer confirms that set_seed does not clear the cached second normal after an odd normal() call; use a fresh generator to restart normal sequences. The selected replay uses fresh objects.

Package dependencies

Resolved GitHub repositories used by the verified playground build, combining direct and indirect dependencies. This list does not describe internal module dependencies or native system libraries.

Required by this build

No additional GitHub package dependencies were recorded for this verified build.

Build record verified 2026-10-29.

Used by (0 selected packages)

No other selected build records this repository as a dependency. This is not a measure of usage outside the catalog.

Reviewed procedures

These mappings have pinned source evidence. A checked package example may exercise only some of them; source review is not a numerical benchmark.

rng_t%set_seed / unif_01

Module: m_random

L6a21 L6c

L6a21: verified; L6c: source-supported

Derivatives / callbacks: not applicable

Xoroshiro128+ pseudo-random generator. An FPM wrapper selects unchanged m_random.f90 and uses -fwrapv for its intentional signed-integer wraparound. Two fresh generators replay 10000 seeded uniform draws exactly; the main checks the implementation range [0,1), broad uniform/normal/Poisson(4) moment tolerances, nonnegative counts and unit circle/sphere norms. These are deterministic smoke checks, not statistical quality or cryptographic validation. OpenMP, jump independence, large Poisson rates and all distributions are not covered. A separate hosted reproducer confirms that set_seed does not clear the cached second normal after an odd normal() call; use a fresh generator to restart normal sequences. The selected replay uses fresh objects. Dedicated L6a21 driver checks 15 interleaved streams against unsigned-Python prefixes and rolling hashes, exact 52-bit integer/uniform conversion, seeded restarts and zero/default/two explicit jumps. Jump references use independent GF(2) transition-matrix exponentiation to 2**64. This establishes fixed bitstream and seed/jump API behavior, not statistical quality or thread independence; the cached-normal reseeding defect remains unresolved.

Pinned source: m_random.f90

Author examples/tests: example.f90

Load checked GAMS driver: gams-rng-xoroshiro-reference

rng_t%normal / poisson / circle / sphere

Module: m_random

L6

L6: verified

Derivatives / callbacks: not applicable

Xoroshiro128+ pseudo-random generator. An FPM wrapper selects unchanged m_random.f90 and uses -fwrapv for its intentional signed-integer wraparound. Two fresh generators replay 10000 seeded uniform draws exactly; the main checks the implementation range [0,1), broad uniform/normal/Poisson(4) moment tolerances, nonnegative counts and unit circle/sphere norms. These are deterministic smoke checks, not statistical quality or cryptographic validation. OpenMP, jump independence, large Poisson rates and all distributions are not covered. A separate hosted reproducer confirms that set_seed does not clear the cached second normal after an odd normal() call; use a fresh generator to restart normal sequences. The selected replay uses fresh objects. Dedicated L6 consumer checks exact replay with fresh seeded objects, 60000 normal and 60000 small-rate Poisson samples against broad analytic moment/zero-probability tolerances, and 3000 circle plus 3000 sphere samples against exact norm references and broad coordinate moments. These are fixed-seed deterministic smoke checks, not statistical or cryptographic quality certification. Fresh allocations avoid the known cached-normal reseeding issue; that issue remains unresolved. Poisson rates >=10/rejection sampling, parallel/jump independence and full distribution coverage are not verified.

Pinned source: m_random.f90

Author examples/tests: example.f90

Load checked GAMS driver: gams-rng-distributions-reference