• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

stillwater-sc / universal / 35475770069
86%
master: 84%

Build:
Build:
LAST BUILD BRANCH: main
DEFAULT BRANCH: master
Ran 19 Sep 2026 11:53PM UTC
Jobs 1
Files 675
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

19 Sep 2026 11:18PM UTC coverage: 85.822% (+0.02%) from 85.807%
35475770069

push

github

web-flow
feat(ereal): ereal<maxlimbs, FpType> with limits derived from the limb type (#1570)

* feat(ereal): ereal<maxlimbs, FpType> with limits derived from the limb type

Part 2 of #1355. ereal's limb is a template parameter, defaulted to
double so ereal<8> keeps its meaning: float, double, and long double
where it is x87 extended or binary128. With long double limbs ereal
reaches past the 303 digits double limbs are capped at (x87: 255 limbs,
~4900 digits).

- The constants that were double's written out longhand (EXP_BIAS,
  MAX_EXP, MIN_EXP_NORMAL, MIN_EXP_SUBNORMAL) come from the limb type,
  and the hard cap maxlimbs <= 19 is max_safe_limbs =
  -(min_exponent - 1) / digits: 5 for float, 19 for double, 255 for x87,
  144 for binary128. is_expansion_limb_v guards the limb type, refusing
  IBM double-double with the reason in the message.
- Conversions are exact for every limb type: integers are split into
  chunks a limb holds exactly, and a floating-point value wider than one
  limb becomes an expansion rather than being rounded to one limb.
- Special values, parse's digit budget and powers of ten, and to_string's
  buffer follow the limb type; to_digits scales by exact powers of two
  itself rather than through the math library.
- The free functions and operators in ereal_impl.hpp carry the limb type;
  the math library, numeric_limits and traits stay double-only for now
  (#1565, #1567).

For double limbs the results are byte-identical to before -- a
differential harness (41019 lines of hexfloat over arithmetic,
conversions, parse, special values and to_string at 4, 8 and 19 limbs)
matches on gcc and clang -- except in two places, both on purpose:

BEHAVIOUR-CHANGE: ereal<n>::maxpos/maxneg are a non-overlapping expansion; the old decimal-literal fourth limb overlapped the third
BEHAVIOUR-CHANGE: an ereal<n> built from an x87 long double keeps all its bits as an expansion instead of rounding to one double

dyadic::from_fp<T> is the exact oracle for any ... (continued)

100 of 108 new or added lines in 3 files covered. (92.59%)

9 existing lines in 1 file now uncovered.

45122 of 52576 relevant lines covered (85.82%)

9233465.52 hits per line

Uncovered Changes

Lines Coverage ∆ File
8
87.77
2.67% include/sw/universal/number/ereal/ereal_impl.hpp

Coverage Regressions

Lines Coverage ∆ File
9
93.47
-0.52% include/sw/universal/number/cfloat/cfloat_impl.hpp
Jobs
ID Job ID Ran Files Coverage
1 35475770069.1 19 Sep 2026 11:53PM UTC 675
85.82
GitHub Action Run
Source Files on build 35475770069
  • Tree
  • List 675
  • Changed 4
  • Source Changed 3
  • Coverage Changed 4
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #35475770069
  • 0817ed1b on github
  • Prev Build on main (#35470302680)
  • Next Build on main (#35482146007)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc