randomInt.js (2734B)
1 import { factory } from '../../utils/factory.js'; 2 import { randomMatrix } from './util/randomMatrix.js'; 3 import { createRng } from './util/seededRNG.js'; 4 import { isMatrix } from '../../utils/is.js'; 5 var name = 'randomInt'; 6 var dependencies = ['typed', 'config', '?on']; 7 export var createRandomInt = /* #__PURE__ */factory(name, dependencies, _ref => { 8 var { 9 typed, 10 config, 11 on 12 } = _ref; 13 // seeded pseudo random number generator 14 var rng = createRng(config.randomSeed); 15 16 if (on) { 17 on('config', function (curr, prev) { 18 if (curr.randomSeed !== prev.randomSeed) { 19 rng = createRng(curr.randomSeed); 20 } 21 }); 22 } 23 /** 24 * Return a random integer number larger or equal to `min` and smaller than `max` 25 * using a uniform distribution. 26 * 27 * Syntax: 28 * 29 * math.randomInt() // generate a random integer between 0 and 1 30 * math.randomInt(max) // generate a random integer between 0 and max 31 * math.randomInt(min, max) // generate a random integer between min and max 32 * math.randomInt(size) // generate a matrix with random integer between 0 and 1 33 * math.randomInt(size, max) // generate a matrix with random integer between 0 and max 34 * math.randomInt(size, min, max) // generate a matrix with random integer between min and max 35 * 36 * Examples: 37 * 38 * math.randomInt(100) // returns a random integer between 0 and 100 39 * math.randomInt(30, 40) // returns a random integer between 30 and 40 40 * math.randomInt([2, 3]) // returns a 2x3 matrix with random integers between 0 and 1 41 * 42 * See also: 43 * 44 * random, pickRandom 45 * 46 * @param {Array | Matrix} [size] If provided, an array or matrix with given 47 * size and filled with random values is returned 48 * @param {number} [min] Minimum boundary for the random value, included 49 * @param {number} [max] Maximum boundary for the random value, excluded 50 * @return {number | Array | Matrix} A random integer value 51 */ 52 53 54 return typed(name, { 55 '': () => _randomInt(0, 1), 56 number: max => _randomInt(0, max), 57 'number, number': (min, max) => _randomInt(min, max), 58 'Array | Matrix': size => _randomIntMatrix(size, 0, 1), 59 'Array | Matrix, number': (size, max) => _randomIntMatrix(size, 0, max), 60 'Array | Matrix, number, number': (size, min, max) => _randomIntMatrix(size, min, max) 61 }); 62 63 function _randomIntMatrix(size, min, max) { 64 var res = randomMatrix(size.valueOf(), () => _randomInt(min, max)); 65 return isMatrix(size) ? size.create(res) : res; 66 } 67 68 function _randomInt(min, max) { 69 return Math.floor(min + rng() * (max - min)); 70 } 71 });