UNPKG

double-double

Version:

Pure double-double precision functions *with strict error bounds*.

46 lines (34 loc) 956 B
import { ddMultDouble1 } from '../double-mixed-double-double/dd-mult-double.js'; /** * * @param a * @param b * * @internal */ function ddMultD(a: number[], b: number) { return ddMultDouble1(b,a); } /** * CACHE[i] == lower part of the double-double representing 10 ** ((i + 1) * 23) * * @internal */ const CACHE = new Float64Array(13); /** * @param exp * * @internal */ function getPowerOf10(exp: number): number[] { // Powers of 10 up to 10**22 can be exactly represented as a double. if (exp < 23) return [0, 10 ** exp]; // exponent == 23 * (i + 1) + m const m = exp % 23; const cp = exp - m; const i = cp / 23 - 1; // Calculate the lower double of 10 ** (23 * (i + 1)) or read of from CACHE. let lo = CACHE[i] || (CACHE[i] = Number(10n ** BigInt(cp) - BigInt(10 ** cp))); return ddMultD([lo, 10 ** cp], 10 ** m); } export { getPowerOf10 }