Small collection of data structures for performing common mathematical operations in scientific computing.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.

Documentation and code examples are available at The repository is located at

This repository contains a handful of data structures and algorithms for common mathematical operations in scientific computing.


To use the code, simply download the files into a folder named "math". Add this folder to the include path for the compiler, for example by using the -I flag.

This library depends on core and the data structures and procedures follow the same paradigm as core. Otherwise, there are no dependencies on external libraries. The code makes use of C++11 and is regularly tested with gcc 8 but I have previously compiled it with gcc 4.8, clang 4.0, and Microsoft Visual C++ 14.0 (2015). The code is intended to be platform-independent, so please create an issue if there are any compilation bugs.


This library contains the following files:

  • distributions.h contains structures that represent various probability distributions, such as the Dirichlet (both symmetric and general), categorical (implemented using a dense array or sparsely using a hash_map), discrete uniform, and sequence distributions. This file contains functions for computing the probabilities and log probabilities of events according to these distributions, as well as generating samples from them.
  • features.h contains structures for representing feature vectors, which are commonly used in machine learning.
  • multiset.h contains multiset data structures, which are structures that count the number of occurrences of distinct elements in a set.
  • log.h contains functions to perform arithmetic in log space, while avoiding loss of floating-point precision.