UNPKG

@tensorflow/tfjs-core

Version:

Hardware-accelerated JavaScript library for machine intelligence

57 lines 2.07 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var seedrandom = require("seedrandom"); var MPRandGauss = (function () { function MPRandGauss(mean, stdDeviation, dtype, truncated, seed) { this.mean = mean; this.stdDev = stdDeviation; this.dtype = dtype; this.nextVal = NaN; this.truncated = truncated; if (this.truncated) { this.upper = this.mean + this.stdDev * 2; this.lower = this.mean - this.stdDev * 2; } var seedValue = seed ? seed : Math.random(); this.random = seedrandom.alea(seedValue.toString()); } MPRandGauss.prototype.nextValue = function () { if (!isNaN(this.nextVal)) { var value = this.nextVal; this.nextVal = NaN; return value; } var resultX, resultY; var isValid = false; while (!isValid) { var v1 = void 0, v2 = void 0, s = void 0; do { v1 = 2 * this.random() - 1; v2 = 2 * this.random() - 1; s = v1 * v1 + v2 * v2; } while (s >= 1 || s === 0); var mul = Math.sqrt(-2.0 * Math.log(s) / s); resultX = this.mean + this.stdDev * v1 * mul; resultY = this.mean + this.stdDev * v2 * mul; if (!this.truncated || this.isValidTruncated(resultX)) { isValid = true; } } if (!this.truncated || this.isValidTruncated(resultY)) { this.nextVal = this.convertValue(resultY); } return this.convertValue(resultX); }; MPRandGauss.prototype.convertValue = function (value) { if (this.dtype == null || this.dtype === 'float32') { return value; } return Math.round(value); }; MPRandGauss.prototype.isValidTruncated = function (value) { return value <= this.upper && value >= this.lower; }; return MPRandGauss; }()); exports.MPRandGauss = MPRandGauss; //# sourceMappingURL=rand.js.map