double-double
Version:
Pure double-double precision functions *with strict error bounds*.
29 lines • 879 B
JavaScript
/** @internal */
const f = 134217729; // 2**27 + 1;
// Taken from https://github.com/munrocket/double.js/blob/master/src/double.ts
// Unfortunately no error bound given
/**
* Returns the square root of a double-double as a double-double.
* * no error bound is returned
*
* @param x a double-double precision floating point number
*/
// TODO - calculate an error bound and add to function description
function ddSqrt(x) {
const xl = x[0];
const xh = x[1];
if (xh === 0) {
return [0, 0];
}
const s = Math.sqrt(xh);
//const [tl,th] = twoSquare(s);
const th = s * s;
const c = f * s;
const ah = c - (c - s);
const al = s - ah;
const tl = (al * al) - ((th - (ah * ah)) - 2 * (ah * al));
const e = (xh - th - tl + xl) * 0.5 / s;
return [e - ((s + e) - s), s + e];
}
export { ddSqrt };
//# sourceMappingURL=dd-sqrt.js.map