Prioritized backlog of reusable numerical components for generic embedded applications,
ordered easiest → hardest to implement within the constraints of this library
(templated on float / math::Q15 / math::Q31, no heap, bounded containers,
#pragma GCC optimize + OPTIMIZE_FOR_SPEED hot paths, typed tests, doc/ page).
Difficulty legend:
| Stars | Meaning | Typical effort |
|---|---|---|
| ★☆☆☆☆ | Trivial primitive — a few methods, minimal math | Hours |
| ★★☆☆☆ | Easy — well-defined recurrence, small state | Half day |
| ★★★☆☆ | Moderate — real algorithm, still finite/bounded | 1–2 days |
| ★★★★☆ | Advanced — non-trivial linear algebra / numerics | Several days |
| ★★★★★ | Hard / research-grade — iterative eigen-numerics or adaptive theory | 1+ week |
Numeric-type note. DSP filters and fixed-gain trackers should template all three types (
float,Q15,Q31). Items marked (float-first) involve dynamic range or iterative conditioning that make fixed-point impractical initially — implement and validate infloat, mirroring the dynamics-module convention.
| # | Component | Target module | Difficulty |
|---|
Items 48–52 are the evaluation & metrics primitives — reusable quantities the per-family
unit-test reference TESTING.md depends on but which
the library does not yet expose. Detailed below under
Evaluation & metrics primitives.
Reusable quantities that quantify how well an algorithm behaves — the properties the per-family
unit-test reference TESTING.md asks tests to assert.
Today math/Statistics.hpp already provides Mean, Variance,
MeanSquaredError, RootMeanSquaredError, MeanAbsoluteError, RSquaredScore, AutoCorrelation,
and control_analysis/FrequencyResponse provides
magnitude/phase. The items below are the missing pieces. All are float-only, no-heap, and operate
on bounded math::Vector/math::Matrix inputs; tests are TEST_F on float.
Test-only helpers (not production components). A ULP/relative-error comparator and a finite-difference gradient check (for
optimization/) are pure test utilities — add them to thenumerical.math_test_helperINTERFACE library (numerical/math/test_doubles/), not tonumerical/production code.
Every new component should follow the established repository conventions:
- Header-only template supporting
float/math::Q15/math::Q31(or float-first where noted) -
#pragma GCC optimize("O3", "fast-math")after#pragma once;OPTIMIZE_FOR_SPEEDon hot paths - No heap, no recursion, bounded containers (
infra::BoundedVector,std::array) -
static_asserton supported types and dimensions - Typed tests (
TYPED_TEST) for multi-type components;TEST_Ffor single-type;StrictMockonly - Design-first
doc/<domain>/<Name>.mdfollowingdoc/TEMPLATE.md; add its row todoc/<domain>/README.mdandREADME.md's Documentation table (the booklet regenerates from these tables in CI — no manual booklet edit) - Explicit template instantiation
.cppguarded byNUMERICAL_TOOLBOX_COVERAGE_BUILD+numerical_add_coverage_sources -
CMakeLists.txtvianumerical_add_header_library()/${NUMERICAL_VISIBILITY} - Simulator +
.vscode/launch.jsonentry where a visual demo adds value