UNPKG

1.36 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.nearlyEqual = nearlyEqual;
7
8/**
9 * Compares two BigNumbers.
10 * @param {BigNumber} x First value to compare
11 * @param {BigNumber} y Second value to compare
12 * @param {number} [epsilon] The maximum relative difference between x and y
13 * If epsilon is undefined or null, the function will
14 * test whether x and y are exactly equal.
15 * @return {boolean} whether the two numbers are nearly equal
16 */
17function nearlyEqual(x, y, epsilon) {
18 // if epsilon is null or undefined, test whether x and y are exactly equal
19 if (epsilon === null || epsilon === undefined) {
20 return x.eq(y);
21 } // use "==" operator, handles infinities
22
23
24 if (x.eq(y)) {
25 return true;
26 } // NaN
27
28
29 if (x.isNaN() || y.isNaN()) {
30 return false;
31 } // at this point x and y should be finite
32
33
34 if (x.isFinite() && y.isFinite()) {
35 // check numbers are very close, needed when comparing numbers near zero
36 var diff = x.minus(y).abs();
37
38 if (diff.isZero()) {
39 return true;
40 } else {
41 // use relative error
42 var max = x.constructor.max(x.abs(), y.abs());
43 return diff.lte(max.times(epsilon));
44 }
45 } // Infinite and Number or negative Infinite and positive Infinite cases
46
47
48 return false;
49}
\No newline at end of file