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

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

Build:
Build:
LAST BUILD BRANCH: main
DEFAULT BRANCH: master
Ran 15 Sep 2026 03:48AM UTC
Jobs 1
Files 670
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 Sep 2026 03:08AM UTC coverage: 85.89% (+0.03%) from 85.86%
34923825762

push

github

web-flow
fix(areal): read a straddling exponent field as the unsigned number it is (#1510)

Where the exponent field straddles a limb boundary, + - * came out wrong across the whole
range (#1506): areal<10,3,uint8_t> gave 3 + 5 = [0.03125] and 3 * 5 = (0, 0.0078125), and
areal<32,8,uint8_t> gave (0, minpos) for everything. The same configurations over a limb
wide enough to hold the field were right.

Both defects were in scale()'s branch for MSU_CAPTURES_E == false:

- It read the field through blockbinary<es, bt>, which is Signed, and its int()
  sign-extends. Every code with its top bit set, about half the exponent range, was taken
  as code - 2^es. It now reads the field with unsigned(), as to_native() and cfloat's
  scale() already do.
- For a subnormal it counted the scale down from -1 instead of from MIN_EXP_NORMAL - 1,
  as the single-limb branch does. The two branches now extract the field and share one
  decode.

normalizeAddition(), normalizeMultiplication() and normalizeDivision() take the operands'
scale from scale(). Division stayed close only because it subtracts the two scales, where
the constant error cancels. This is the Signed-default blockbinary defect class of #1410
and #1479, and dates back to 2021.

The new static/range/areal/arithmetic/limb_layout.cpp checks scale() against ilogb of the
exact value for every encoding of straddling and single-limb configurations, and checks
limb invariance: + - * / of random operand pairs over uint8_t limbs must give the same
encoding, bit for bit, as over one wide limb, for areal<16,5>, <20,8>, <24,6>, <32,8>,
<40,11> and <64,11>. saturation.cpp's exact-reference sweep of + - * now covers
areal<9,3>, <10,3>, <11,4> and <12,4> over uint8_t. Against a49a3e13 every straddling
group fails (areal<10,3,uint8_t>: 638120 wrong results, areal<32,8> u8 vs u32: 55247 of
80000); here all pass at every level on gcc and clang, and under QEMU on aarch64. The
areal suite passes 26/26 and the areal consumers print identi... (continued)

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

44072 of 51312 relevant lines covered (85.89%)

8238841.42 hits per line

Jobs
ID Job ID Ran Files Coverage
1 34923825762.1 15 Sep 2026 03:48AM UTC 670
85.89
GitHub Action Run
Source Files on build 34923825762
  • Tree
  • List 670
  • Changed 1
  • Source Changed 1
  • Coverage Changed 1
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #34923825762
  • 06ae9de2 on github
  • Prev Build on main (#34919720617)
  • Next Build on main (#34923927380)
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