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