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

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

Build:
Build:
LAST BUILD BRANCH: main
DEFAULT BRANCH: master
Ran 14 Aug 2026 10:04PM UTC
Jobs 1
Files 616
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

14 Aug 2026 09:26PM UTC coverage: 85.428% (+0.06%) from 85.369%
31842405092

push

github

web-flow
fix(takum_log): make multiplication and division exact (#1312)

Both operators evaluated in a double: operator*= was
convert_ieee754(double(*this) * double(rhs)).  That rounds each operand to a
double before combining them, and takum_log<64,3> carries 59 fraction bits of l
against a double's 53.  Measured against a 113-bit reference, 99% of
wide-configuration products came back incorrectly rounded.

Neither operation needs a double, or any extended-precision type.
|x*y| = sqrt(e)^(lx + ly) and |x/y| = sqrt(e)^(lx - ly), and l is an integer
characteristic plus a p-bit fraction, so aligning the two on the wider
denominator and adding or subtracting is exact integer arithmetic.
encode_fraction() then performs the single rounding the result needs.

                        before        after
    takum_log<16,3>     0.00%         0.00%
    takum_log<32,3>     0.00%         0.00%
    takum_log<64,3>    99.22%         0.00%

Addition and subtraction are untouched, as is the linear takum.  Those have no
logarithmic shortcut and need the extended-precision path #1300 proposes.

The suite exists because nothing else covers the new code: removing the division
borrow is caught by neither the api, mathlib, conversion nor logic suites, nor by
identity checks like a/1 and a/a, which never trigger a borrow.  The load-bearing
check compares against a reference recomputed in dd_cascade; removing the borrow
trips it with 7,100 failures at 8 bits and 289,024 at 10, while correctly leaving
multiplication passing.

Known gap, tracked as follow-up: that reference check runs at 8 and 10 bits only,
so the 64-bit width this change is for has no committed coverage.  It is verified
against a 113-bit __float128 oracle, which needs quadmath and cannot ship.
VerifyCorrectlyRounded also uses 1ull << nbits, which would be undefined at
nbits == 64; a bounded 64-bit case has to avoid instantiating it directly.

Also adds takum_log to the conventional-commit scopes.

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

1 existing line in 1 file now uncovered.

42256 of 49464 relevant lines covered (85.43%)

7263829.11 hits per line

Coverage Regressions

Lines Coverage ∆ File
1
31.07
-0.36% include/sw/universal/verification/test_suite_randoms.hpp
Jobs
ID Job ID Ran Files Coverage
1 31842405092.1 14 Aug 2026 10:04PM UTC 616
85.43
GitHub Action Run
Source Files on build 31842405092
  • Tree
  • List 616
  • Changed 4
  • Source Changed 1
  • Coverage Changed 4
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #31842405092
  • c3927fc5 on github
  • Prev Build on main (#31833665626)
  • Next Build on main (#31844197988)
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