The fixed_point library provides a header-only C++11 API for approximating real numbers using binary fixed-point arithmetic. It forms the reference implementation of a standard library proposal presented in paper, P0037 and is developed as part of study groups, SG14 and SG6.
The library is hosted on GitHub:
$ git clone https://github.com/johnmcfarlane/fixed_point.git
The API is exposed through headers in the include directory. Add this to your system header list and include, e.g.:
#include <sg14/fixed_point.h>
Tested on Travis (Ubuntu 12.04) using GCC 4.8 and Clang 3.5 and Debian GNU/Linux 8.3 using GCC 4.9.2 and Clang 3.5.0.
Requires:
- GCC 4.8.4
- CMake 2.8.11
Optional:
- Boost - facilitates multiprecision support
- Doxygen - generates documentation in the doc/gh-pages directory
- cmark - generates proposal papers
For a list of configuration options:
$ cmake -LH
To build everything:
$ cmake -DCMAKE_BUILD_TYPE=Release
$ make
To disable exception handling, add -DEXCEPTIONS=OFF
to the cmake
command:
$ cmake -DCMAKE_BUILD_TYPE=Release -DEXCEPTIONS=OFF
$ make
To run tests:
$ cmake -DCMAKE_BUILD_TYPE=Release
$ make fp_test
$ ./fp_test
To run benchmarks:
$ cmake -DCMAKE_BUILD_TYPE=Release
$ make fp_benchmark
$ ./fp_benchmark
To profile benchmarks:
-
Build with frame pointers included:
$ cmake -DCMAKE_BUILD_TYPE=Release -DPROFILE=ON $ make fp_benchmark $ ./fp_benchmark
-
then run:
$ perf record -g ./fp_benchmark $ perf report -g 'graph,0.5,caller'
Tested on AppVeyor and on Windows 7 Professional with CMake 3.4.0. Requires:
- MSBuild 14.0
- CMake 2.8.11
To build vs/Release/fp_test.exe and vs/Release/fp_benchmark.exe:
cmake .
MSBuild.exe /m fixed_point.sln /p:Configuration=Release
For 64-bit builds, append Win64
to the -G
option above:
cmake -G "Visual Studio 14 2015 Win64" .
Note that fp_benchmark is unlikely to produce valid results due to missing escape
and clobber
functions.
To clean the project files:
git clean -Xdff .
(Use with caution!)
- documentation
- latest draft of C++ Standard Library proposal, P0037 (revision 1, revision 0)
- position paper illustrating the elastic numeric type
- forum of Study Group 14
All feedback greatly appreciated.