GCC Code Coverage Report


Directory: ./
Coverage: low: ≥ 0% medium: ≥ 75.0% high: ≥ 90.0%
Coverage Exec / Excl / Total
Lines: 100.0% 14 / 0 / 14
Functions: 100.0% 6 / 0 / 6
Branches: -% 0 / 0 / 0

src/math/kahan/lib.hpp
Line Branch Exec Source
1 #pragma once
2
3 #include "../../util/util/lib.hpp"
4
5 namespace tifa_libs {
6
7 template <std::floating_point FP>
8 class kahan_fp {
9 FP sum, c{0};
10
11 public:
12 1615 CEXP kahan_fp(FP val = 0) NE : sum{val} {}
13
14 185691 CEXP kahan_fp& operator+=(FP x) NE {
15 185691 const FP y = x - c;
16 185691 volatile FP t = sum + y, z = t - sum;
17 185691 c = z - y, sum = t;
18 185691 return *this;
19 }
20 1659 CEXP operator FP() CNE { return sum; }
21 };
22 template <class FP>
23 using kahan = std::conditional_t<std::floating_point<FP>, kahan_fp<FP>, FP>;
24
25 } // namespace tifa_libs
26