Automatic Differentiation
 
Loading...
Searching...
No Matches
lmultiply.hpp
Go to the documentation of this file.
1#ifndef STAN_MATH_PRIM_FUN_LMULTIPLY_HPP
2#define STAN_MATH_PRIM_FUN_LMULTIPLY_HPP
3
7#include <cmath>
8
9namespace stan {
10namespace math {
11
24template <typename T1, typename T2, require_all_arithmetic_t<T1, T2>* = nullptr>
25inline return_type_t<T1, T2> lmultiply(const T1 a, const T2 b) {
26 using std::log;
27 if (a == 0 && b == 0) {
28 return 0;
29 }
30 return a * log(b);
31}
32
44template <typename T1, typename T2, require_any_container_t<T1, T2>* = nullptr,
45 require_all_not_var_matrix_t<T1, T2>* = nullptr>
46inline auto lmultiply(T1&& a, T2&& b) {
48 [](auto&& c, auto&& d) {
49 return lmultiply(std::forward<decltype(c)>(c),
50 std::forward<decltype(d)>(d));
51 },
52 std::forward<T1>(a), std::forward<T2>(b));
53}
54
55} // namespace math
56} // namespace stan
57
58#endif
typename return_type< Ts... >::type return_type_t
Convenience type for the return type of the specified template parameters.
auto apply_scalar_binary(F &&f, T1 &&x, T2 &&y)
Base template function for vectorization of binary scalar functions defined by applying a functor to ...
fvar< T > log(const fvar< T > &x)
Definition log.hpp:18
fvar< T > lmultiply(const fvar< T > &x1, const fvar< T > &x2)
Definition lmultiply.hpp:14
The lgamma implementation in stan-math is based on either the reentrant safe lgamma_r implementation ...