Inline TwoSum into accurate_norm.h Move TwoSum directly into namespace ceres::internal in accurate_norm.h and remove the single-use compensated_math.h header. Change-Id: Ida0d79df9921e66677bd5463c0d5c22d9bc194a3
diff --git a/include/ceres/accurate_norm.h b/include/ceres/accurate_norm.h index 37fbf1b..63536ac 100644 --- a/include/ceres/accurate_norm.h +++ b/include/ceres/accurate_norm.h
@@ -65,8 +65,6 @@ #include <type_traits> #include <utility> -#include "ceres/internal/compensated_math.h" - namespace ceres { namespace internal { @@ -213,6 +211,18 @@ return maximum; } +// Similar to Fast2Sum, but without requiring ordering or a specific radix. +template <typename T> +constexpr std::pair<T, T> TwoSum(T a, T b) noexcept { + const T s = a + b; + const T a_prime = s - b; + const T b_prime = s - a_prime; + const T delta_a = a - a_prime; + const T delta_b = b - b_prime; + const T t = delta_a + delta_b; + return std::make_pair(s, t); +} + // Computes the sum of squares x^2 + y^2 + ... as the rounded sum and its // rounding error. template <typename T, typename... Args>
diff --git a/include/ceres/internal/compensated_math.h b/include/ceres/internal/compensated_math.h deleted file mode 100644 index 8efc7e5..0000000 --- a/include/ceres/internal/compensated_math.h +++ /dev/null
@@ -1,54 +0,0 @@ -// Ceres Solver - A fast non-linear least squares minimizer -// Copyright 2026 Google Inc. All rights reserved. -// http://ceres-solver.org/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// * Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above copyright notice, -// this list of conditions and the following disclaimer in the documentation -// and/or other materials provided with the distribution. -// * Neither the name of Google Inc. nor the names of its contributors may be -// used to endorse or promote products derived from this software without -// specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. -// -// Author: sergiu.deitsch@gmail.com (Sergiu Deitsch) - -#ifndef CERES_PUBLIC_INTERNAL_COMPENSATED_MATH_H_ -#define CERES_PUBLIC_INTERNAL_COMPENSATED_MATH_H_ - -#include <type_traits> -#include <utility> - -namespace ceres::internal { - -// Similar to Fast2Sum, but without requiring ordering or a specific radix. -template <typename T> -constexpr auto TwoSum(T a, T b) - -> std::enable_if_t<std::is_floating_point_v<T>, std::pair<T, T>> { - const T s = a + b; - const T a_prime = s - b; - const T b_prime = s - a_prime; - const T delta_a = a - a_prime; - const T delta_b = b - b_prime; - const T t = delta_a + delta_b; - return std::make_pair(s, t); -} - -} // namespace ceres::internal - -#endif // CERES_PUBLIC_INTERNAL_COMPENSATED_MATH_H_