CEPS  24.01
Cardiac ElectroPhysiology Simulator
Precision.hpp
Go to the documentation of this file.
1 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2  This file is part of CEPS.
3 
4  CEPS is free software: you can redistribute it and/or modify
5  it under the terms of the GNU General Public License as published by
6  the Free Software Foundation, either version 3 of the License, or
7  (at your option) any later version.
8 
9  CEPS is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  GNU General Public License for more details.
13 
14  You should have received a copy of the GNU General Public License
15  along with CEPS (see file LICENSE at root of project).
16  If not, see <https://www.gnu.org/licenses/>.
17 
18 
19  Copyright 2019-2024 Inria, Universite de Bordeaux
20 
21  Authors, in alphabetical order:
22 
23  Pierre-Elliott BECUE, Florian CARO, Yves COUDIERE(*), Andjela DAVIDOVIC,
24  Charlie DOUANLA-LONTSI, Marc FUENTES, Mehdi JUHOOR, Michael LEGUEBE(*),
25  Pauline MIGERDITICHAN, Valentin PANNETIER(*), Nejib ZEMZEMI.
26  * : currently active authors
27 
28 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
31 #pragma once
32 
33 #include <cmath>
34 #include <limits>
35 
37 
38 namespace ceps
39 {
40 
53  inline CepsBool
54  equals(CepsReal a, CepsReal b, CepsReal error = 1.0)
55  {
56  return (std::fabs(a-b)<=std::abs(std::min(a,b))*std::numeric_limits<CepsReal>::epsilon()*error);
57  }
58 
66  inline CepsBool
68  {
69  return (std::fabs(a-b)<epsilon);
70  }
71 
81  inline CepsBool
83  {
84  CepsBool res = true;
85  for (CepsUInt i=0U; i<n; i++)
86  res = res and (std::fabs(a[i]-b[i])>=epsilon);
87  return res;
88  }
89 
97  inline CepsBool
99  {
100  return ((a-b) > ((std::fabs(a)<std::fabs(b)) ? std::fabs(b) : std::fabs(a))*epsilon);
101  }
102 
110  inline CepsBool
112  {
113  return ((b-a) >((std::fabs(a) < std::fabs(b)) ? std::fabs(b) : std::fabs(a))*epsilon);
114  }
115 
116 }
bool CepsBool
Booleans.
Definition: CepsTypes.hpp:124
std::make_unsigned_t< CepsInt > CepsUInt
Unsigned version on CepsInt.
Definition: CepsTypes.hpp:109
float CepsReal
Need single precision floating point.
Definition: CepsTypes.hpp:100
#define FLOATING_POINT_EPSILON
Definition: CepsTypes.hpp:117
A namespace for all utility methods.
CepsBool approxEquals(CepsReal a, CepsReal b, CepsReal epsilon)
Approximate equality with epsilon tolerance.
Definition: Precision.hpp:67
const _Type & min(const CepsVector< _Type, _Alloc > &vec)
Returns the minimum of the vector, const version.
Definition: CepsVector.hpp:448
CepsBool greaterThan(CepsReal a, CepsReal b, CepsReal epsilon=FLOATING_POINT_EPSILON)
Greater than comparison with epsilon tolerance.
Definition: Precision.hpp:98
CepsBool lesserThan(CepsReal a, CepsReal b, CepsReal epsilon=FLOATING_POINT_EPSILON)
Lesser than comparison with epsilon tolerance.
Definition: Precision.hpp:111
CepsBool equals(CepsReal a, CepsReal b, CepsReal error=1.0)
CepsReal equality up to machine precision.
Definition: Precision.hpp:54