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

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

Build:
Build:
LAST BUILD BRANCH: losborn_bugfix_elreal_subnormal_blocks_aug26
DEFAULT BRANCH: master
Ran 19 Jul 2026 09:28PM UTC
Jobs 1
Files 699
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

19 Jul 2026 08:45PM UTC coverage: 84.774% (+0.05%) from 84.725%
29703104434

push

github

web-flow
fix(efloat): implement long double conversion (was yielding 0) (#1161)

convert_ieee754 only builds mantissa limbs for sizeof(Real) of 4 or 8; the else
branch was a no-op static_assert(true), so a wide long double (sizeof 16 on
x86-64) pushed no limbs and normalized to 0. Both the constructor/assignment
(input) and operator long double() (output) were affected -- input silently
produced 0, output capped at double precision.

Fix (both directions, portable, exact):
- operator=(long double): frexp into m * 2^e with m in [0.5,1) (inside double's
  range), decompose m into an exact sum of doubles via the working double path,
  then apply e with setexponent(). Preserves the full significand AND the
  extended exponent range.
- operator long double(): the dual -- bring |x| into [1,2), extract as an exact
  sum of doubles, scale by the true exponent with ldexp.
- Platforms where long double == double take a direct convert_ieee754(double)
  path (if constexpr).

Verified round-trip-exact across normal values, beyond-double precision
(1 + 2^-60 survives), the extended exponent range (2^1100, 2^-1100, 2^16000),
and special values (+/-0, +/-inf, NaN), on gcc and clang. New regression test
elastic/efloat/conversion/long_double.cpp (wide-only checks gated on
sizeof(long double) > sizeof(double)).

This also removes the need for the nexttoward long double -> double workaround
in math/next.hpp (#1120); left as a follow-up.

Resolves #1160

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

39 of 40 new or added lines in 1 file covered. (97.5%)

3 existing lines in 1 file now uncovered.

49760 of 58697 relevant lines covered (84.77%)

7033938.62 hits per line

Uncovered Changes

Lines Coverage ∆ File
1
87.93
0.36% include/sw/universal/number/efloat/efloat_impl.hpp

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 29703104434.1 19 Jul 2026 09:28PM UTC 699
84.77
GitHub Action Run
Source Files on build 29703104434
  • Tree
  • List 699
  • Changed 6
  • Source Changed 2
  • Coverage Changed 6
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #29703104434
  • 8144588f on github
  • Prev Build on main (#29693359164)
  • Next Build on main (#29704075260)
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