Table of Contents
Fetching ...

Mixing Condition Numbers and Oracles for Accurate Floating-point Debugging

Bhargav Kulkarni, Pavel Panchekha

TL;DR

The paper addresses the challenge of accurately debugging floating-point computations by marrying two complementary approaches: condition-number-based error bounds and fast double-double oracles, augmented with a novel logarithmic overflow/underflow oracle. The proposed ExplaniFloat framework uses shadow memory to maintain both double-double and logarithmic representations, enabling first-order error propagation analysis and robust detection of rounding errors, as well as overflow/underflow events. Empirical results on 546 benchmarks show a precision of $80.0\%$ and a recall of $96.1\%$ at a threshold of $64$, outperforming both pure double-double oracle methods and an arbitrary-precision baseline while being significantly faster. The work contributes a practical debugging algorithm based on split condition numbers, a dedicated logarithmic oracle for out-of-range values, and a performant DSL-based implementation that leverages the qd library to realize high-precision yet efficient analysis.

Abstract

Recent advances have made numeric debugging tools much faster by using double-double oracles, and numeric analysis tools much more accurate by using condition numbers. But these techniques have downsides: double-double oracles have correlated error so miss floating-point errors while condition numbers cannot cleanly handle over- and under- flow. We combine both techniques to avoid these downsides. Our combination, EXPLANIFLOAT, computes condition numbers using double-double arithmetic, which avoids correlated errors. To handle over- and under- flow, it introduces a separate logarithmic oracle. As a result, EXPLANIFLOAT achieves a precision of 80.0% and a recall of 96.1% on a collection of 546 difficult numeric benchmarks: more accurate than double-double oracles yet dramatically faster than arbitrary-precision condition number computations.

Mixing Condition Numbers and Oracles for Accurate Floating-point Debugging

TL;DR

The paper addresses the challenge of accurately debugging floating-point computations by marrying two complementary approaches: condition-number-based error bounds and fast double-double oracles, augmented with a novel logarithmic overflow/underflow oracle. The proposed ExplaniFloat framework uses shadow memory to maintain both double-double and logarithmic representations, enabling first-order error propagation analysis and robust detection of rounding errors, as well as overflow/underflow events. Empirical results on 546 benchmarks show a precision of and a recall of at a threshold of , outperforming both pure double-double oracle methods and an arbitrary-precision baseline while being significantly faster. The work contributes a practical debugging algorithm based on split condition numbers, a dedicated logarithmic oracle for out-of-range values, and a performant DSL-based implementation that leverages the qd library to realize high-precision yet efficient analysis.

Abstract

Recent advances have made numeric debugging tools much faster by using double-double oracles, and numeric analysis tools much more accurate by using condition numbers. But these techniques have downsides: double-double oracles have correlated error so miss floating-point errors while condition numbers cannot cleanly handle over- and under- flow. We combine both techniques to avoid these downsides. Our combination, EXPLANIFLOAT, computes condition numbers using double-double arithmetic, which avoids correlated errors. To handle over- and under- flow, it introduces a separate logarithmic oracle. As a result, EXPLANIFLOAT achieves a precision of 80.0% and a recall of 96.1% on a collection of 546 difficult numeric benchmarks: more accurate than double-double oracles yet dramatically faster than arbitrary-precision condition number computations.

Paper Structure

This paper contains 15 sections, 16 equations, 1 figure, 1 table.

Figures (1)

  • Figure 1: A precision vs recall graph of ExplaniFloat, the arbitrary-precision baseline and the double-double oracle based debugging baseline. We run them on thresholds starting from 4 to 4096 doubling each time. Note that the precision and recall do not change drastically with change in the threshold.