# Final Report

## Abstract

The purpose of this project was to develop tools and techniques to improve the ability of computational scientists to investigate and correct problems (bugs) in their programs. Specifically, the University of Maryland component of this project focused on the problems associated with the finite number of bits available in a computer to represent numeric values. In large scale scientific computation, numbers are frequently added to and multiplied with each other billions of times. Thus even small errors due to the representation of numbers can accumulate into big errors. However, using too many bits to represent a number results in additional computation, memory, and energy costs. Thus it is critical to find the right size for numbers. This project focused on several aspects of this general problem. First, we developed a tool to look for cancelations, the catastrophic loss of precision in numbers due to the addition of two numbers whose actual values are close to each other, but whose representation in a computer is identical or nearly so. Second, we developed a suite of tools to allow programmers to identify exactly how much precision is required for each operation in their program. This tool allows programmers to both verify thatmore »

- Authors:

- Publication Date:

- Research Org.:
- University of Maryland

- Sponsoring Org.:
- USDOE Office of Science (SC), Advanced Scientific Computing Research (ASCR) (SC-21)

- OSTI Identifier:
- 1148696

- Report Number(s):
- Final Report

- DOE Contract Number:
- SC0002351

- Resource Type:
- Technical Report

- Country of Publication:
- United States

- Language:
- English

- Subject:
- 97 MATHEMATICS AND COMPUTING

### Citation Formats

```
Hollingsworth, Jeff.
```*Final Report*. United States: N. p., 2014.
Web. doi:10.2172/1148696.

```
Hollingsworth, Jeff.
```*Final Report*. United States. doi:10.2172/1148696.

```
Hollingsworth, Jeff. Thu .
"Final Report". United States.
doi:10.2172/1148696. https://www.osti.gov/servlets/purl/1148696.
```

```
@article{osti_1148696,
```

title = {Final Report},

author = {Hollingsworth, Jeff},

abstractNote = {The purpose of this project was to develop tools and techniques to improve the ability of computational scientists to investigate and correct problems (bugs) in their programs. Specifically, the University of Maryland component of this project focused on the problems associated with the finite number of bits available in a computer to represent numeric values. In large scale scientific computation, numbers are frequently added to and multiplied with each other billions of times. Thus even small errors due to the representation of numbers can accumulate into big errors. However, using too many bits to represent a number results in additional computation, memory, and energy costs. Thus it is critical to find the right size for numbers. This project focused on several aspects of this general problem. First, we developed a tool to look for cancelations, the catastrophic loss of precision in numbers due to the addition of two numbers whose actual values are close to each other, but whose representation in a computer is identical or nearly so. Second, we developed a suite of tools to allow programmers to identify exactly how much precision is required for each operation in their program. This tool allows programmers to both verify that enough precision is available, but more importantly find cases where extra precision could be eliminated to allow the program to use less memory, computer time, or energy. These tools use advanced binary modification techniques to allow the analysis of actual optimized code. The system, called Craft, has been applied to a number of benchmarks and real applications.},

doi = {10.2172/1148696},

journal = {},

number = ,

volume = ,

place = {United States},

year = {Thu Jul 31 00:00:00 EDT 2014},

month = {Thu Jul 31 00:00:00 EDT 2014}

}