sigma  1.0.0
Loading...
Searching...
No Matches
arithmetic.ipp
1#pragma once
3
4namespace sigma {
5
6template<typename T>
8 T mean = -a.mean();
9 T dcda = -1.0;
10 return detail_::unary_result(a, mean, dcda);
11}
12
13template<typename T>
15 Uncertain<T> c(lhs);
16 c += rhs;
17 return c;
18}
19
20template<typename T>
21Uncertain<T> operator+(const Uncertain<T>& lhs, double rhs) {
22 Uncertain<T> c(lhs);
23 c += rhs;
24 return c;
25}
26
27template<typename T>
28Uncertain<T> operator+(double lhs, const Uncertain<T>& rhs) {
29 Uncertain<T> c(rhs);
30 c += lhs;
31 return c;
32}
33
34template<typename T>
36 T mean = lhs.mean() + rhs.mean();
37 T dcda = 1.0;
38 T dcdb = 1.0;
39 detail_::inplace_binary(lhs, rhs, mean, dcda, dcdb);
40 return lhs;
41}
42
43template<typename T>
45 T mean = lhs.mean() + rhs;
46 T dcda = 1.0;
47 detail_::inplace_unary(lhs, mean, dcda);
48 return lhs;
49}
50
51template<typename T>
53 Uncertain<T> c(lhs);
54 c -= rhs;
55 return c;
56}
57
58template<typename T>
59Uncertain<T> operator-(const Uncertain<T>& lhs, double rhs) {
60 Uncertain<T> c(lhs);
61 c -= rhs;
62 return c;
63}
64
65template<typename T>
66Uncertain<T> operator-(double lhs, const Uncertain<T>& rhs) {
67 T mean = lhs - rhs.mean();
68 T dcda = -1.0;
69 return detail_::unary_result(rhs, mean, dcda);
70}
71
72template<typename T>
74 T mean = lhs.mean() - rhs.mean();
75 T dcda = 1.0;
76 T dcdb = -1.0;
77 detail_::inplace_binary(lhs, rhs, mean, dcda, dcdb);
78 return lhs;
79}
80
81template<typename T>
83 T mean = lhs.mean() - rhs;
84 T dcda = 1.0;
85 detail_::inplace_unary(lhs, mean, dcda);
86 return lhs;
87}
88
89template<typename T>
91 Uncertain<T> c(lhs);
92 c *= rhs;
93 return c;
94}
95
96template<typename T>
97Uncertain<T> operator*(const Uncertain<T>& lhs, double rhs) {
98 Uncertain<T> c(lhs);
99 c *= rhs;
100 return c;
101}
102
103template<typename T>
104Uncertain<T> operator*(double lhs, const Uncertain<T>& rhs) {
105 return rhs * lhs;
106}
107
108template<typename T>
110 T mean = lhs.mean() * rhs.mean();
111 T dcda = rhs.mean();
112 T dcdb = lhs.mean();
113 detail_::inplace_binary(lhs, rhs, mean, dcda, dcdb);
114 return lhs;
115}
116
117template<typename T>
119 T mean = lhs.mean() * rhs;
120 T dcda = rhs;
121 detail_::inplace_unary(lhs, mean, dcda);
122 return lhs;
123}
124
125template<typename T>
127 Uncertain<T> c(lhs);
128 c /= rhs;
129 return c;
130}
131
132template<typename T>
133Uncertain<T> operator/(const Uncertain<T>& lhs, double rhs) {
134 Uncertain<T> c(lhs);
135 c /= rhs;
136 return c;
137}
138
139template<typename T>
140Uncertain<T> operator/(double lhs, const Uncertain<T>& rhs) {
141 T mean = lhs / rhs.mean();
142 T dcda = -lhs / std::pow(rhs.mean(), 2.0);
143 return detail_::unary_result(rhs, mean, dcda);
144}
145
146template<typename T>
148 T mean = lhs.mean() / rhs.mean();
149 T dcda = 1.0 / rhs.mean();
150 T dcdb = -lhs.mean() / std::pow(rhs.mean(), 2.0);
151 detail_::inplace_binary(lhs, rhs, mean, dcda, dcdb);
152 return lhs;
153}
154
155template<typename T>
157 T mean = lhs.mean() / rhs;
158 T dcda = 1.0 / rhs;
159 detail_::inplace_unary(lhs, mean, dcda);
160 return lhs;
161}
162
163} // namespace sigma
Models an unceratin variable.
Definition uncertain.hpp:34
value_t mean() const
Get the mean value of the variable.
Definition uncertain.hpp:71
void inplace_binary(Uncertain< T > &c, const Uncertain< T > &b, T mean, T dcda, T dcdb)
Generalized Inplace Binary Changes.
Definition operation_common.hpp:61
void inplace_unary(Uncertain< T > &c, T mean, T dcda)
Generalized Inplace Unary Changes.
Definition operation_common.hpp:24
Uncertain< T > unary_result(const Uncertain< T > &a, T mean, T dcda)
Generalized Unary Changes.
Definition operation_common.hpp:43
The primary namespace for the sigma library.
Definition affine.hpp:12
Interval< T > operator/(Interval< T > lhs, T rhs)
Definition interval.hpp:779
Uncertain< T > & operator/=(Uncertain< T > &lhs, const Uncertain< T > &rhs)
Inplace Division Operation.
Definition arithmetic.ipp:147
Interval< T > operator-(Interval< T > lhs, T rhs)
Definition interval.hpp:720
Interval< T > operator*(Interval< T > lhs, T rhs)
Definition interval.hpp:748
Uncertain< T > & operator*=(Uncertain< T > &lhs, const Uncertain< T > &rhs)
Inplace Multiplication Operation.
Definition arithmetic.ipp:109
Interval< T > operator+(Interval< T > lhs, T rhs)
Definition interval.hpp:692
Uncertain< T > & operator-=(Uncertain< T > &lhs, const Uncertain< T > &rhs)
Inplace Subtraction Operation.
Definition arithmetic.ipp:73
Uncertain< T > & operator+=(Uncertain< T > &lhs, const Uncertain< T > &rhs)
Inplace Addition Operation.
Definition arithmetic.ipp:35
Common implementation details for operations.