Efficient exact arithmetic for computational geometry
SCG '93 Proceedings of the ninth annual symposium on Computational geometry
On properties of floating point arithmetics: numerical stability and the cost of accurate computations
IEEE Transactions on Computers
LEDA: a platform for combinatorial and geometric computing
LEDA: a platform for combinatorial and geometric computing
Look — a Lazy Object-Oriented Kernel for geometric computation
Proceedings of the sixteenth annual symposium on Computational geometry
Delaunay refinement mesh generation
Delaunay refinement mesh generation
Automatic Generation of Staged Geometric Predicates
Higher-Order and Symbolic Computation
Automating mathematical program transformations
PADL'10 Proceedings of the 12th international conference on Practical Aspects of Declarative Languages
Hi-index | 0.00 |
Algorithms in Computational Geometry and Computer Aided Design are often developed for the Real RAM model of computation, which assumes exactness of all the input arguments and operations. In practice, however, the exactness imposes tremendous limitations on the algorithms --- even the basic operations become uncomputable, or prohibitively slow. When the computations of interest are limited to determining the sign of polynomial expressions over floating point numbers, faster approaches are available. One can evaluate the polynomial in floating-point first, together with some estimate of the rounding error, and fall back to exact arithmetic only if this error is too big to determine the sign reliably. A particularly efficient variation on this approach has been used by Shewchuk in his robust implementations of Orient and InSphere geometric predicates. We extend Shewchuk's method to arbitrary polynomial expressions. The expressions are given as programs in a suitable source language featuring basic arithmetic operations of addition, subtraction, multiplication and squaring, which are to be perceived by the programmer as exact. The source language also allows for anonymous functions, and thus enables the common functional programming technique of staging. The method is presented formally through several judgments that govern the compilation of the source expression into target code, which is then easily transformed into SML or, in case of single-stage expressions, into C.