@numio/bigmath
Version:
@numio/bigmath is an arbitrary-precision arithmetic library. It can be used for basic operations with decimal numbers (integers and float)
21 lines (20 loc) • 741 B
JavaScript
import { PipeInner } from "../pipe/utils.js";
const meanQ = (idx, array) => {
const { bi: left } = new PipeInner().add([array[idx], array[idx - 1]]);
return new PipeInner().div([left, [2n, 0]]).bi;
};
export const quartileInner = (array) => {
if (array.length < 3) {
throw Error("To calculate quartile you need at least 3 elements");
}
const { length } = array;
const Q2Idx = length >> 1;
const Q1Idx = Q2Idx >> 1;
const Q3Idx = length - Q1Idx;
const isEvenHalf = Q2Idx % 2 !== 0;
return {
Q1: isEvenHalf ? array[Q1Idx] : meanQ(Q1Idx, array),
Q2: length % 2 !== 0 ? array[Q2Idx] : meanQ(Q2Idx, array),
Q3: isEvenHalf ? array[Q3Idx - 1] : meanQ(Q3Idx, array),
};
};