Stan Math Library  2.15.0
reverse mode automatic differentiation
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  }
68 }
69 #endif
fvar< T > fmin(const fvar< T > &x1, const fvar< T > &x2)
Definition: fmin.hpp:14
const double NOT_A_NUMBER
(Quiet) not-a-number value.
Definition: constants.hpp:55
#define unlikely(x)
Definition: likely.hpp:9
int is_nan(const fvar< T > &x)
Returns 1 if the input&#39;s value is NaN and 0 otherwise.
Definition: is_nan.hpp:21

     [ Stan Home Page ] © 2011–2016, Stan Development Team.