randomInt.js (3259B)
1 "use strict"; 2 3 Object.defineProperty(exports, "__esModule", { 4 value: true 5 }); 6 exports.createRandomInt = void 0; 7 8 var _factory = require("../../utils/factory.js"); 9 10 var _randomMatrix = require("./util/randomMatrix.js"); 11 12 var _seededRNG = require("./util/seededRNG.js"); 13 14 var _is = require("../../utils/is.js"); 15 16 var name = 'randomInt'; 17 var dependencies = ['typed', 'config', '?on']; 18 var createRandomInt = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) { 19 var typed = _ref.typed, 20 config = _ref.config, 21 on = _ref.on; 22 // seeded pseudo random number generator 23 var rng = (0, _seededRNG.createRng)(config.randomSeed); 24 25 if (on) { 26 on('config', function (curr, prev) { 27 if (curr.randomSeed !== prev.randomSeed) { 28 rng = (0, _seededRNG.createRng)(curr.randomSeed); 29 } 30 }); 31 } 32 /** 33 * Return a random integer number larger or equal to `min` and smaller than `max` 34 * using a uniform distribution. 35 * 36 * Syntax: 37 * 38 * math.randomInt() // generate a random integer between 0 and 1 39 * math.randomInt(max) // generate a random integer between 0 and max 40 * math.randomInt(min, max) // generate a random integer between min and max 41 * math.randomInt(size) // generate a matrix with random integer between 0 and 1 42 * math.randomInt(size, max) // generate a matrix with random integer between 0 and max 43 * math.randomInt(size, min, max) // generate a matrix with random integer between min and max 44 * 45 * Examples: 46 * 47 * math.randomInt(100) // returns a random integer between 0 and 100 48 * math.randomInt(30, 40) // returns a random integer between 30 and 40 49 * math.randomInt([2, 3]) // returns a 2x3 matrix with random integers between 0 and 1 50 * 51 * See also: 52 * 53 * random, pickRandom 54 * 55 * @param {Array | Matrix} [size] If provided, an array or matrix with given 56 * size and filled with random values is returned 57 * @param {number} [min] Minimum boundary for the random value, included 58 * @param {number} [max] Maximum boundary for the random value, excluded 59 * @return {number | Array | Matrix} A random integer value 60 */ 61 62 63 return typed(name, { 64 '': function _() { 65 return _randomInt(0, 1); 66 }, 67 number: function number(max) { 68 return _randomInt(0, max); 69 }, 70 'number, number': function numberNumber(min, max) { 71 return _randomInt(min, max); 72 }, 73 'Array | Matrix': function ArrayMatrix(size) { 74 return _randomIntMatrix(size, 0, 1); 75 }, 76 'Array | Matrix, number': function ArrayMatrixNumber(size, max) { 77 return _randomIntMatrix(size, 0, max); 78 }, 79 'Array | Matrix, number, number': function ArrayMatrixNumberNumber(size, min, max) { 80 return _randomIntMatrix(size, min, max); 81 } 82 }); 83 84 function _randomIntMatrix(size, min, max) { 85 var res = (0, _randomMatrix.randomMatrix)(size.valueOf(), function () { 86 return _randomInt(min, max); 87 }); 88 return (0, _is.isMatrix)(size) ? size.create(res) : res; 89 } 90 91 function _randomInt(min, max) { 92 return Math.floor(min + rng() * (max - min)); 93 } 94 }); 95 exports.createRandomInt = createRandomInt;