PCG Random Number Generation, Fortran Edition
This is a PCG implemented in Fortran 2008.
(C is used for testing only.)
This library is based on PCG implemented in C.
The iso_fortran_env
intrinsic MODULE
does not have support for int128
,
so this library does not implement PCGs requiring int128
.
state |
result |
mcg |
oneseq |
setseq |
unique |
int16 |
int8 |
✓ |
✓ |
✓ |
✓ |
int32 |
int16 |
✓ |
✓ |
✓ |
✓ |
int64 |
int32 |
✓ |
✓ |
✓ |
✓ |
int128 |
int64 |
✗ |
✗ |
✗ |
✗ |
Output function : RXS M XS
state |
result |
mcg |
oneseq |
setseq |
unique |
int8 |
int8 |
✗ |
✓ |
✓ |
✓ |
int16 |
int16 |
✗ |
✓ |
✓ |
✓ |
int32 |
int32 |
✗ |
✓ |
✓ |
✓ |
int64 |
int64 |
✗ |
✓ |
✓ |
✓ |
int128 |
int128 |
✗ |
✗ |
✗ |
✗ |
state |
result |
mcg |
oneseq |
setseq |
unique |
int16 |
int8 |
✓ |
✓ |
✓ |
✓ |
int32 |
int16 |
✓ |
✓ |
✓ |
✓ |
int64 |
int32 |
✓ |
✓ |
✓ |
✓ |
int128 |
int64 |
✗ |
✗ |
✗ |
✗ |
state |
result |
mcg |
oneseq |
setseq |
unique |
int16 |
int8 |
✓ |
✓ |
✓ |
✓ |
int32 |
int16 |
✓ |
✓ |
✓ |
✓ |
int64 |
int32 |
✓ |
✓ |
✓ |
✓ |
int128 |
int64 |
✗ |
✗ |
✗ |
✗ |
state |
result |
mcg |
oneseq |
setseq |
unique |
int64 |
int32 |
✓ |
✓ |
✓ |
✓ |
int128 |
int64 |
✗ |
✗ |
✗ |
✗ |
Output function : XSL RR RR
state |
result |
mcg |
oneseq |
setseq |
unique |
int64 |
int64 |
✗ |
✓ |
✓ |
✓ |
int128 |
int128 |
✗ |
✗ |
✗ |
✗ |
In order to validate the implementation of this module,
we do a comparison with the original C implementation.