WPILibC++ 2023.4.3-108-ge5452e3
log_binomial_coef.hpp
Go to the documentation of this file.
1/*################################################################################
2 ##
3 ## Copyright (C) 2016-2022 Keith O'Hara
4 ##
5 ## This file is part of the GCE-Math C++ library.
6 ##
7 ## Licensed under the Apache License, Version 2.0 (the "License");
8 ## you may not use this file except in compliance with the License.
9 ## You may obtain a copy of the License at
10 ##
11 ## http://www.apache.org/licenses/LICENSE-2.0
12 ##
13 ## Unless required by applicable law or agreed to in writing, software
14 ## distributed under the License is distributed on an "AS IS" BASIS,
15 ## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 ## See the License for the specific language governing permissions and
17 ## limitations under the License.
18 ##
19 ################################################################################*/
20
21#ifndef _gcem_log_binomial_coef_HPP
22#define _gcem_log_binomial_coef_HPP
23
24namespace internal
25{
26
27template<typename T>
28constexpr
29T
30log_binomial_coef_compute(const T n, const T k)
31noexcept
32{
33 return( lgamma(n+1) - (lgamma(k+1) + lgamma(n-k+1)) );
34}
35
36template<typename T1, typename T2, typename TC = common_return_t<T1,T2>>
37constexpr
38TC
39log_binomial_coef_type_check(const T1 n, const T2 k)
40noexcept
41{
42 return log_binomial_coef_compute(static_cast<TC>(n),static_cast<TC>(k));
43}
44
45}
46
47/**
48 * Compile-time log binomial coefficient
49 *
50 * @param n integral-valued input.
51 * @param k integral-valued input.
52 * @return computes the log Binomial coefficient
53 * \f[ \ln \frac{n!}{k!(n-k)!} = \ln \Gamma(n+1) - [ \ln \Gamma(k+1) + \ln \Gamma(n-k+1) ] \f]
54 */
55
56template<typename T1, typename T2>
57constexpr
58common_return_t<T1,T2>
59log_binomial_coef(const T1 n, const T2 k)
60noexcept
61{
63}
64
65#endif
EIGEN_DEVICE_FUNC const LgammaReturnType lgamma() const
\cpp11
Definition: ArrayCwiseUnaryOps.h:620
constexpr common_return_t< T1, T2 > log_binomial_coef(const T1 n, const T2 k) noexcept
Compile-time log binomial coefficient.
Definition: log_binomial_coef.hpp:59
Definition: Eigen_Colamd.h:50
constexpr TC log_binomial_coef_type_check(const T1 n, const T2 k) noexcept
Definition: log_binomial_coef.hpp:39
constexpr T log_binomial_coef_compute(const T n, const T k) noexcept
Definition: log_binomial_coef.hpp:30