universal v5.0.0
Permanent link:
cppdashboard.dev/r/2026/09/universal-v5-0-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
## [5.0.0] - 2026-09-24 ### Behaviour changes - **blocktriple**: streaming a blocktriple with a negative stream precision now formats as precision 0 instead of reading out of bounds (precision <= -2) or emitting one digit fewer (precision == -1) ([#1405](https://github.com/stillwater-sc/universal/pull/1405)) - **headers**: integer<>::showLimbs() prints the full limb encoding instead of one bit per limb -- it passed the bit width into to_binary's nibble-marker parameter and `true` into its nbits parameter; positRegime's "Regime needs to expand" diagnostic now goes to stderr rather than stdout ([#1407](https://github.com/stillwater-sc/universal/pull/1407)) - **edecimal**: sqrt(edecimal) no longer writes "decimal_negative_sqrt_arg" to stderr for non-negative arguments, and returns 0 rather than a NaN-derived value for negative ones ([#1423](https://github.com/stillwater-sc/universal/pull/1423)) - **headers**: to_hex(dd_cascade) returns its string again instead of recursing until the stack overflows (regression from #1429) ([#1464](https://github.com/stillwater-sc/universal/pull/1464)) - **blockdecimal**: blockdecimal BID comparisons, / and % now return correct results for magnitudes >= 2^(nbits-1); dfixpnt BID +, -, comparisons, division and saturation change accordingly ([#1481](https://github.com/stillwater-sc/universal/pull/1481)) - **blockdecimal**: blockdecimal and dfixpnt DPD types with ndigits % 3 == 2 now keep a leading 8 or 9 (previously read back as 0 or 1); maxpos/maxneg and numeric_limits max/lowest are corrected, and the stored bits of the top two-digit group change when it contains an 8 or 9 ([#1483](https://github.com/stillwater-sc/universal/pull/1483)) - **dfloat**: dfloat +, - and / no longer return overflowed garbage or drop digits (decimal32 1234567 / 1 was 8664.995), and subtraction across a power of ten is exact (decimal64 1e16 - 6 was 1e16); subtractions whose operands' leading digits are ndigits or ndigits + 1 apart are now truncated like other results instead of returning the larger operand ([#1488](https://github.com/stillwater-sc/universal/pull/1488)) - **dfloat**: dfloat parsing (assign, parse, operator>>) now reads leading zeros and digits beyond the precision correctly (decimal32 "0.0001234567" was 1.23e-8, "1.23456789" was 0.01234567, "0000000123" was 0), and saturates exponents too long for an int ([#1489](https://github.com/stillwater-sc/universal/pull/1489)) - **dfloat**: DPD dfloat types with ndigits % 3 != 1 now store and return the one or two digits just below the leading digit, which were previously lost, so their stored bits and values change; decimal32/64/128 are unaffected ([#1486](https://github.com/stillwater-sc/universal/pull/1486)) - **dfloat**: dfloat now rounds to nearest, ties to even (as numeric_limits declares) in + - * /, parsing, conversion from double and integers, and str(precision)/operator<< with setprecision; inexact results that were truncated now round (decimal32 2/3 = 0.6666667, was 0.6666666), and double conversion rounds ties to even instead of up ([#1490](https://github.com/stillwater-sc/universal/pull/1490)) - **dfloat**: dfloat values past emax that fit with trailing zeros are now finite (decimal32 1e91 was inf), and results below 10^emin round at emin instead of flushing to 0 (decimal32 15e-102 is 2e-101, was 0) ([#1490](https://github.com/stillwater-sc/universal/pull/1490)) - **dfloat**: dfloat zero results now carry IEEE 754 signs: -0 * 2 and 0 / -2 are -0 (were +0), -0 + +0, -0 - -0 and -2 + 2 are +0 (were -0), and unary minus flips the sign of a zero ([#1492](https://github.com/stillwater-sc/universal/pull/1492)) - **headers**: a translation unit that includes posit or fixpnt core.hpp without the umbrella and sets the type's THROW switch now forwards it to the quire, as the umbrella always did ([#1493](https://github.com/stillwater-sc/universal/pull/1493)) - **integer**: integer<> WholeNumber and NaturalNumber values with the top bit set now print, shift, divi…
Share this resource