Stan Math Library  2.9.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 <math.h>
5 #include <stan/math/fwd/core.hpp>
8 
9 namespace stan {
10  namespace math {
11 
12  template <typename T>
13  inline fvar<T> fmin(const fvar<T>& x1, const fvar<T>& x2) {
16  if (unlikely(boost::math::isnan(x1.val_))) {
17  if (boost::math::isnan(x2.val_))
18  return fvar<T>(fmin(x1.val_, x2.val_), NOT_A_NUMBER);
19  else
20  return fvar<T>(x2.val_, x2.d_);
21  } else if (unlikely(boost::math::isnan(x2.val_))) {
22  return fvar<T>(x1.val_, x1.d_);
23  } else if (x1.val_ < x2.val_) {
24  return fvar<T>(x1.val_, x1.d_);
25  } else if (x1.val_ == x2.val_) {
26  return fvar<T>(x1.val_, NOT_A_NUMBER);
27  } else {
28  return fvar<T>(x2.val_, x2.d_);
29  }
30  }
31 
32  template <typename T>
33  inline fvar<T> fmin(const double x1, const fvar<T>& x2) {
36  if (unlikely(boost::math::isnan(x1))) {
37  if (boost::math::isnan(x2.val_))
38  return fvar<T>(fmin(x1, x2.val_), NOT_A_NUMBER);
39  else
40  return fvar<T>(x2.val_, x2.d_);
41  } else if (unlikely(boost::math::isnan(x2.val_))) {
42  return fvar<T>(x1, 0.0);
43  } else if (x1 < x2.val_) {
44  return fvar<T>(x1, 0.0);
45  } else if (x1 == x2.val_) {
46  return fvar<T>(x2.val_, NOT_A_NUMBER);
47  } else {
48  return fvar<T>(x2.val_, x2.d_);
49  }
50  }
51 
52  template <typename T>
53  inline fvar<T> fmin(const fvar<T>& x1, const double x2) {
56  if (unlikely(boost::math::isnan(x1.val_))) {
57  if (boost::math::isnan(x2))
58  return fvar<T>(fmin(x1.val_, x2), NOT_A_NUMBER);
59  else
60  return fvar<T>(x2, 0.0);
61  } else if (unlikely(boost::math::isnan(x2))) {
62  return fvar<T>(x1.val_, x1.d_);
63  } else if (x1.val_ < x2) {
64  return fvar<T>(x1.val_, x1.d_);
65  } else if (x1.val_ == x2) {
66  return fvar<T>(x1.val_, NOT_A_NUMBER);
67  } else {
68  return fvar<T>(x2, 0.0);
69  }
70  }
71 
72  }
73 }
74 #endif
fvar< T > fmin(const fvar< T > &x1, const fvar< T > &x2)
Definition: fmin.hpp:13
const double NOT_A_NUMBER
(Quiet) not-a-number value.
Definition: constants.hpp:56
var fmin(double a, const stan::math::var &b)
Returns the minimum of a scalar and variable, promoting the scalar to a variable if it is larger (C99...
Definition: fmin.hpp:120
bool isnan(const stan::math::var &v)
Checks if the given number is NaN.
Definition: boost_isnan.hpp:22
#define unlikely(x)
Definition: likely.hpp:9

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