Stan Math Library  2.14.0
reverse mode automatic differentiation
fmax.hpp
Go to the documentation of this file.
1 #ifndef STAN_MATH_FWD_SCAL_FUN_FMAX_HPP
2 #define STAN_MATH_FWD_SCAL_FUN_FMAX_HPP
3 
4 #include <stan/math/fwd/core.hpp>
9 
10 namespace stan {
11  namespace math {
12 
13 
22  template <typename T>
23  inline fvar<T> fmax(const fvar<T>& x1, const fvar<T>& x2) {
24  if (unlikely(is_nan(x1.val_))) {
25  if (is_nan(x2.val_))
26  return fvar<T>(fmax(x1.val_, x2.val_), NOT_A_NUMBER);
27  else
28  return fvar<T>(x2.val_, x2.d_);
29  } else if (unlikely(is_nan(x2.val_))) {
30  return fvar<T>(x1.val_, x1.d_);
31  } else if (x1.val_ > x2.val_) {
32  return fvar<T>(x1.val_, x1.d_);
33  } else if (x1.val_ == x2.val_) {
34  return fvar<T>(x1.val_, NOT_A_NUMBER);
35  } else {
36  return fvar<T>(x2.val_, x2.d_);
37  }
38  }
39 
48  template <typename T>
49  inline fvar<T> fmax(double x1, const fvar<T>& x2) {
50  if (unlikely(is_nan(x1))) {
51  if (is_nan(x2.val_))
52  return fvar<T>(fmax(x1, x2.val_), NOT_A_NUMBER);
53  else
54  return fvar<T>(x2.val_, x2.d_);
55  } else if (unlikely(is_nan(x2.val_))) {
56  return fvar<T>(x1, 0.0);
57  } else if (x1 > x2.val_) {
58  return fvar<T>(x1, 0.0);
59  } else if (x1 == x2.val_) {
60  return fvar<T>(x2.val_, NOT_A_NUMBER);
61  } else {
62  return fvar<T>(x2.val_, x2.d_);
63  }
64  }
65 
74  template <typename T>
75  inline fvar<T> fmax(const fvar<T>& x1, double x2) {
76  if (unlikely(is_nan(x1.val_))) {
77  if (is_nan(x2))
78  return fvar<T>(fmax(x1.val_, x2), NOT_A_NUMBER);
79  else
80  return fvar<T>(x2, 0.0);
81  } else if (unlikely(is_nan(x2))) {
82  return fvar<T>(x1.val_, x1.d_);
83  } else if (x1.val_ > x2) {
84  return fvar<T>(x1.val_, x1.d_);
85  } else if (x1.val_ == x2) {
86  return fvar<T>(x1.val_, NOT_A_NUMBER);
87  } else {
88  return fvar<T>(x2, 0.0);
89  }
90  }
91  }
92 }
93 #endif
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
fvar< T > fmax(const fvar< T > &x1, const fvar< T > &x2)
Return the greater of the two specified arguments.
Definition: fmax.hpp:23

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