// Copyright (C) 2026 Kiyotsugu Arai // SPDX-License-Identifier: LGPL-3.0-or-later // RationalConstants.hpp // 有理数定数: Bernoulli 数, Stirling 係数 // // 移植元: lib++20 Bernoulli数.cpp, Stirling係数.cpp #ifndef CALX_RATIONAL_CONSTANTS_HPP #define CALX_RATIONAL_CONSTANTS_HPP #include namespace calx { /** * @brief Bernoulli 数 B(n) を計算 * * 標準再帰式: B(n) = -1/(n+1) * Σ C(n+1,k) * B(k)。 * B(0) = 1, B(1) = -1/2, B(odd > 1) = 0。 * 計算済みの値は静的キャッシュに保存される (スレッドセーフ)。 * * @param n Bernoulli 数の添字 (n >= 0) * @return B(n) を Rational で返す */ [[nodiscard]] Rational bernoulli(int n); /** * @brief Stirling 係数 c[k] を計算 * * Stirling 近似 n! ~ sqrt(2*pi*n) * (n/e)^n * (1 + c[1]/n + c[2]/n^2 + ...) * の係数。c[0] = 1。Bernoulli 数を用いた漸化式で計算。 * 計算済みの値は静的キャッシュに保存される (スレッドセーフ)。 * * 【出典】 * "Concerning Two Series for the Gamma Function" p618 * "A New Derivation of Stirling's Approximation to n!" p828 * * @param k 係数の添字 (k >= 0) * @return c[k] を Rational で返す */ [[nodiscard]] Rational stirlingCoefficient(int k); } // namespace calx #endif // CALX_RATIONAL_CONSTANTS_HPP