Per rispondere direttamente alla tua domanda, si desidera utilizzare il termine epsilon
. Più precisamente, è machine epsilon
, ma l'utilizzo comune elimina "macchina" e utilizza solo epsilon
.
Guardando nella mia copia locale di float.h
vedo:
#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 i commenti associati chiariscono che epsilon è il termine a cui ti stai riferendo.
Ma possiamo anche fare affidamento su altri riferimenti esterni per verificare che epsilon
sia il termine corretto. Vedi qui , qui , qui , e infine questa combinazione di tag di query SO . Non sono riuscito a trovare un riferimento diretto allo standard IEEE 754 per citare.
Non l'hai chiesto, ma ho trovato questo riferimento molto pertinente all'esempio che hai fornito per chiarire la tua domanda.
Dai un'occhiata a questo articolo del blog di Bruce Dawson di Valve sul confronto dei valori in virgola mobile per alcune informazioni sul motivo per cui non desideri utilizzare il confronto suggerito.
C'è un bel po 'di informazioni in questo articolo, ma questo è lo snipppet più pertinente da lì:
If comparing floats for equality is a bad idea then how about checking whether their difference is within some error bounds or epsilon value, like this:
bool isEqual = fabs(f1 – f2) <= epsilon;
With this calculation we can express the concept of two floats being close enough that we want to consider them to be equal. But what value should we use for epsilon?
Given our experimentation above we might be tempted to use the error in our sum, which was about 1.19e-7f. In fact, there’s even a define in float.h with that exact value, and it’s called FLT_EPSILON.
Clearly that’s it. The header file gods have spoken and FLT_EPSILON is the one true epsilon!
Except that that is rubbish. For numbers between 1.0 and 2.0 FLT_EPSILON represents the difference between adjacent floats. For numbers smaller than 1.0 an epsilon of FLT_EPSILON quickly becomes too large, and with small enough numbers FLT_EPSILON may be bigger than the numbers you are comparing!
Dawson ripercorre parecchie altre considerazioni sulle complessità coinvolte nel confrontare i float e nel trattare valori molto piccoli come questo, quindi incoraggerei la tua lettura del resto del suo post.