Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | 6x 6x 4019x 6x 6x 1x 5x 5x 6x 6x 6x 1x 5x 5x 6x 12x 2x 46x 10x 10x 4x 6x | import { ISafeNumber, NumberArg } from "./ISafeNumber";
import { SafeZero, createSafeNumber } from "./ISafeNumberFactory";
export const calculateSum = (numbers: NumberArg[]) =>
numbers.reduce<ISafeNumber>((prev, curr) => prev.add(curr), SafeZero);
export const calculateAverageValue = (numbers: NumberArg[]): ISafeNumber => {
if (numbers.length === 0) {
throw new Error("Can not calculate an average value for an empty array");
}
const result = calculateSum(numbers).div(numbers.length);
return result;
};
export const calculateDeviationPercent = (args: {
baseValue: ISafeNumber;
deviatedValue: ISafeNumber;
}) => {
const { baseValue, deviatedValue } = args;
if (baseValue.eq(0)) {
return createSafeNumber(Number.MAX_SAFE_INTEGER);
}
const result = deviatedValue.sub(baseValue).div(baseValue).abs().mul(100);
return result;
};
export function getMedian(numbers: ISafeNumber[]): ISafeNumber {
if (numbers.length === 0) {
throw new Error("Cannot get median value of an empty array");
}
numbers = numbers.sort((a, b) => (a.lt(b) ? -1 : 1));
const middle = Math.floor(numbers.length / 2);
if (numbers.length % 2 === 0) {
return numbers[middle].add(numbers[middle - 1]).div(2);
} else {
return numbers[middle];
}
}
|