Pseudorandom Numbers, Seeds, and Reproducibility
Install and import#
npm install fintech-algorithmsimport { pseudorandomNumbersSeedsAndReproducibility } from "fintech-algorithms/foundations/statistical-computing-and-reproducibility/pseudorandom-numbers-seeds-and-reproducibility";Signature#
pseudorandomNumbersSeedsAndReproducibility(input)Draws a run of unit-interval numbers from a seeded linear congruential generator, so the same seed always replays the same stream.
Parameters#
| Name | Type | Notes |
|---|---|---|
input | D00Input | Reads seed, the 32-bit starting state, and sampleCount, how many draws to take. A non-empty values list of finite numbers must also be present; it is validated but not used here. |
Returns#
D00Output
samples holds the draws, each in the half-open interval from zero to one, seed is echoed back, finalState is the generator state left after the last draw, and reproducible is always true.
Errors#
- When
valuesis absent, empty, or holds a non-finite number — throws RangeError - When
sampleCountis below one — throws RangeError
Complexity: time O(n),
space O(n).
Worked example#
verified This is the worked example published in the article, replayed by the test suite on every run. The output cannot drift.
Input#
{
"values": [1, 2, 3, 4, 5],
"floatingValue": 0.1,
"maxSafeMagnitude": 1.7976931348623157e+308,
"window": 3,
"rawValues": [1, null, 2, "bad", 3],
"invalidPolicy": "drop-and-report",
"seed": 42,
"sampleCount": 5,
"leftVector": [
{
"index": "A",
"value": 1
},
{
"index": "B",
"value": 2
}
],
"rightVector": [
{
"index": "B",
"value": 20
},
{
"index": "C",
"value": 30
}
],
"train": [10, 12, 14, 16],
"test": [18, 20],
"actual": [1, 2.0000001, 3],
"expected": [1, 2, 3]
}Showing 14 of 18 fields.
Call#
pseudorandomNumbersSeedsAndReproducibility(input)Returns#
object with 2 fields: samples, seed
{
"samples": [
0.2523451747838408,
0.08812504541128874,
0.5772811982315034,
0.22255426598712802,
0.37566019711084664
],
"seed": 42
}Diagrams#
How it works#
This page states the contract — how to call it correctly. The article explains the concept: why it works, and where it breaks.
References#
- Floating-Point Arithmetic — IEEE 754-2019
- math.fsum — Python Documentation
- Random Sampling — NumPy Documentation
- Common Pitfalls and Recommended Practices — scikit-learn
- Historical-example decision