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

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

Build:
Build:
LAST BUILD BRANCH: main
DEFAULT BRANCH: master
Ran 19 Sep 2026 10:05PM 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 09:24PM UTC coverage: 85.807% (+0.003%) from 85.804%
35470302680

push

github

web-flow
feat(internal): expansion limb trait and expansion_ops templated on FpType (#1569)

* feat(internal): expansion limb trait and expansion_ops templated on FpType

Part 1 of #1355: the expansion arithmetic under ereal works on any limb
type whose arithmetic is a p-bit IEEE-754 binary format -- float, double,
x87 extended, binary128 -- not just double.

- is_expansion_limb_v<T> decides what may be a limb. is_iec559 alone does
  not: libstdc++ reports it true for IBM double-double, the default
  ppc64le long double (measured under QEMU), on which two_sum is not
  error-free. The added test is IEEE's emin = 1 - emax, i.e.
  min_exponent == 3 - max_exponent, which double-double fails (-968 vs
  1024). two_sum, fast_two_sum and two_prod static_assert it, with the
  reason and the -mabi=ieeelongdouble way out in the message.
- Every function in expansion_ops is a template on the limb type,
  defaulted to double so braced-list calls keep resolving as before.
- What was double's is derived from the limb type: the #1553 range
  thresholds (1000, 1020, and -1100 for zero) from max_exponent and
  min_exponent, the 53-bit overlap checks from digits.

The double path is bit-identical: a differential harness over every
operation (4000 seeded cases, including the top of the range) produces
byte-identical output from the old and new header, on gcc and clang.

A side effect: expansion_ops' EFTs no longer collide with floatcascade's,
which declares plain-double ones in the same namespace, so a program can
now use ereal together with dd_cascade, td_cascade or qd_cascade -- that
was a redefinition error before.

Relates to #1355
Resolves #1563

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* fix(internal): keep the limbs range scaling cannot carry

The range management of #1553 scales both operands down before a sum or
product near the top of the range. It scaled every component, and a
component whose low bits fall below the smallest subnormal once sh... (continued)

368 of 417 new or added lines in 3 files covered. (88.25%)

4 existing lines in 2 files now uncovered.

45095 of 52554 relevant lines covered (85.81%)

9230782.16 hits per line

Uncovered Changes

Lines Coverage ∆ File
23
86.23
internal/expansion/primitives/limb_types.cpp
20
47.37
internal/expansion/api/coexistence.cpp
6
95.18
0.55% include/sw/universal/internal/expansion/expansion_ops.hpp

Coverage Regressions

Lines Coverage ∆ File
3
95.18
0.55% include/sw/universal/internal/expansion/expansion_ops.hpp
1
93.99
0.45% include/sw/universal/number/cfloat/cfloat_impl.hpp
Jobs
ID Job ID Ran Files Coverage
1 35470302680.1 19 Sep 2026 10:05PM UTC 675
85.81
GitHub Action Run
Source Files on build 35470302680
  • Tree
  • List 675
  • Changed 3
  • Source Changed 1
  • Coverage Changed 3
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #35470302680
  • b14a4a9d on github
  • Prev Build on main (#35410889219)
  • Next Build on main (#35475770069)
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