sigma  1.0.0
Loading...
Searching...
No Matches
basic.ipp
1#pragma once
2
4#include <cmath>
5
6namespace sigma {
7
8template<typename T>
10 T mean = std::abs(a.mean());
11 T dcda = (a.mean() >= 0) ? 1.0 : -1.0;
12 return detail_::unary_result(a, mean, dcda);
13}
14
15template<typename T>
17 return abs(a);
18}
19
20template<typename T>
22 auto result = boost::numeric::abs(
23 boost::numeric::interval<T>(a.lower(), a.upper()));
24 return Interval<T>(result.lower(), result.upper());
25}
26
27template<typename T>
29 return abs(a);
30}
31
32template<typename T>
34 return pow(abs(a), 2.0);
35}
36
37template<typename T>
39 return Uncertain<T>(std::ceil(a.mean()));
40}
41
42template<typename T>
44 return Uncertain<T>(std::floor(a.mean()));
45}
46
47template<typename T>
49 T mean = std::fmod(a.mean(), b.mean());
50 T dcda = 1.0;
51 T dcdb = -std::floor(a.mean() / b.mean());
52 return detail_::binary_result(a, b, mean, dcda, dcdb);
53}
54
55template<typename T>
56Uncertain<T> fmod(const Uncertain<T>& a, double b) {
57 T mean = std::fmod(a.mean(), b);
58 T dcda = 1.0;
59 return detail_::unary_result(a, mean, dcda);
60}
61
62template<typename T>
63Uncertain<T> fmod(double a, const Uncertain<T>& b) {
64 T mean = std::fmod(a, b.mean());
65 T dcda = -std::floor(a / b.mean());
66 return detail_::unary_result(b, mean, dcda);
67}
68
69template<typename T>
71 return copysign(a, b.mean());
72}
73
74template<typename T, typename U>
75Uncertain<T> copysign(const Uncertain<T>& a, const U& b) {
76 auto b_sign = std::copysign(1.0, b);
77 T mean = std::copysign(a.mean(), b);
78 T dcda = (a.mean() >= 0) ? b_sign : -b_sign;
79 return detail_::unary_result(a, mean, dcda);
80}
81
82template<typename T, typename U>
83U copysign(const U& a, const Uncertain<T>& b) {
84 return std::copysign(a, b.mean());
85}
86
87template<typename T>
89 return Uncertain<T>(std::trunc(a.mean()));
90}
91
92template<typename T>
94 return Uncertain<T>(std::round(a.mean()));
95}
96
97} // 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
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 > round(const Uncertain< T > &a)
Round to the nearest integar, away from zero in halfway case.
Definition basic.ipp:93
Uncertain< T > floor(const Uncertain< T > &a)
Nearest integer not greater than the given value.
Definition basic.ipp:43
Uncertain< T > abs2(const Uncertain< T > &a)
The Square of the Absolute Value.
Definition basic.ipp:33
Uncertain< T > ceil(const Uncertain< T > &a)
Nearest integer not less than the given value.
Definition basic.ipp:38
Uncertain< T > pow(const Uncertain< T > &a, const U &exp)
Exponentiation of a variable.
Definition exponents.ipp:10
Uncertain< T > fabs(const Uncertain< T > &a)
Absolute Value.
Definition basic.ipp:16
Uncertain< T > copysign(const Uncertain< T > &a, const Uncertain< T > &b)
Copy the sign of one value to another.
Definition basic.ipp:70
Uncertain< T > abs(const Uncertain< T > &a)
Absolute Value.
Definition basic.ipp:9
Uncertain< T > trunc(const Uncertain< T > &a)
Remove the fractional part from a variable.
Definition basic.ipp:88
Uncertain< T > fmod(const Uncertain< T > &a, const Uncertain< T > &b)
Floating point module.
Definition basic.ipp:48
Common implementation details for operations.