UNPKG

4.49 kBJavaScriptView Raw
1import Decimal from 'decimal.js';
2import { factory } from '../../utils/factory.js';
3import { deepMap } from '../../utils/collection.js';
4import { nearlyEqual } from '../../utils/number.js';
5import { nearlyEqual as bigNearlyEqual } from '../../utils/bignumber/nearlyEqual.js';
6import { ceilNumber } from '../../plain/number/index.js';
7import { createAlgorithm11 } from '../../type/matrix/utils/algorithm11.js';
8import { createAlgorithm14 } from '../../type/matrix/utils/algorithm14.js';
9var name = 'ceil';
10var dependencies = ['typed', 'config', 'round', 'matrix', 'equalScalar'];
11export var createCeil = /* #__PURE__ */factory(name, dependencies, (_ref) => {
12 var {
13 typed,
14 config,
15 round,
16 matrix,
17 equalScalar
18 } = _ref;
19 var algorithm11 = createAlgorithm11({
20 typed,
21 equalScalar
22 });
23 var algorithm14 = createAlgorithm14({
24 typed
25 });
26 /**
27 * Round a value towards plus infinity
28 * If `x` is complex, both real and imaginary part are rounded towards plus infinity.
29 * For matrices, the function is evaluated element wise.
30 *
31 * Syntax:
32 *
33 * math.ceil(x)
34 * math.ceil(x, n)
35 *
36 * Examples:
37 *
38 * math.ceil(3.2) // returns number 4
39 * math.ceil(3.8) // returns number 4
40 * math.ceil(-4.2) // returns number -4
41 * math.ceil(-4.7) // returns number -4
42 *
43 * math.ceil(3.212, 2) // returns number 3.22
44 * math.ceil(3.288, 2) // returns number 3.29
45 * math.ceil(-4.212, 2) // returns number -4.21
46 * math.ceil(-4.782, 2) // returns number -4.78
47 *
48 * const c = math.complex(3.24, -2.71)
49 * math.ceil(c) // returns Complex 4 - 2i
50 * math.ceil(c, 1) // returns Complex 3.3 - 2.7i
51 *
52 * math.ceil([3.2, 3.8, -4.7]) // returns Array [4, 4, -4]
53 * math.ceil([3.21, 3.82, -4.71], 1) // returns Array [3.3, 3.9, -4.7]
54 *
55 * See also:
56 *
57 * floor, fix, round
58 *
59 * @param {number | BigNumber | Fraction | Complex | Array | Matrix} x Number to be rounded
60 * @param {number | BigNumber | Array} [n=0] Number of decimals
61 * @return {number | BigNumber | Fraction | Complex | Array | Matrix} Rounded value
62 */
63
64 return typed('ceil', {
65 number: function number(x) {
66 if (nearlyEqual(x, round(x), config.epsilon)) {
67 return round(x);
68 } else {
69 return ceilNumber(x);
70 }
71 },
72 'number, number': function numberNumber(x, n) {
73 if (nearlyEqual(x, round(x, n), config.epsilon)) {
74 return round(x, n);
75 } else {
76 var [number, exponent] = "".concat(x, "e").split('e');
77 var result = Math.ceil(Number("".concat(number, "e").concat(Number(exponent) + n)));
78 [number, exponent] = "".concat(result, "e").split('e');
79 return Number("".concat(number, "e").concat(Number(exponent) - n));
80 }
81 },
82 Complex: function Complex(x) {
83 return x.ceil();
84 },
85 'Complex, number': function ComplexNumber(x, n) {
86 return x.ceil(n);
87 },
88 BigNumber: function BigNumber(x) {
89 if (bigNearlyEqual(x, round(x), config.epsilon)) {
90 return round(x);
91 } else {
92 return x.ceil();
93 }
94 },
95 'BigNumber, BigNumber': function BigNumberBigNumber(x, n) {
96 if (bigNearlyEqual(x, round(x, n), config.epsilon)) {
97 return round(x, n);
98 } else {
99 return x.toDecimalPlaces(n.toNumber(), Decimal.ROUND_CEIL);
100 }
101 },
102 Fraction: function Fraction(x) {
103 return x.ceil();
104 },
105 'Fraction, number': function FractionNumber(x, n) {
106 return x.ceil(n);
107 },
108 'Array | Matrix': function ArrayMatrix(x) {
109 // deep map collection, skip zeros since ceil(0) = 0
110 return deepMap(x, this, true);
111 },
112 'Array | Matrix, number': function ArrayMatrixNumber(x, n) {
113 // deep map collection, skip zeros since ceil(0) = 0
114 return deepMap(x, i => this(i, n), true);
115 },
116 'SparseMatrix, number | BigNumber': function SparseMatrixNumberBigNumber(x, y) {
117 return algorithm11(x, y, this, false);
118 },
119 'DenseMatrix, number | BigNumber': function DenseMatrixNumberBigNumber(x, y) {
120 return algorithm14(x, y, this, false);
121 },
122 'number | Complex | BigNumber, Array': function numberComplexBigNumberArray(x, y) {
123 // use matrix implementation
124 return algorithm14(matrix(y), x, this, true).valueOf();
125 }
126 });
127});
\No newline at end of file