time-to-botec

Benchmark sampling in different programming languages
Log | Files | Refs | README

random.js (2371B)


      1 var baseRandom = require('./_baseRandom'),
      2     isIterateeCall = require('./_isIterateeCall'),
      3     toFinite = require('./toFinite');
      4 
      5 /** Built-in method references without a dependency on `root`. */
      6 var freeParseFloat = parseFloat;
      7 
      8 /* Built-in method references for those with the same name as other `lodash` methods. */
      9 var nativeMin = Math.min,
     10     nativeRandom = Math.random;
     11 
     12 /**
     13  * Produces a random number between the inclusive `lower` and `upper` bounds.
     14  * If only one argument is provided a number between `0` and the given number
     15  * is returned. If `floating` is `true`, or either `lower` or `upper` are
     16  * floats, a floating-point number is returned instead of an integer.
     17  *
     18  * **Note:** JavaScript follows the IEEE-754 standard for resolving
     19  * floating-point values which can produce unexpected results.
     20  *
     21  * @static
     22  * @memberOf _
     23  * @since 0.7.0
     24  * @category Number
     25  * @param {number} [lower=0] The lower bound.
     26  * @param {number} [upper=1] The upper bound.
     27  * @param {boolean} [floating] Specify returning a floating-point number.
     28  * @returns {number} Returns the random number.
     29  * @example
     30  *
     31  * _.random(0, 5);
     32  * // => an integer between 0 and 5
     33  *
     34  * _.random(5);
     35  * // => also an integer between 0 and 5
     36  *
     37  * _.random(5, true);
     38  * // => a floating-point number between 0 and 5
     39  *
     40  * _.random(1.2, 5.2);
     41  * // => a floating-point number between 1.2 and 5.2
     42  */
     43 function random(lower, upper, floating) {
     44   if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {
     45     upper = floating = undefined;
     46   }
     47   if (floating === undefined) {
     48     if (typeof upper == 'boolean') {
     49       floating = upper;
     50       upper = undefined;
     51     }
     52     else if (typeof lower == 'boolean') {
     53       floating = lower;
     54       lower = undefined;
     55     }
     56   }
     57   if (lower === undefined && upper === undefined) {
     58     lower = 0;
     59     upper = 1;
     60   }
     61   else {
     62     lower = toFinite(lower);
     63     if (upper === undefined) {
     64       upper = lower;
     65       lower = 0;
     66     } else {
     67       upper = toFinite(upper);
     68     }
     69   }
     70   if (lower > upper) {
     71     var temp = lower;
     72     lower = upper;
     73     upper = temp;
     74   }
     75   if (floating || lower % 1 || upper % 1) {
     76     var rand = nativeRandom();
     77     return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);
     78   }
     79   return baseRandom(lower, upper);
     80 }
     81 
     82 module.exports = random;