Para responder diretamente sua pergunta, você quer usar o termo epsilon
. Mais precisamente, é machine epsilon
mas o uso comum descarta "máquina" e apenas usa epsilon
.
Olhando em minha cópia local, float.h
vejo:
#define DBL_EPSILON 2.2204460492503131e-016 /* smallest such that 1.0+DBL_EPSILON != 1.0 */
#define FLT_EPSILON 1.192092896e-07F /* smallest such that 1.0+FLT_EPSILON != 1.0 */
#define LDBL_EPSILON DBL_EPSILON /* smallest such that 1.0+LDBL_EPSILON != 1.0 */
E os comentários associados deixam claro que épsilon é o termo a que você está se referindo.
Mas também podemos confiar em outras referências externas para verificar se esse epsilon
é o termo correto. Veja aqui , aqui , aqui e, finalmente, essa combinação de tags de consulta SO . Não consegui encontrar uma referência direta ao padrão IEEE 754 para citar.
Você não perguntou, mas achei esta referência muito relevante para o exemplo que você forneceu para esclarecer sua pergunta.
Dê uma olhada neste artigo de blog de Bruce Dawson, da Valve, sobre a comparação de valores de ponto flutuante para obter algumas dicas sobre por que você não deseja usar a comparação sugerida.
Há bastante informação nesse artigo, mas este é o snipppet mais relevante de lá:
Se comparar floats por igualdade é uma péssima idéia, que tal verificar se a diferença está dentro de alguns limites de erro ou no valor epsilon, assim:
bool isEqual = fabs(f1 – f2) <= epsilon;
Com esse cálculo, podemos expressar o conceito de dois carros alegóricos estando próximos o suficiente para que possamos considerá-los iguais. Mas que valor devemos usar para o epsilon?
Dada a nossa experimentação acima, podemos ficar tentados a usar o erro em nossa soma, que era de 1,19e-7f. De fato, existe até uma definição em float.h com esse valor exato, e é chamada FLT_EPSILON.
Claramente é isso. Os deuses do arquivo de cabeçalho falaram e FLT_EPSILON é o único epsilon de verdade!
Exceto que isso é lixo. Para números entre 1,0 e 2,0, FLT_EPSILON representa a diferença entre flutuadores adjacentes. Para números menores que 1,0, um epsilon de FLT_EPSILON rapidamente se torna muito grande e, com números pequenos o suficiente, FLT_EPSILON pode ser maior que os números que você está comparando!
Dawson aborda várias outras considerações sobre os meandros envolvidos na comparação de carros alegóricos e no tratamento de valores muito pequenos como esse, portanto, incentivaria sua leitura no restante do post.