66 const double default_abs_epsilon = 1e-8;
67 const double default_rel_epsilon = 1e-5;
70 bool scalar_equal(T value1, T value2, T abs_eps , T rel_eps) {
71 static_assert(std::is_floating_point<T>::value,
"Function scalar_equal() A can only be instantiated with floating point types");
74 T diff = std::fabs(value1 - value2);
76 T scale = std::max(std::fabs(value1), std::fabs(value2));
78 if (diff > scale * rel_eps) {
87 bool scalar_equal(T value1, T value2) {
88 return scalar_equal<T>( value1 , value2 , default_abs_epsilon , default_rel_epsilon );
92 bool vector_equal(
const std::vector<T>& v1,
const std::vector<T>& v2, T abs_eps, T rel_eps) {
93 if (v1.size() != v2.size()) {
97 for (
size_t i = 0; i < v1.size(); i++) {
98 if (!scalar_equal<T>( v1[i], v2[i], abs_eps, rel_eps ))
106 bool vector_equal(
const std::vector<T>& v1,
const std::vector<T>& v2) {
107 return vector_equal<T>(v1, v2, default_abs_epsilon, default_rel_epsilon);
112 bool array_equal(
const T* p1,
const T* p2,
size_t num_elements, T abs_eps, T rel_eps) {
113 if (std::memcmp(p1 , p2 , num_elements *
sizeof * p1) == 0)
117 for (index = 0; index < num_elements; index++) {
118 if (!scalar_equal<T>( p1[index] , p2[index] , abs_eps , rel_eps)) {
128 bool array_equal(
const T* p1,
const T* p2,
size_t num_elements) {
129 return array_equal<T>(p1, p2, num_elements , default_abs_epsilon, default_rel_epsilon);
This class implements a small container which holds the transmissibility mulitpliers for all the face...
Definition Exceptions.hpp:30