27#ifndef ROOT_Math_VecTypes
34#define MATH_UNUSED(var) (void)var
52 std::ostringstream buf;
55 std::string ret = buf.str();
65 static const T
epsilon = T(2.0 * std::numeric_limits<double>::min());
121 template<
typename T =
double,
unsigned int N = 1>
127 fSum[0] = initialValue;
128 std::fill(std::begin(
fSum)+1, std::end(
fSum), 0.);
135 auto t =
fSum[0] +
y;
147 template <
class Iterator>
148 void Add(Iterator begin, Iterator end) {
149 static_assert(std::is_floating_point<
150 typename std::remove_reference<
decltype(*begin)>
::type>::value,
151 "Iterator needs to point to floating-point values.");
152 const std::size_t
n = std::distance(begin, end);
154 for (std::size_t i=0; i<
n; ++i) {
162 template<
class Container_t>
163 void Add(
const Container_t& inputs) {
164 static_assert(std::is_floating_point<typename Container_t::value_type>::value,
165 "Container does not hold floating-point values.");
166 for (std::size_t i=0; i < inputs.size(); ++i) {
178 template <
class Iterator>
180 T initialValue = T{}) {
182 theSum.Add(begin, end);
200 const unsigned int i = index %
N;
202 const T t =
fSum[i] +
y;
209 return std::accumulate(std::begin(
fSum), std::end(
fSum), 0.);
224 return std::accumulate(std::begin(
fCarry), std::end(
fCarry), 0.);
The Kahan summation is a compensated summation algorithm, which significantly reduces numerical error...
static KahanSum< T, N > Accumulate(Iterator begin, Iterator end, T initialValue=T{})
Iterate over a range and return an instance of a KahanSum.
void Add(Iterator begin, Iterator end)
Accumulate from a range denoted by iterators.
void Add(const Container_t &inputs)
Fill from a container that supports index access.
void AddIndexed(T input, std::size_t index)
Add input to the sum.
KahanSum< T, N > & operator+=(T arg)
Add arg into accumulator. Does not vectorise.
KahanSum(T initialValue=T{})
Initialise the sum.
void Add(T x)
Single-element accumulation. Will not vectorise.
Namespace for new Math classes and functions.
T EvalLog(T x)
safe evaluation of log(x) with a protections against negative or zero argument to the log smooth line...
std::string ToString(const T &val)
Utility function for conversion to strings.
tbb::task_arena is an alias of tbb::interface7::task_arena, which doesn't allow to forward declare tb...