Stan  1.3
probability, sampling & optimization
 All Classes Namespaces Files Functions Variables Typedefs Enumerator Friends Macros Pages
operator_subtraction.hpp
Go to the documentation of this file.
1 #ifndef __STAN__AGRAD__REV__OPERATOR_SUBTRACTION_HPP__
2 #define __STAN__AGRAD__REV__OPERATOR_SUBTRACTION_HPP__
3 
4 #include <stan/agrad/rev/var.hpp>
8 
9 namespace stan {
10  namespace agrad {
11 
12  namespace {
13  class subtract_vv_vari : public op_vv_vari {
14  public:
15  subtract_vv_vari(vari* avi, vari* bvi) :
16  op_vv_vari(avi->val_ - bvi->val_, avi, bvi) {
17  }
18  void chain() {
19  avi_->adj_ += adj_;
20  bvi_->adj_ -= adj_;
21  }
22  };
23 
24  class subtract_vd_vari : public op_vd_vari {
25  public:
26  subtract_vd_vari(vari* avi, double b) :
27  op_vd_vari(avi->val_ - b, avi, b) {
28  }
29  void chain() {
30  avi_->adj_ += adj_;
31  }
32  };
33 
34  class subtract_dv_vari : public op_dv_vari {
35  public:
36  subtract_dv_vari(double a, vari* bvi) :
37  op_dv_vari(a - bvi->val_, a, bvi) {
38  }
39  void chain() {
40  bvi_->adj_ -= adj_;
41  }
42  };
43  }
44 
59  inline var operator-(const var& a, const var& b) {
60  return var(new subtract_vv_vari(a.vi_,b.vi_));
61  }
62 
74  inline var operator-(const var& a, const double b) {
75  if (b == 0.0)
76  return a;
77  return var(new subtract_vd_vari(a.vi_,b));
78  }
79 
91  inline var operator-(const double a, const var& b) {
92  return var(new subtract_dv_vari(a,b.vi_));
93  }
94 
95  }
96 }
97 #endif

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