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

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

Build:
Build:
LAST BUILD BRANCH: main
DEFAULT BRANCH: master
Ran 27 Mar 2026 10:53PM UTC
Jobs 1
Files 629
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

27 Mar 2026 10:24PM UTC coverage: 84.384% (+0.01%) from 84.371%
23670073104

push

github

web-flow
fix(fixpnt): replace double fallback with full-precision division in saturating path (#610)

* fix(fixpnt): replace double fallback with full-precision blockbinary division in saturating path

The saturating fixpnt::operator/= was silently converting both operands
to IEEE-754 double (52-bit mantissa), performing the division in double,
then converting back. This caused catastrophic precision loss for any
fixpnt wider than 53 bits — e.g. fixpnt<64,32,Saturate> lost 12 bits,
fixpnt<128,64,Saturate> lost 76 bits. The commented-out warning meant
users received no indication of the fallback.

Replace with proper blockbinary accumulator division (matching the
Modulo path) plus saturation clamping (matching operator*= Saturate).

* fix(fixpnt): clamp signed quotient in saturating division and add docstring

Reorder saturation logic: apply rounding and restore sign before
clamping, so negative boundary cases (-maxpos/1, maxneg/1) are
handled correctly. Add docstring to operator/= for coverage.

* fix(cfloat): replace double bottleneck in cross-configuration converting constructor

The cfloat-to-cfloat converting constructor unconditionally marshalled
through IEEE-754 double (53-bit mantissa), silently destroying
precision for any cfloat wider than 53 fraction bits.

Replace with a direct blocktriple-based conversion that:
- Creates a blocktriple sized to the TARGET's fraction width
- Pre-aligns source fraction bits with proper guard/round/sticky
  bit collection for round-to-nearest-even
- Handles normal, subnormal, and max-exponent source values
- Uses the existing convert() infrastructure for encoding
- Falls back to double only for cross-block-type conversions
  with srcFbits <= 52 (lossless), with a static_assert for wider

Verified with exhaustive tests across cfloat<8>, <12>, <16>, <32>
configurations including subnormals and saturating modes.

* Revert "fix(cfloat): replace double bottleneck in cross-configuration converting constructor"

This reverts ... (continued)

37 of 40 new or added lines in 1 file covered. (92.5%)

3 existing lines in 2 files now uncovered.

44436 of 52659 relevant lines covered (84.38%)

6123733.38 hits per line

Uncovered Changes

Lines Coverage ∆ File
3
92.57
-0.24% include/sw/universal/number/fixpnt/fixpnt_impl.hpp

Coverage Regressions

Lines Coverage ∆ File
2
89.8
-0.57% include/sw/universal/number/posito/posito_impl.hpp
1
92.57
-0.24% include/sw/universal/number/fixpnt/fixpnt_impl.hpp
Jobs
ID Job ID Ran Files Coverage
1 23670073104.1 27 Mar 2026 10:53PM UTC 629
84.38
GitHub Action Run
Source Files on build 23670073104
  • Tree
  • List 629
  • Changed 3
  • Source Changed 1
  • Coverage Changed 3
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #23670073104
  • b8f22448 on github
  • Prev Build on main (#23663759731)
  • Next Build on main (#23672108138)
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