Library

universal v4.9.0

Versionv4.9.0
Stars★ 499
Released2026-08-21

Large 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


Discovered 2026-08-21 Source GitHub Archive 2026-08 →