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

stillwater-sc / universal / 27519576221
85%
master: 84%

Build:
Build:
LAST BUILD BRANCH: main
DEFAULT BRANCH: master
Ran 15 Jun 2026 02:48AM UTC
Jobs 1
Files 677
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

15 Jun 2026 01:58AM UTC coverage: 84.569% (+0.002%) from 84.567%
27519576221

push

github

web-flow
fix(elreal): arrest the streaming multiply at the host floor (#1068) (#1072)

mul_online kept emitting product blocks once a product reached the host's
smallest normal exponent (~2^-1022). block_two_mult places the residual `low`
a full k below `high`, so near the floor these blocks DENORMALISE -- and a
subnormal block cannot hold its k significand bits, so the streaming product
could no longer keep consecutive blocks k apart. Two subnormal blocks ~22 apart
near 2^-1074 broke the ZBCL 0-overlap invariant (assert in Debug; silently
non-canonical in Release). This is why dense online division was capped at ~8
blocks / ~118 digits: deeper Newton iterations reached the floor.

Root cause confirmed by instrumenting the assert -- the violating pair was two
SUBNORMAL blocks (E=-1052, E=-1074), i.e. the host floor, NOT a "~ -550
canonicalisation" limit as an earlier banner guessed.

Fix: singleMultHelper drops GENUINELY subnormal blocks at the source (the eager
mul()/div() do this via priestRenorm + keep_normalised every step; a streaming
producer cannot post-renormalise):
  - high subnormal -> stop the series (gs descends, so all later f*g are smaller)
  - low subnormal  -> emit `high` only (the dropped residual is < 2^-1022)
A ZERO product block is NOT a floor condition -- it is value-neutral and passes
through (drop_zeros handles it). Distinguishing zero from subnormal was the key:
keying on is_normalised() alone stopped the series on the zero blocks that
2 - b*r produces, collapsing the reciprocal to ~1 block.

With no subnormal block ever entering a stream, the 0-overlap break is gone and
the dense Newton reciprocal refines to the host floor: dense div now reaches ~17
components / ~265 digits (was ~8 / ~118), 0-overlap canonical, reconstructing
q*b == a exactly. The mul_canonical_cap=8 stopgap in div_online is removed.

verify_div_dense_deep strengthened to assert >=14 blocks, lastE <= -750, all
blocks normal, deep reconstruction. PASS on gcc 13.3 + clan... (continued)

6 of 6 new or added lines in 2 files covered. (100.0%)

3 existing lines in 1 file now uncovered.

47789 of 56509 relevant lines covered (84.57%)

6801600.64 hits per line

Coverage Regressions

Lines Coverage ∆ File
3
80.58
-0.67% include/sw/universal/number/posit1/specialized/posit_16_1.hpp
Jobs
ID Job ID Ran Files Coverage
1 27519576221.1 15 Jun 2026 02:48AM UTC 677
84.57
GitHub Action Run
Source Files on build 27519576221
  • Tree
  • List 677
  • Changed 4
  • Source Changed 2
  • Coverage Changed 4
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #27519576221
  • d67a022d on github
  • Prev Build on main (#27470046955)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc