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

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

Build:
Build:
LAST BUILD BRANCH: refactor/1334-phase-n-integer-core
DEFAULT BRANCH: master
Ran 21 Aug 2026 04:28AM 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

21 Aug 2026 03:56AM UTC coverage: 85.371% (+0.02%) from 85.353%
32445160313

push

github

web-flow
fix(elreal): make the half host converge -- 20 digits to 122 and climbing (#1366)

* fix(elreal): make the half host converge -- 20 digits to 122 and climbing

#1363. half (cfloat<16,5>) was capped at 20 decimal digits at every depth, with
block counts growing 13 -> 60 while accuracy stayed flat, so roughly 47 of those
blocks contributed nothing. It now reaches 22/28/42/68/122 digits at depths
2/4/8/16/32 -- monotonic, no ceiling, and 3.6 digits per block against a
theoretical k * log10(2) = 3.3.

Two defects, found by isolating which operation stops improving rather than by
reasoning about which one ought to.

First, three block_two_mult call sites never normalised their operands:
multiply.hpp had two and divide.hpp one. The rule from #1051 -- normalise
OPERANDS, not results -- had been applied to the streaming paths and missed the
eager ones. bfloat16 and float survived it because their exponent ranges absorb
unnormalised operands; half's does not. Symptom was stark: mul(x,x) agreed with
the exact square to 3 digits on half against 320 on every other host. Fixed, and
it is 320 everywhere now.

Second, and specific to half, add() was inexact -- 5 in 2000 random multi-block
additions -- which breaks the ZBCL exactness invariant outright. two_sum's
residual can land a full 2k binades below the leading operand: the smaller
operand is aligned up to k down, and the residual up to another k below that. A
host needs 2k binades of room beneath a normalised operand, and half is the only
one short:

    half      k=11   need 22, has   14   -> short by 8
    bfloat16  k= 7   need 14, has  126
    float     k=24   need 48, has  126
    double    k=53   need 106, has 1022

The fix borrows from the other end. half has 16 binades of unused headroom ABOVE
1.0, and a block's scale lives in its wide exponent, so shifting v up and exp
down by the same amount is exact and leaves exponent() unchanged.
block::eft_scale_bias() computes the shortfall per host and bias_for_e... (continued)

15 of 15 new or added lines in 5 files covered. (100.0%)

43081 of 50463 relevant lines covered (85.37%)

7146889.94 hits per line

Jobs
ID Job ID Ran Files Coverage
1 32445160313.1 21 Aug 2026 04:28AM UTC 620
85.37
GitHub Action Run
Source Files on build 32445160313
  • Tree
  • List 620
  • Changed 6
  • Source Changed 5
  • Coverage Changed 5
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #32445160313
  • f821f965 on github
  • Prev Build on main (#32429280776)
  • Next Build on main (#32449306562)
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