fmin.hpp
Go to the documentation of this file.
1 #ifndef STAN_MATH_FWD_SCAL_FUN_FMIN_HPP
2 #define STAN_MATH_FWD_SCAL_FUN_FMIN_HPP
3 
4 #include <stan/math/fwd/core.hpp>
9 
10 namespace stan {
11 namespace math {
12 
13 template <typename T>
14 inline fvar<T> fmin(const fvar<T>& x1, const fvar<T>& x2) {
15  if (unlikely(is_nan(x1.val_))) {
16  if (is_nan(x2.val_))
17  return fvar<T>(fmin(x1.val_, x2.val_), NOT_A_NUMBER);
18  else
19  return fvar<T>(x2.val_, x2.d_);
20  } else if (unlikely(is_nan(x2.val_))) {
21  return fvar<T>(x1.val_, x1.d_);
22  } else if (x1.val_ < x2.val_) {
23  return fvar<T>(x1.val_, x1.d_);
24  } else if (x1.val_ == x2.val_) {
25  return fvar<T>(x1.val_, NOT_A_NUMBER);
26  } else {
27  return fvar<T>(x2.val_, x2.d_);
28  }
29 }
30 
31 template <typename T>
32 inline fvar<T> fmin(double x1, const fvar<T>& x2) {
33  if (unlikely(is_nan(x1))) {
34  if (is_nan(x2.val_))
35  return fvar<T>(fmin(x1, x2.val_), NOT_A_NUMBER);
36  else
37  return fvar<T>(x2.val_, x2.d_);
38  } else if (unlikely(is_nan(x2.val_))) {
39  return fvar<T>(x1, 0.0);
40  } else if (x1 < x2.val_) {
41  return fvar<T>(x1, 0.0);
42  } else if (x1 == x2.val_) {
43  return fvar<T>(x2.val_, NOT_A_NUMBER);
44  } else {
45  return fvar<T>(x2.val_, x2.d_);
46  }
47 }
48 
49 template <typename T>
50 inline fvar<T> fmin(const fvar<T>& x1, double x2) {
51  if (unlikely(is_nan(x1.val_))) {
52  if (is_nan(x2))
53  return fvar<T>(fmin(x1.val_, x2), NOT_A_NUMBER);
54  else
55  return fvar<T>(x2, 0.0);
56  } else if (unlikely(is_nan(x2))) {
57  return fvar<T>(x1.val_, x1.d_);
58  } else if (x1.val_ < x2) {
59  return fvar<T>(x1.val_, x1.d_);
60  } else if (x1.val_ == x2) {
61  return fvar<T>(x1.val_, NOT_A_NUMBER);
62  } else {
63  return fvar<T>(x2, 0.0);
64  }
65 }
66 
67 } // namespace math
68 } // namespace stan
69 #endif
fvar< T > fmin(const fvar< T > &x1, const fvar< T > &x2)
Definition: fmin.hpp:14
const double NOT_A_NUMBER
Definition: constants.hpp:53
Float_t x1[n_points_granero]
Definition: compare.C:5
#define unlikely(expr)
Definition: lz4.cxx:121
int is_nan(const fvar< T > &x)
Definition: is_nan.hpp:19