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>
Tested on Travis (Ubuntu 14.04) using GCC 5.4 and Clang 3.5 and Debian GNU/Linux 8.3 using GCC 5.4 and Clang 3.5.0.
Requires:
- G++ 5.4
- CMake 3.2
Optional:
- Boost - facilitates multiprecision support
- Doxygen - generates documentation in the doc/gh-pages directory
- pandoc - generates proposal papers
For a list of configuration options:
$ cmake -LH
To build everything:
$ cmake -DCMAKE_BUILD_TYPE=Release
$ make
To disable exception handling (incompatible with Boost 1.55 or lower), 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'
To install:
$ cmake -DCMAKE_BUILD_TYPE=Release
$ make
$ sudo make install
Tested on AppVeyor and on Windows 10 Professional with CMake 3.8.0. Requires:
- MSBuild 15.0 (VS 2017)
- CMake 3.8.0
To build vs/Release/fp_test.exe and vs/Release/fp_benchmark.exe:
cmake -G "Visual Studio 15 2017" .
MSBuild.exe /m fixed_point.sln /p:Configuration=Release
For 64-bit builds, append Win64
to the -G
option above:
cmake -G "Visual Studio 15 2017 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
- position paper illustrating the compositonal approach, P0554
- forum of Study Group 14
All feedback greatly appreciated.