Releases

Release highlights. For the full per-symbol change log, see release_notes.md in the repo.

v2.0.5 — 2026

Release pipeline fixes. Fixed squash-merge divergence handling and on-master push/CI sequencing in tools/make_release.sh.


v2.0.4 — 2026

CI fix release. Fixed release.yml coverage step, release pipeline auto-commits badge/version changes, removed conflicting auto-release job from ci.yml.


v2.0.3 — 2026

CI and release pipeline cleanup. Guided release script (tools/make_release.sh) that validates, merges, tags, and publishes to PlatformIO and ESP-IDF in one flow.


v2.0.2 — 2026

Embedded library publishing support. No functional changes to the math library — adds Arduino, PlatformIO, and ESP-IDF package manager integration.


v2.0.1 — 2026

Precision and accuracy release. All changes are backward-compatible with v2.0.0 except where noted.

Trig output precision

Inverse trig now returns radians

Rounding improvements

Improved exp / log accuracy

New utility macros

Infrastructure

Breaking changes from v2.0.0

Changev2.0.0v2.0.1
sin/cos return types16 (s0.15)s32 (s15.16)
sin/cos 1.0 value3276765536 (exact)
tan return formats16.15 (radix 15)s15.16 (radix 16)
tan saturation±(32767 << 15)±INT32_MAX
FR_acos/asin signature(input, radix) → s16 degrees(input, radix, out_radix) → s32 radians
FR_atan signature(input, radix) → s16 degrees(input, radix, out_radix) → s32 radians
FR_atan2 signature(y, x) → s16 degrees(y, x, out_radix) → s32 radians
FR_BAM2RADoff by 1024× (bug)correct
FR_DIV roundingtruncates toward zerorounds to nearest (use FR_DIV_TRUNC for old behaviour)

v2.0.0 — 2026

The first major revision in more than twenty years. v2 is a bug-fix, precision, and feature release with a full test suite and 99% line coverage.

64-bit safety

v1 defined s32 as signed long, which is 64 bits on LP64 platforms (Linux x64, macOS arm64). Every fixed-point path that assumed s32 was exactly 32 bits silently produced wrong results on desktop hosts. v2 migrates all typedefs to <stdint.h> (int8_tint32_t). C99 is now mandatory.

Numerical fixes

New functionality

New documentation

Breaking changes

Test suite

v2 ships with 42 tests across six test binaries and a characterisation suite (test_tdd.cpp) that pins numerical behaviour to bit-exact reference values. Overall line coverage is 99% on the library sources.

v1.0.3 — 2025

Test-coverage release. Overall line coverage went from 4% to 72% with four new test files (test_comprehensive.c, test_overflow_saturation.c, test_full_coverage.c, test_2d_complete.cpp). Added a GitHub Actions CI with multi-platform (Linux, macOS) and multi-compiler (gcc, clang) matrices, cross-compilation for ARM and RISC-V, and 32-bit compatibility testing.

Also fixed a broken FR_atan implementation, corrected FR_PI / FR_2PI / FR_E declarations to use const, and fixed XFormPtI test assumptions.

v1.02 — first public release

Basic fixed-point operations, 2D transforms, and integer-degree trigonometry. This is the version that shipped inside the original Palm Pilot Inkstorm application.

v1.01 — internal development

Naming conventions cleanup and an initial test framework. Never released publicly.

Timeline

FR_Math has been in continuous service since 2000, when it was written to run 2D graphics transforms on 16 MHz 68k Palm Pilots for Trumpetsoft’s Inkstorm. It has since been ported to ARM, x86, MIPS, RISC-V, and a menagerie of 8- and 16-bit embedded targets. v2.0.0 is the first major revision with a full test suite, a bit-exact numerical specification, and CI on every push.