From 9f3a2fca44e0c4acc59c14972449a46bfad437c6 Mon Sep 17 00:00:00 2001 From: Emily Boudreaux Date: Mon, 9 Nov 2026 13:44:41 -0500 Subject: [PATCH] feat(utils/misc): added a number of misc things (e.g. float roundoff compensated summation class) --- .../serif/utils/misc/compensated_sum.hpp | 21 +++++++++++++++++++ .../serif/utils/misc/concepts/enumeration.hpp | 18 ---------------- .../serif/utils/misc/concepts/exceptions.hpp | 5 ----- .../serif/utils/misc/concepts/numeric.hpp | 6 ------ .../utils/misc/traits/type_uniqueness.hpp | 18 ++++++++-------- 5 files changed, 30 insertions(+), 38 deletions(-) create mode 100644 src/include/serif/utils/misc/compensated_sum.hpp delete mode 100644 src/include/serif/utils/misc/concepts/enumeration.hpp diff --git a/src/include/serif/utils/misc/compensated_sum.hpp b/src/include/serif/utils/misc/compensated_sum.hpp new file mode 100644 index 00000000..7c12dd86 --- /dev/null +++ b/src/include/serif/utils/misc/compensated_sum.hpp @@ -0,0 +1,21 @@ +#pragma once + +#include + +namespace serif::utils { + /// Neumaier summation retains small terms when a scalar reduction contains cancellation. + class CompensatedSum final { + public: + void add(const double value) { + const double next = m_sum + value; + m_correction += std::abs(m_sum) >= std::abs(value) ? (m_sum - next) + value : (value - next) + m_sum; + m_sum = next; + } + + [[nodiscard]] double value() const { return m_sum + m_correction; } + + private: + double m_sum{0.0}; + double m_correction{0.0}; + }; +} diff --git a/src/include/serif/utils/misc/concepts/enumeration.hpp b/src/include/serif/utils/misc/concepts/enumeration.hpp deleted file mode 100644 index ea76794e..00000000 --- a/src/include/serif/utils/misc/concepts/enumeration.hpp +++ /dev/null @@ -1,18 +0,0 @@ -#pragma once - -#include "serif/utils/misc/concepts/concat.hpp" -#include "serif/utils/types/type_list.hpp" - -namespace serif::utils::misc::concepts { - // Might make sense to rename these to FlatMap or some such - template typename Descriptor> - struct EnumerateTypes; - - template