universal v4.9.0
Permanent link:
cppdashboard.dev/r/2026/08/universal-v4-9-0Large collection of number systems providing custom arithmetic for mixed-precision algorithm development and optimization for AI, Machine Learning, Computer Vision, Signal Processing, CAE, EDA, control, optimization, estimation, and approximation.
Release notes
## [4.9.0] - 2026-08-20 ### Behaviour change: `elreal<double>` results are not bit-identical to v4.8.9 `elreal`'s precision ceiling is gone, and that includes `double`. It had been stopping at 307 decimal digits, which is exactly its smallest normal `2^-1022`; it now refines past that wall. Overlapping digits are unchanged in meaning -- the value simply carries further -- but **anyone pinning `elreal<double>` output will see a difference**. Measured against an independently generated 3000-digit reference, `elreal<double>` now reaches 1598 digits at depth 96 and is linear at 16.0 digits/block with no ceiling in sight. | host | k | before | after | |------|---|--------|-------| | `double` | 53 | 307 (its own exponent wall) | 1598 at depth 96, still linear | | `float` | 24 | 37 (hard cap) | 319 | | `bfloat16` | 7 | 33 (hard cap) | 146 and climbing | The ceiling was never a precision limit -- it was the host's exponent range, with blocks carrying their scale in the host significand instead of in the wide `integer<256>` exponent the design provides. The fix is one rule at three EFT sites (normalise *operands*, not results) plus a nonadjacent `k+1` shortcut in `twoSumRN` that preserves its round-to-nearest contract and bounds every alignment shift. ### Known limitations - `half` (`cfloat<16,5>`) as an `elreal` host is still capped at 20 digits ([#1363](https://github.com/stillwater-sc/universal/issues/1363)). Its presumed blocker, the division refinement floor, is now gone and it remains capped, so the cause is something else. - `agreed_decimal_digits` may credit reach over content on sparse narrow-host expansions ([#1364](https://github.com/stillwater-sc/universal/issues/1364)). For `bfloat16`, treat the payload bound (~112 digits) as the conservative figure rather than the 146 reported. ### Added - **elreal**: Cancellation-stressed accumulation benchmarks and oracle ([#1353](https://github.com/stillwater-sc/universal/pull/1353)) by @Ravenwater - **elreal**: Exact geometric predicate suite (orient2d / incircle) ([#1354](https://github.com/stillwater-sc/universal/pull/1354)) by @Ravenwater - **elreal**: Precision-to-latency matrix for the block-shape study ([#1356](https://github.com/stillwater-sc/universal/pull/1356)) by @Ravenwater - **tools**: Sweep the adaptive characterization over host FpType ([#1357](https://github.com/stillwater-sc/universal/pull/1357)) by @Ravenwater - **elreal**: Lift the narrow-host ceiling -- float 37 -> 319 digits ([#1361](https://github.com/stillwater-sc/universal/pull/1361)) by @Ravenwater ### Documentation - **elreal**: Re-validate the Phase 9 block-shape study against current main ([#1352](https://github.com/stillwater-sc/universal/pull/1352)) by @Ravenwater ### Fixed - **elreal**: Keep bfloat16's two_prod in host arithmetic ([#1358](https://github.com/stillwater-sc/universal/pull/1358)) by @Ravenwater - **bfloat16**: Report the true scale of subnormals ([#1359](https://github.com/stillwater-sc/universal/pull/1359)) by @Ravenwater - **elreal**: Normalise every host -- double was sitting on its own wall ([#1362](https://github.com/stillwater-sc/universal/pull/1362)) by @Ravenwater - **elreal**: Bound el_api_math's constants -- UBSan timeout on main ([#1365](https://github.com/stillwater-sc/universal/pull/1365)) by @Ravenwater
Share this resource