diff options
| author | ST-DDT <[email protected]> | 2024-02-27 20:57:27 +0100 |
|---|---|---|
| committer | GitHub <[email protected]> | 2024-02-27 19:57:27 +0000 |
| commit | 4ab073164beab2bf690d7fffc7773e7b76d8e07e (patch) | |
| tree | 1549dc0aba1646f27edcc00f1651f74a0b5b21fb /src/internal | |
| parent | 0d4cba637cdd38e7757ecca1b7eae75d7a737fa8 (diff) | |
| download | faker-4ab073164beab2bf690d7fffc7773e7b76d8e07e.tar.xz faker-4ab073164beab2bf690d7fffc7773e7b76d8e07e.zip | |
feat!: high precision random number generator (#2357)
Diffstat (limited to 'src/internal')
| -rw-r--r-- | src/internal/mersenne.ts | 27 |
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); + } + }, + }; +} |
