UNPKG

double-double

Version:

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

29 lines (23 loc) 851 B
/** * Returns the result of adding a double to a double-double precision floating * point number. * * * relative error bound: 2u^2, i.e. fl(a+b) = (a+b)(1+ϵ), * where ϵ <= 2u^2, u = 0.5 * Number.EPSILON * * the error bound is sharp * * ALGORITHM 4 of https://hal.archives-ouvertes.fr/hal-01351529v3/document * @param x a double-double precision floating point number * @param y a double precision floating point number */ function ddAddDouble(x: number[], y: number): number[] { const xl = x[0]; const xh = x[1]; //const [sl,sh] = twoSum(xh, y); const sh = xh + y; const c = sh - xh; const sl = (xh - (sh - c)) + (y - c); const v = xl + sl; //const [zl,zh] = fastTwoSum(sh,v); const zh = sh + v; const zl = v - (zh - sh); return [zl, zh]; } export { ddAddDouble }