Skip to content
A Compositional Numeric Library for C++
Branch: develop
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

Compositional Numeric Library

Build Status Build status CircleCI

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.



Tested on Travis and CircleCI.



  • 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


CNL is a header-only library so there is no need to build it. However, it comes with a number of tests and benchmarks.

Running Tests

  1. Generate the build system:

    cmake /some/directory/cnl

  2. Build tests:

    • For Linux (in parallel using N cores):

      cmake --build . --target Tests -- -j N

    • For Windows:

      cmake --build . --target src/test/Tests

  3. Run tests:


Running Benchmarks

  1. Generate the build system (optimized):

    cmake -DCMAKE_BUILD_TYPE=Release /some/directory/cnl

  2. Build benchmarks:

    cmake --build . --target Benchmark

  3. Run benchmarks:


Additional build system generation options:

  1. To describe CNL build options:

    cmake -LH /some/directory/cnl

  2. 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>

Example Projects

Examples of projects using CNL:

  • CDSP - Compositional DSP Library for C++;
  • cnl_example - minimal CMake-based project which uses CNL as a dependency.

Further Reading

Contact Information

All feedback greatly appreciated.

Developed with CLion: A Cross-Platform IDE for C and C++ by JetBrains.

You can’t perform that action at this time.