// Copyright (C) 2026 Kiyotsugu Arai // SPDX-License-Identifier: LGPL-3.0-or-later // FloatOps.hpp // 多倍長浮動小数点数の3引数演算 (GMP mpf_add/sub/mul/div 相当) // result のバッファを再利用し、オブジェクト生成オーバーヘッドを回避する。 #ifndef CALX_FLOAT_OPS_HPP #define CALX_FLOAT_OPS_HPP #include namespace calx { /** * @brief 多倍長浮動小数点数の3引数演算ユーティリティ * * GMP/MPFR の mpfr_add(r, a, b, rnd) 相当の API を提供。 * result のバッファを再利用することで、operator+/- 等の値返却に伴う * Float 構築・normalize・move のオーバーヘッドを回避する。 * * result は lhs, rhs と同一オブジェクトでも可 (エイリアシング安全)。 */ class FloatOps { public: // 3引数版 add/sub/mul/div: result のバッファを再利用 static void add(const Float& lhs, const Float& rhs, Float& result); static void sub(const Float& lhs, const Float& rhs, Float& result); static void mul(const Float& lhs, const Float& rhs, Float& result); static void sqr(const Float& x, Float& result); static void div(const Float& lhs, const Float& rhs, Float& result); }; } // namespace calx #endif // CALX_FLOAT_OPS_HPP