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

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

Build:
Build:
LAST BUILD BRANCH: fix/urdiv-removal
DEFAULT BRANCH: master
Ran 22 Aug 2026 03:47AM UTC
Jobs 1
Files 620
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

22 Aug 2026 03:14AM UTC coverage: 85.369% (-0.006%) from 85.375%
32548418546

push

github

web-flow
fix(elreal): stop infsum dropping a term when the accumulator cancels to zero (#1375)

infsumRec_step's null-sum branch advanced the input cursor to rest1.tail(),
discarding `bs` along with `as`. `bs` had not been consumed, so whenever a term
summed the accumulator to exactly zero, the FOLLOWING term was silently dropped
from the sum.

The branch was written as defensive dead code -- "full cancellation ... McCleeary's
pattern match assumes this cannot occur (prev dominates as)". It is not dead. Zero
blocks are legitimate ZBCL blocks, the streaming multiply emits an all-zero term
whenever an operand block is zero, and add(zero, zero) is empty.

The consequence was that mul_online silently truncated against any operand carrying
interior zero blocks. Two expansions holding the EXACT SAME VALUE gave different
products:

    [1@0, Z@-100, Z@-150, Z@-200, 1@-1700] * sqrt(2,8) ->  9 blocks, stops 2^-588
    [1@0,                        1@-1700] * sqrt(2,8) -> 16 blocks, reaches 2^-2088

Newton's reciprocal walked straight into it: the cancellation in 2 - b*r emits a
growing run of zero blocks as it converges (1, 2, 6, 14, 31 ...), so past a certain
depth the correction term r*e was discarded whole and the iteration fixed-pointed.
That is what capped dense division at ~513 decimal digits on a double host and ~62
on float, at any requested depth (#1373).

Fixed, div_online tracks its divisor's own accuracy at every depth on both hosts:

    depth        8     16     32     48     72    150
    double     131    265    524    784   1175   1240      (was 513 from d=32 on)
    float       60    123    246    369    552   1147      (was  62 from d=16 on)

matching sqrt(2,d) digit for digit. A float host now reaches 1147 digits through
division where it previously managed 62.

Consume only `as`, and set the accumulator to the empty (zero) ZBCL -- which is what
prevs + as actually is here; the old code set it to `as`, correct only because `as`
happened to be zero in... (continued)

2 of 2 new or added lines in 1 file covered. (100.0%)

8 existing lines in 1 file now uncovered.

43085 of 50469 relevant lines covered (85.37%)

7296820.4 hits per line

Coverage Regressions

Lines Coverage ∆ File
8
93.65
-0.48% include/sw/universal/number/cfloat/cfloat_impl.hpp
Jobs
ID Job ID Ran Files Coverage
1 32548418546.1 22 Aug 2026 03:47AM UTC 620
85.37
GitHub Action Run
Source Files on build 32548418546
  • Tree
  • List 620
  • Changed 3
  • Source Changed 1
  • Coverage Changed 3
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #32548418546
  • 38d88060 on github
  • Prev Build on main (#32520953030)
  • Next Build on main (#32575727434)
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