sigma  0.0.0
Loading...
Searching...
No Matches
exponents.ipp
1#pragma once
2
4#include <cmath>
5
6namespace sigma {
7
8template<typename T, typename U>
9Uncertain<T> pow(const Uncertain<T>& a, const U& exp) {
10 T mean = std::pow(a.mean(), exp);
11 T dcda = exp * std::pow(a.mean(), exp - 1);
12 return detail_::unary_result(a, mean, dcda);
13}
14
15template<typename T>
17 T mean = std::pow(a.mean(), exp.mean());
18 T dcda = exp.mean() * std::pow(a.mean(), exp.mean() - 1);
19 T dcdb = std::log(a.mean()) * std::pow(a.mean(), exp.mean());
20 return detail_::binary_result(a, exp, mean, dcda, dcdb);
21}
22
23template<typename T>
25 T mean = std::sqrt(a.mean());
26 T dcda = 1.0 / (2.0 * std::sqrt(a.mean()));
27 return detail_::unary_result(a, mean, dcda);
28}
29
30template<typename T>
32 T mean = std::cbrt(a.mean());
33 T dcda = 1.0 / (3.0 * std::cbrt(std::pow(a.mean(), 2.0)));
34 return detail_::unary_result(a, mean, dcda);
35}
36
37template<typename T>
39 T mean = std::exp(a.mean());
40 T dcda = std::exp(a.mean());
41 return detail_::unary_result(a, mean, dcda);
42}
43
44template<typename T>
46 T mean = std::exp2(a.mean());
47 T dcda = mean * std::log(2.0);
48 return detail_::unary_result(a, mean, dcda);
49}
50
51template<typename T>
53 T mean = std::expm1(a.mean());
54 T dcda = std::exp(a.mean());
55 return detail_::unary_result(a, mean, dcda);
56}
57
58template<typename T>
60 T mean = std::log(a.mean());
61 T dcda = 1.0 / a.mean();
62 return detail_::unary_result(a, mean, dcda);
63}
64
65template<typename T>
67 T mean = std::log10(a.mean());
68 T dcda = 1.0 / (a.mean() * std::log(10.0));
69 return detail_::unary_result(a, mean, dcda);
70}
71
72template<typename T>
74 T mean = std::log2(a.mean());
75 T dcda = 1.0 / (a.mean() * std::log(2.0));
76 return detail_::unary_result(a, mean, dcda);
77}
78
79template<typename T>
81 T mean = std::log1p(a.mean());
82 T dcda = 1.0 / (a.mean() + 1.0);
83 return detail_::unary_result(a, mean, dcda);
84}
85
86template<typename T>
88 T mean = std::hypot(a.mean(), b.mean());
89 T dcda = a.mean() / std::hypot(a.mean(), b.mean());
90 T dcdb = b.mean() / std::hypot(a.mean(), b.mean());
91 return detail_::binary_result(a, b, mean, dcda, dcdb);
92}
93
94template<typename T, typename U>
95Uncertain<T> hypot(const Uncertain<T>& a, const U& b) {
96 T mean = std::hypot(a.mean(), b);
97 T dcda = a.mean() / std::hypot(a.mean(), b);
98 return detail_::unary_result(a, mean, dcda);
99}
100
101template<typename T, typename U>
102Uncertain<T> hypot(const U& a, const Uncertain<T>& b) {
103 return hypot(b, a);
104}
105
106} // 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
Uncertain< T > unary_result(const Uncertain< T > &a, T mean, T dcda)
Generalized Unary Changes.
Definition operation_common.hpp:44
Uncertain< T > binary_result(const Uncertain< T > &a, const Uncertain< T > &b, T mean, T dcda, T dcdb)
Generalized Binary Changes.
Definition operation_common.hpp:85
The primary namespace for the sigma library.
Definition operation_common.hpp:10
Uncertain< T > sqrt(const Uncertain< T > &a)
Calculate the square root of an uncertain variable.
Definition exponents.ipp:24
Uncertain< T > hypot(const Uncertain< T > &a, const Uncertain< T > &b)
Calculate the square root of the sum of squared arguments.
Definition exponents.ipp:87
Uncertain< T > log(const Uncertain< T > &a)
Calculate the natural logarithm of a variable.
Definition exponents.ipp:59
Uncertain< T > expm1(const Uncertain< T > &a)
Calculate the Euler's number raised to the power of an uncertain variable, then subtract 1.
Definition exponents.ipp:52
Uncertain< T > log1p(const Uncertain< T > &a)
Calculate the natural logarithm of one plus a variable.
Definition exponents.ipp:80
Uncertain< T > log2(const Uncertain< T > &a)
Calculate the base 2 logarithm of a variable.
Definition exponents.ipp:73
Uncertain< T > exp2(const Uncertain< T > &a)
Calculate 2 raised to the power of an uncertain variable.
Definition exponents.ipp:45
Uncertain< T > log10(const Uncertain< T > &a)
Calculate the base 10 logarithm of a variable.
Definition exponents.ipp:66
Uncertain< T > pow(const Uncertain< T > &a, const U &exp)
Exponentiation of a variable.
Definition exponents.ipp:9
Uncertain< T > cbrt(const Uncertain< T > &a)
Calculate the cube root of an uncertain variable.
Definition exponents.ipp:31
Uncertain< T > exp(const Uncertain< T > &a)
Calculate the Euler's number raised to the power of an uncertain variable.
Definition exponents.ipp:38
Common implementation details for operations.