# Difference between revisions of "Interval package"

m (Add theory secion) |
(→Moore's fundamental theroem of interval arithmetic) |
||

Line 34: | Line 34: | ||

=== Moore's fundamental theroem of interval arithmetic === | === Moore's fundamental theroem of interval arithmetic === | ||

+ | Let <math>\mathbf{y} = f(\mathbf{x})</math> be the result of | ||

+ | interval-evaluation of <math>f</math> over a box <math>\mathbf{x} = (x_1,\ldots{},x_n)</math> | ||

+ | using any interval versions of its component library functions. Then | ||

+ | # In all cases, <math>\mathbf{y}</math> contains the range of <math>f</math> over <math>\mathbf{x}</math>, that is, the set of <math>f(\mathbf{x})</math> at points of <math>\mathbf{x}</math> where it is defined: <math>\mathbf{y} \supseteq \operatorname{Rge}(f \vert \mathbf{x}) = \{ f(\mathbf{x}) \vert x \in \mathbf{x} \cap \operatorname{Dom}(f)\}</math> | ||

+ | # If also each library operation in <math>f</math> is everywhere defined on its inputs, while evaluating <math>\mathbf{y}</math>, then <math>f</math> is everywhere defined on <math>\mathbf{x}</math>, that is <math>\operatorname{Dom}(f) \supseteq \mathbf{x}</math>. | ||

+ | # If in addition, each library operation in <math>f</math> is everywhere continuous on its inputs, while evaluating <math>\mathbf{y}</math>, then <math>f</math> is everywhere continuous on <math>\mathbf{x}</math>. | ||

+ | # If some library operation in <math>f</math> is nowhere defined on its inputs, while evaluating <math>\mathbf{y}</math>, then <math>f</math> is nowhere defined on <math>\mathbf{x}</math>, that is <math>\operatorname{Dom}(f) = \emptyset</math>. | ||

== Quick start introduction == | == Quick start introduction == |

## Revision as of 10:33, 14 October 2014

The interval package provides data types and fundamental operations for real valued interval arithmetic based on the common floating-point format “binary64” a. k. a. double-precision. **Interval arithmetic** produces mathematically proven numerical results. It aims to be standard compliant with the (upcoming) IEEE 1788 and therefore implements the *set-based* interval arithmetic flavor.

Warning: The package has not yet been released.

## Contents

## Motivation

Give a digital computer a problem in arithmetic, and it will grind away methodically, tirelessly, at gigahertz speed, until ultimately it produces the wrong answer. … An interval computation yields a pair of numbers, an upper and a lower bound, which are guaranteed to enclose the exact answer. Maybe you still don’t know the truth, but at least you know how much you don’t know.—Brian Hayes, DOI: 10.1511/2003.6.484

Standard floating point arithmetic | Interval arithmetic |
---|---|

octave:1> 19 * 0.1 - 2 + 0.1 ans = 1.3878e-16 |
octave:1> x = infsup ("0.1"); octave:2> 19 * x - 2 + x ans = [-3.1918911957973251e-16, +1.3877787807814457e-16] |

Floating point arithmetic, as specified by IEEE 754, is available in almost every computer system today. It is wide-spread, implemented in common hardware and integral part in programming languages. For example, the extended precision format is the default numeric data type in GNU Octave. Benefits are obvious: The performance of arithmetic operations is well-defined, highly efficient and results are comparable between different systems.

However, there are some downsides of floating point arithmetic in practice, which will eventually produce errors in computations.

- Floating point arithmetic is often used mindlessly by developers. [1]
- The binary data types categorically are not suitable for doing financial computations. Very often representational errors are introduced when using “real world” decimal numbers.
- Even if the developer would be proficient, most developing environments / technologies limit floating point arithmetic capabilities to a very limited subset of IEEE 754: Only one or two data types, no rounding modes, …
- Results are hardly predictable. All operations produce the best possible accuracy
*at runtime*, this is how floating point works. Contrariwise, financial computer systems typically use a fixed-point arithmetic (COBOL, PL/I, …), where overflow and rounding can be precisely predicted*at compile-time*. - If you do not know the technical details, cf. first bullet, you ignore the fact that the computer lies to you in many situations. For example, when looking at numerical output and the computer says “
`ans = 0.1`

,” this is not absolutely correct. In fact, the value is only*close enough*to the value 0.1.

Interval arithmetic addresses above problems in its very special way and introduces new possibilities for algorithms. For example, the interval newton method is able to find *all* zeros of a particular function.

## Theory

### Moore's fundamental theroem of interval arithmetic

Let **Failed to parse (syntax error): {\displaystyle \mathbf{y} = f(\mathbf{x})}**
be the result of
interval-evaluation of over a box **Failed to parse (syntax error): {\displaystyle \mathbf{x} = (x_1,\ldots{},x_n)}**
using any interval versions of its component library functions. Then

- In all cases, contains the range of over , that is, the set of at points of where it is defined:
- If also each library operation in is everywhere defined on its inputs, while evaluating , then is everywhere defined on , that is .
- If in addition, each library operation in is everywhere continuous on its inputs, while evaluating , then is everywhere continuous on .
- If some library operation in is nowhere defined on its inputs, while evaluating , then is nowhere defined on , that is .