CRAFT aims to help programmers analyze their programs for numerical inaccuracies introduced by floating-point arithmetic. This includes detecting various events such as cancellations, as well as automated analysis to aid in precision-level decision-making. The current goal is to be able to make recommendations about the necessary level of precision for individual routines.
My system uses the DyninstAPI library to replace floating-point instructions with calls to an analysis library. At runtime, the analysis examines the floating-point numbers in various ways and saves the results to a log file. I have implemented a Java viewer for the logs.
Currently, the cancellation detection analysis mode is relatively stable and we have applied it to several examples and applications. We are looking for other test cases and code bases.
I am also working on other types of analysis to be described here in the future.
- Automatically detect floating-point cancellations
- Replace double-precision instructions with single-precision equivalents
- Works on x86_64 binaries including shared library support
- GUI to view analysis results (Java 1.6+)
WARNING: THIS IS ALPHA SOFTWARE!
Building and using this project currently requires significant experience in systems development. Major features may still be unimplemented, user interfaces may not be stabilized, and there are many known bugs and issues yet to be resolved. The software also requires a separate build of the DyninstAPI library:
To obtain a copy of the source code, please access the Git repository:
For support, please contact the author using the discussion forum:
CRAFT is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
For more license details, please read LICENSE in the main project directory.