sigma  0.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 return pow(abs(a), 2.0);
23}
24
25template<typename T>
27 return Uncertain<T>(std::ceil(a.mean()));
28}
29
30template<typename T>
32 return Uncertain<T>(std::floor(a.mean()));
33}
34
35template<typename T>
37 T mean = std::fmod(a.mean(), b.mean());
38 T dcda = 1.0;
39 T dcdb = -std::floor(a.mean() / b.mean());
40 return detail_::binary_result(a, b, mean, dcda, dcdb);
41}
42
43template<typename T>
44Uncertain<T> fmod(const Uncertain<T>& a, double b) {
45 T mean = std::fmod(a.mean(), b);
46 T dcda = 1.0;
47 return detail_::unary_result(a, mean, dcda);
48}
49
50template<typename T>
51Uncertain<T> fmod(double a, const Uncertain<T>& b) {
52 T mean = std::fmod(a, b.mean());
53 T dcda = -std::floor(a / b.mean());
54 return detail_::unary_result(b, mean, dcda);
55}
56
57template<typename T>
59 return copysign(a, b.mean());
60}
61
62template<typename T, typename U>
63Uncertain<T> copysign(const Uncertain<T>& a, const U& b) {
64 auto b_sign = std::copysign(1.0, b);
65 T mean = std::copysign(a.mean(), b);
66 T dcda = (a.mean() >= 0) ? b_sign : -b_sign;
67 return detail_::unary_result(a, mean, dcda);
68}
69
70template<typename T, typename U>
71U copysign(const U& a, const Uncertain<T>& b) {
72 return std::copysign(a, b.mean());
73}
74
75template<typename T>
77 return Uncertain<T>(std::trunc(a.mean()));
78}
79
80template<typename T>
82 return Uncertain<T>(std::round(a.mean()));
83}
84
85} // 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 > round(const Uncertain< T > &a)
Round to the nearest integar, away from zero in halfway case.
Definition basic.ipp:81
Uncertain< T > floor(const Uncertain< T > &a)
Nearest integer not greater than the given value.
Definition basic.ipp:31
Uncertain< T > abs2(const Uncertain< T > &a)
The Square of the Absolute Value.
Definition basic.ipp:21
Uncertain< T > ceil(const Uncertain< T > &a)
Nearest integer not less than the given value.
Definition basic.ipp:26
Uncertain< T > pow(const Uncertain< T > &a, const U &exp)
Exponentiation of a variable.
Definition exponents.ipp:9
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:58
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:76
Uncertain< T > fmod(const Uncertain< T > &a, const Uncertain< T > &b)
Floating point module.
Definition basic.ipp:36
Common implementation details for operations.