/** * Returns the difference and exact error of subtracting two floating point * numbers. * Uses an EFT (error-free transformation), i.e. a-b === x+y exactly. * The returned result is a non-overlapping expansion (smallest value first!). * * Precondition: abs(a) >= abs(b) - A fast test that can be used is * (a > b) === (a > -b) * * See https://people.eecs.berkeley.edu/~jrs/papers/robustr.pdf */ function fastTwoDiff(a: number, b: number) { const x = a - b; const y = (a - x) - b; return [y, x]; } export { fastTwoDiff }