UNPKG

@lvlte/ulp

Version:

Compute the unit in last place of a given IEEE-754 64-bit number

31 lines (30 loc) 824 B
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.FLOAT64_MIN = void 0; exports.eps = eps; exports.exponent = exponent; const modf_1 = require("@lvlte/modf"); exports.FLOAT64_MIN = Math.pow(2, -1022); function eps(x = 1) { if (Number.isFinite(x)) { x = Math.abs(x); if (x <= exports.FLOAT64_MIN) { return Number.MIN_VALUE; } return Math.pow(2, (_exponent(x) - 52)); } return NaN; } function exponent(x) { if (Number.isFinite(x) && x !== 0) { return _exponent(Math.abs(x)); } return NaN; } function _exponent(x) { const [ipart, fpart] = (0, modf_1.modf)(x); if (ipart > 0) { return ipart.toString(2).split('.', 1)[0].length - 1; } return -(fpart.toString(2).split('1', 1)[0].length - 1); }