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

stillwater-sc / universal / 35523692073
87%
master: 84%

Build:
Build:
LAST BUILD BRANCH: main
DEFAULT BRANCH: master
Ran 20 Sep 2026 05:27PM UTC
Jobs 1
Files 676
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

20 Sep 2026 04:45PM UTC coverage: 85.858% (+0.004%) from 85.854%
35523692073

push

github

web-flow
fix(internal): stop the error-free transformations depending on a build flag (#1580)

* fix(internal): stop the error-free transformations depending on a build flag

mingw-w64's software std::fma is not correctly rounded. Measured against
Dekker's product over 200000 random pairs in [0.5, 2), 15763 of them -- 7.9% --
come back with a wrong roundoff:

    dekker = -5.24664541231088145084e-17
    fma    = -5.24664574318312647205e-17     wrong from the 9th digit

y == fma(a, b, -x) is an error-free transformation only if fma rounds once, so
on that build two_prod is not error-free and every algorithm above it silently
loses its exactness guarantee.

This was already known: cmake/toolchains/x86_64-w64-mingw32.cmake passes -mfma
so gcc emits the hardware FMA3 instruction instead of calling the routine, and
the comment there names floatcascade as what it broke. With -mfma the
disagreements go to zero, and every configuration this project builds and tests
is correct.

A build that does not use that toolchain file is not correct, and it fails
silently -- no error, no warning, just wrong low-order bits. Correctness should
not rest on a flag the caller has to remember. UNIVERSAL_TRUSTED_FMA in
utility/directives.hpp answers "is std::fma correctly rounded here?" the same
way LONG_DOUBLE_SUPPORT answers its question (#1534), and the affected sites
fall back to Dekker's product, which needs nothing from libm.

Affected, measured on MinGW without -mfma, before -> after:

    expansion_ops two_prod (ereal)   5333/50000 wrong  ->  0
    floatcascade two_prod (dd/qd)    7942/100000 wrong ->  0

The ereal suites fail outright there; the cascade suites happen to pass, so that
half is a latent inexactness rather than an observed failure -- but it is the
same identity on the same broken fma, and it is what the toolchain comment was
written about.

tracked_bounded uses fma for three exact residuals, two of which are consulted
only for their SIGN, which an incorrectly round... (continued)

30 of 32 new or added lines in 2 files covered. (93.75%)

3 existing lines in 1 file now uncovered.

45204 of 52650 relevant lines covered (85.86%)

9308858.19 hits per line

Uncovered Changes

Lines Coverage ∆ File
2
90.7
0.6% internal/expansion/primitives/eft_exactness.cpp

Coverage Regressions

Lines Coverage ∆ File
3
93.86
-0.19% include/sw/universal/number/cfloat/cfloat_impl.hpp
Jobs
ID Job ID Ran Files Coverage
1 35523692073.1 20 Sep 2026 05:27PM UTC 676
85.86
GitHub Action Run
Source Files on build 35523692073
  • Tree
  • List 676
  • Changed 4
  • Source Changed 3
  • Coverage Changed 4
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #35523692073
  • ffc22504 on github
  • Prev Build on main (#35501462888)
  • Next Build on main (#35536541932)
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