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