simple-squiggle

A restricted subset of Squiggle
Log | Files | Refs | README

ceil.js (5370B)


      1 "use strict";
      2 
      3 var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
      4 
      5 Object.defineProperty(exports, "__esModule", {
      6   value: true
      7 });
      8 exports.createCeil = void 0;
      9 
     10 var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
     11 
     12 var _decimal = _interopRequireDefault(require("decimal.js"));
     13 
     14 var _factory = require("../../utils/factory.js");
     15 
     16 var _collection = require("../../utils/collection.js");
     17 
     18 var _number = require("../../utils/number.js");
     19 
     20 var _nearlyEqual = require("../../utils/bignumber/nearlyEqual.js");
     21 
     22 var _index = require("../../plain/number/index.js");
     23 
     24 var _algorithm = require("../../type/matrix/utils/algorithm11.js");
     25 
     26 var _algorithm2 = require("../../type/matrix/utils/algorithm14.js");
     27 
     28 var name = 'ceil';
     29 var dependencies = ['typed', 'config', 'round', 'matrix', 'equalScalar'];
     30 var createCeil = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
     31   var typed = _ref.typed,
     32       config = _ref.config,
     33       round = _ref.round,
     34       matrix = _ref.matrix,
     35       equalScalar = _ref.equalScalar;
     36   var algorithm11 = (0, _algorithm.createAlgorithm11)({
     37     typed: typed,
     38     equalScalar: equalScalar
     39   });
     40   var algorithm14 = (0, _algorithm2.createAlgorithm14)({
     41     typed: typed
     42   });
     43   /**
     44    * Round a value towards plus infinity
     45    * If `x` is complex, both real and imaginary part are rounded towards plus infinity.
     46    * For matrices, the function is evaluated element wise.
     47    *
     48    * Syntax:
     49    *
     50    *    math.ceil(x)
     51    *    math.ceil(x, n)
     52    *
     53    * Examples:
     54    *
     55    *    math.ceil(3.2)               // returns number 4
     56    *    math.ceil(3.8)               // returns number 4
     57    *    math.ceil(-4.2)              // returns number -4
     58    *    math.ceil(-4.7)              // returns number -4
     59    *
     60    *    math.ceil(3.212, 2)          // returns number 3.22
     61    *    math.ceil(3.288, 2)          // returns number 3.29
     62    *    math.ceil(-4.212, 2)         // returns number -4.21
     63    *    math.ceil(-4.782, 2)         // returns number -4.78
     64    *
     65    *    const c = math.complex(3.24, -2.71)
     66    *    math.ceil(c)                 // returns Complex 4 - 2i
     67    *    math.ceil(c, 1)              // returns Complex 3.3 - 2.7i
     68    *
     69    *    math.ceil([3.2, 3.8, -4.7])  // returns Array [4, 4, -4]
     70    *    math.ceil([3.21, 3.82, -4.71], 1)  // returns Array [3.3, 3.9, -4.7]
     71    *
     72    * See also:
     73    *
     74    *    floor, fix, round
     75    *
     76    * @param  {number | BigNumber | Fraction | Complex | Array | Matrix} x  Number to be rounded
     77    * @param  {number | BigNumber | Array} [n=0]                            Number of decimals
     78    * @return {number | BigNumber | Fraction | Complex | Array | Matrix} Rounded value
     79    */
     80 
     81   return typed('ceil', {
     82     number: function number(x) {
     83       if ((0, _number.nearlyEqual)(x, round(x), config.epsilon)) {
     84         return round(x);
     85       } else {
     86         return (0, _index.ceilNumber)(x);
     87       }
     88     },
     89     'number, number': function numberNumber(x, n) {
     90       if ((0, _number.nearlyEqual)(x, round(x, n), config.epsilon)) {
     91         return round(x, n);
     92       } else {
     93         var _$split = "".concat(x, "e").split('e'),
     94             _$split2 = (0, _slicedToArray2.default)(_$split, 2),
     95             number = _$split2[0],
     96             exponent = _$split2[1];
     97 
     98         var result = Math.ceil(Number("".concat(number, "e").concat(Number(exponent) + n)));
     99 
    100         var _$split3 = "".concat(result, "e").split('e');
    101 
    102         var _$split4 = (0, _slicedToArray2.default)(_$split3, 2);
    103 
    104         number = _$split4[0];
    105         exponent = _$split4[1];
    106         return Number("".concat(number, "e").concat(Number(exponent) - n));
    107       }
    108     },
    109     Complex: function Complex(x) {
    110       return x.ceil();
    111     },
    112     'Complex, number': function ComplexNumber(x, n) {
    113       return x.ceil(n);
    114     },
    115     BigNumber: function BigNumber(x) {
    116       if ((0, _nearlyEqual.nearlyEqual)(x, round(x), config.epsilon)) {
    117         return round(x);
    118       } else {
    119         return x.ceil();
    120       }
    121     },
    122     'BigNumber, BigNumber': function BigNumberBigNumber(x, n) {
    123       if ((0, _nearlyEqual.nearlyEqual)(x, round(x, n), config.epsilon)) {
    124         return round(x, n);
    125       } else {
    126         return x.toDecimalPlaces(n.toNumber(), _decimal.default.ROUND_CEIL);
    127       }
    128     },
    129     Fraction: function Fraction(x) {
    130       return x.ceil();
    131     },
    132     'Fraction, number': function FractionNumber(x, n) {
    133       return x.ceil(n);
    134     },
    135     'Array | Matrix': function ArrayMatrix(x) {
    136       // deep map collection, skip zeros since ceil(0) = 0
    137       return (0, _collection.deepMap)(x, this, true);
    138     },
    139     'Array | Matrix, number': function ArrayMatrixNumber(x, n) {
    140       var _this = this;
    141 
    142       // deep map collection, skip zeros since ceil(0) = 0
    143       return (0, _collection.deepMap)(x, function (i) {
    144         return _this(i, n);
    145       }, true);
    146     },
    147     'SparseMatrix, number | BigNumber': function SparseMatrixNumberBigNumber(x, y) {
    148       return algorithm11(x, y, this, false);
    149     },
    150     'DenseMatrix, number | BigNumber': function DenseMatrixNumberBigNumber(x, y) {
    151       return algorithm14(x, y, this, false);
    152     },
    153     'number | Complex | BigNumber, Array': function numberComplexBigNumberArray(x, y) {
    154       // use matrix implementation
    155       return algorithm14(matrix(y), x, this, true).valueOf();
    156     }
    157   });
    158 });
    159 exports.createCeil = createCeil;