aboutsummaryrefslogtreecommitdiff
path: root/src/internal
diff options
context:
space:
mode:
authorST-DDT <[email protected]>2024-02-27 20:57:27 +0100
committerGitHub <[email protected]>2024-02-27 19:57:27 +0000
commit4ab073164beab2bf690d7fffc7773e7b76d8e07e (patch)
tree1549dc0aba1646f27edcc00f1651f74a0b5b21fb /src/internal
parent0d4cba637cdd38e7757ecca1b7eae75d7a737fa8 (diff)
downloadfaker-4ab073164beab2bf690d7fffc7773e7b76d8e07e.tar.xz
faker-4ab073164beab2bf690d7fffc7773e7b76d8e07e.zip
feat!: high precision random number generator (#2357)
Diffstat (limited to 'src/internal')
-rw-r--r--src/internal/mersenne.ts27
1 files changed, 24 insertions, 3 deletions
diff --git a/src/internal/mersenne.ts b/src/internal/mersenne.ts
index 2372e364..d01b5ee9 100644
--- a/src/internal/mersenne.ts
+++ b/src/internal/mersenne.ts
@@ -328,9 +328,7 @@ export class MersenneTwister19937 {
/**
* Generates a MersenneTwister19937 randomizer with 32 bits of precision.
- * This is the default randomizer used by Faker.
- *
- * @internal
+ * This is the default randomizer used by faker prior to v9.0.
*/
export function generateMersenne32Randomizer(): Randomizer {
const twister = new MersenneTwister19937();
@@ -350,3 +348,26 @@ export function generateMersenne32Randomizer(): Randomizer {
},
};
}
+
+/**
+ * Generates a MersenneTwister19937 randomizer with 53 bits of precision.
+ * This is the default randomizer used by faker starting with v9.0.
+ */
+export function generateMersenne53Randomizer(): Randomizer {
+ const twister = new MersenneTwister19937();
+
+ twister.initGenrand(Math.ceil(Math.random() * Number.MAX_SAFE_INTEGER));
+
+ return {
+ next(): number {
+ return twister.genrandRes53();
+ },
+ seed(seed: number | number[]): void {
+ if (typeof seed === 'number') {
+ twister.initGenrand(seed);
+ } else if (Array.isArray(seed)) {
+ twister.initByArray(seed, seed.length);
+ }
+ },
+ };
+}