Eva Darulová and Viktor Kuncak.
Trustworthy numerical computation in scala.
In OOPSLA, 2011.
Modern computing has adopted the floating point type as a default way to describe computations with real
numbers. Thanks to dedicated hardware support, such computations are efficient on modern architectures, even in double precision.
However, rigorous reasoning about the resulting programs remains difficult.
This is in part due to a large gap between
the finite floating point representation and the infinite-precision real-number semantics that serves as the developers' mental
model. Because programming languages do not provide support for estimating errors,
some computations in practice are performed more and some less precisely than needed.
We present a library solution for rigorous arithmetic computation. Our numerical data type library tracks a (double)
floating point value, but also a guaranteed upper bound on the error between this value and the ideal value that
would be computed in the real-value semantics. Our implementation involves
a set of linear approximations based on an extension of affine arithmetic. The derived approximations
cover most of the standard mathematical operations, including trigonometric functions, and are more comprehensive
than any publicly available ones.
Moreover, while interval arithmetic
rapidly yields overly pessimistic estimates, our approach remains precise for several computational tasks of interest.
We evaluate the library on a number of examples from numerical analysis and physical simulations. We found it to be a useful tool
for gaining confidence in the correctness of the computation.
[ bib ]
Back