Compositional Numeric Library
CNL is a numerics library written in C++
which aims to do for
int what the STL does for arrays.
Its main roles are to help:
- approximate real numbers using fixed-point arithmetic;
- detect and prevent overflow and
- increase precision through alternative rounding modes.
A compositional design promotes seamless interoperability between numeric types. And by providing the thinnest wrappers over the widest range of numeric types, CNL aims to assist the development of:
- large-scale simulations including video games and scientific models;
- resource-constrained applications on embedded and mobile devices and
- math-intensive operations on specialized hardware such as GPUs and FPGAs.
Documentation can be found here.
- Boost - facilitates multiprecision support
- Doxygen - generates documentation in the doc/gh-pages directory
Tested on AppVeyor and on Windows 10 Professional with CMake 3.8.0. Requires:
- MSBuild 15.0 (VS 2017)
- CMake 3.8.0
The library is hosted on GitHub:
cd /some/directory git clone https://github.com/johnmcfarlane/cnl.git
CNL is a header-only library so there is no need to build it. However, it comes with a number of tests and benchmarks.
Generate the build system:
For Linux (in parallel using N cores):
cmake --build . --target Tests -- -j N
cmake --build . --target src/test/Tests
Generate the build system (optimized):
cmake -DCMAKE_BUILD_TYPE=Release /some/directory/cnl
cmake --build . --target Benchmark
Additional build system generation options:
To describe CNL build options:
cmake -LH /some/directory/cnl
Then to apply an option, e.g. to disabled exceptions:
cmake -DEXCEPTIONS=OFF /some/directory/cnl
The API is exposed through headers in the include directory. Add this to your system header list and include, e.g.:
// to use a specific type: #include <cnl/fixed_point.h> // or to include all CNL types: #include <cnl/all.h>
Examples of projects using CNL:
- CDSP - Compositional DSP Library for C++;
- cnl_example - minimal CMake-based project which uses CNL as a dependency.
- CNL documentation
- CppCon 2017 presentation
- Embedded Artistry article
- ISO C++ papers:
All feedback greatly appreciated.