GemaCoreLib
The GeMA Core library
Loading...
Searching...
No Matches
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
57namespace GmDoubleCmp
58{
59
61#define GM_DOUBLECMP_RELTOL (1.0e-8)
62
64#define GM_DOUBLECMP_ABSTOL (1.0E-12)
65
71inline 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
93inline bool isZero(double a, double absTol)
94{
95 return fabs(a) < absTol;
96}
97
103inline 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
113inline 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
123inline 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
133inline 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
143inline 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
#define GM_DOUBLECMP_RELTOL
Tolerância relativa entre valores = 0.000001%.
Definition gmDoubleCmp.h:61
Agrupa rotinas para comparação de valores double.
Definition gmDoubleCmp.h:58
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 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 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
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 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
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
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