GemaCoreLib
The GeMA Core library
gmDoubleCmp.h
Go to the documentation of this file.
1 /************************************************************************
2 **
3 ** Copyright (C) 2014 by Carlos Augusto Teixera Mendes
4 ** All rights reserved.
5 **
6 ** This file is part of the "GeMA" software. It's use should respect
7 ** the terms in the license agreement that can be found together
8 ** with this source code.
9 ** It is provided AS IS, with NO WARRANTY OF ANY KIND,
10 ** INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR
11 ** A PARTICULAR PURPOSE.
12 **
13 ************************************************************************/
14 
24 #ifndef _UTILS_DOUBLE_CMP_
25 #define _UTILS_DOUBLE_CMP_
26 
27 #include <math.h>
28 
29 
57 namespace GmDoubleCmp
58 {
59 
61 #define GM_DOUBLECMP_RELTOL (1.0e-8)
62 
64 #define GM_DOUBLECMP_ABSTOL (1.0E-12)
65 
71 inline bool equal(double a, double b, double relTol=GM_DOUBLECMP_RELTOL, double absTol=GM_DOUBLECMP_ABSTOL)
72 {
73  // Trata valores muito próximos de zero
74  double diff = fabs(a-b);
75  if(diff < absTol)
76  return true;
77 
78  a = fabs(a);
79  b = fabs(b);
80  return diff <= relTol * (a > b ? a : b);
81 }
82 
93 inline bool isZero(double a, double absTol)
94 {
95  return fabs(a) < absTol;
96 }
97 
103 inline bool nequal(double a, double b, double relTol=GM_DOUBLECMP_RELTOL, double absTol=GM_DOUBLECMP_ABSTOL)
104 {
105  return !equal(a, b, relTol, absTol);
106 }
107 
113 inline bool lt(double a, double b, double relTol=GM_DOUBLECMP_RELTOL, double absTol=GM_DOUBLECMP_ABSTOL)
114 {
115  return (a < b) && !equal(a, b, relTol, absTol);
116 }
117 
123 inline bool lte(double a, double b, double relTol=GM_DOUBLECMP_RELTOL, double absTol=GM_DOUBLECMP_ABSTOL)
124 {
125  return (a < b) || equal(a, b, relTol, absTol);
126 }
127 
133 inline bool gt(double a, double b, double relTol=GM_DOUBLECMP_RELTOL, double absTol=GM_DOUBLECMP_ABSTOL)
134 {
135  return (a > b) && !equal(a, b, relTol, absTol);
136 }
137 
143 inline bool gte(double a, double b, double relTol=GM_DOUBLECMP_RELTOL, double absTol=GM_DOUBLECMP_ABSTOL)
144 {
145  return (a > b) || equal(a, b, relTol, absTol);
146 }
147 
148 }
149 
150 #endif
151 
#define GM_DOUBLECMP_ABSTOL
Tolerância absoluta entre valores para comparar valores próximos de zero.
Definition: gmDoubleCmp.h:64
bool gte(double a, double b, double relTol=GM_DOUBLECMP_RELTOL, double absTol=GM_DOUBLECMP_ABSTOL)
Funcao para comparar se um número real é maior ou igual a outro, usando uma tolerância recebida como ...
Definition: gmDoubleCmp.h:143
bool equal(double a, double b, double relTol=GM_DOUBLECMP_RELTOL, double absTol=GM_DOUBLECMP_ABSTOL)
Funcao para comparar se dois números reais são iguais usando uma tolerância recebida como parâmetro.
Definition: gmDoubleCmp.h:71
bool lte(double a, double b, double relTol=GM_DOUBLECMP_RELTOL, double absTol=GM_DOUBLECMP_ABSTOL)
Funcao para comparar se um número real é menor ou igual a outro, usando uma tolerância recebida como ...
Definition: gmDoubleCmp.h:123
bool gt(double a, double b, double relTol=GM_DOUBLECMP_RELTOL, double absTol=GM_DOUBLECMP_ABSTOL)
Funcao para comparar se um número real é maior que o outro, usando uma tolerância recebida como parâm...
Definition: gmDoubleCmp.h:133
bool nequal(double a, double b, double relTol=GM_DOUBLECMP_RELTOL, double absTol=GM_DOUBLECMP_ABSTOL)
Funcao para comparar se dois números reais são diferentes usando uma tolerância recebida como parâmet...
Definition: gmDoubleCmp.h:103
#define GM_DOUBLECMP_RELTOL
Tolerância relativa entre valores = 0.000001%.
Definition: gmDoubleCmp.h:61
bool isZero(double a, double absTol)
Funcao para comparar se o valor a é ou não igual a zero dada uma tolerância absoluta.
Definition: gmDoubleCmp.h:93
Agrupa rotinas para comparação de valores double.
Definition: gmDoubleCmp.h:57
bool lt(double a, double b, double relTol=GM_DOUBLECMP_RELTOL, double absTol=GM_DOUBLECMP_ABSTOL)
Funcao para comparar se um número real é menor que o outro, usando uma tolerância recebida como parâm...
Definition: gmDoubleCmp.h:113