Pour répondre directement à votre question, vous souhaitez utiliser le terme epsilon
. Plus précisément, ce n'est machine epsilon
que l'usage courant qui laisse tomber la "machine" et n'utilise que epsilon
.
En regardant dans ma copie locale de float.h
je vois:
#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 */
Et les commentaires associés montrent clairement que epsilon est le terme auquel vous faites référence.
Mais nous pouvons également nous fier à d'autres références externes pour vérifier qu'il epsilon
s'agit du terme correct. Voir ici , ici , ici , et enfin cette combinaison de balises de requête SO . Je n'ai pas pu trouver une référence directe à la norme IEEE 754 pour citer.
Vous ne l'avez pas demandé, mais j'ai trouvé cette référence très pertinente par rapport à l'exemple que vous avez fourni pour clarifier votre question.
Jetez un œil à cet article de blog de Bruce Dawson de Valve sur la comparaison des valeurs à virgule flottante pour savoir pourquoi vous ne souhaitez pas utiliser la comparaison que vous avez suggérée.
Il y a beaucoup d'informations dans cet article, mais c'est l'extrait de code le plus pertinent à partir de là:
Si la comparaison des flottants pour l'égalité est une mauvaise idée, pourquoi ne pas vérifier si leur différence se situe dans certaines limites d'erreur ou dans la valeur epsilon, comme ceci:
bool isEqual = fabs(f1 – f2) <= epsilon;
Avec ce calcul, nous pouvons exprimer le concept de deux flotteurs suffisamment proches pour que nous voulons les considérer comme égaux. Mais quelle valeur devons-nous utiliser pour epsilon?
Compte tenu de notre expérimentation ci-dessus, nous pourrions être tentés d'utiliser l'erreur dans notre somme, qui était d'environ 1,19e-7f. En fait, il y a même une définition dans float.h avec cette valeur exacte, et elle s'appelle FLT_EPSILON.
De toute évidence, c'est tout. Les dieux du fichier d'en-tête ont parlé et FLT_EPSILON est le seul vrai epsilon!
Sauf que ce sont des ordures. Pour les nombres entre 1,0 et 2,0, FLT_EPSILON représente la différence entre les flottants adjacents. Pour les nombres inférieurs à 1,0, un epsilon de FLT_EPSILON devient rapidement trop grand, et avec des nombres suffisamment petits, FLT_EPSILON peut être plus grand que les nombres que vous comparez!
Dawson passe en revue plusieurs autres considérations sur les subtilités impliquées lors de la comparaison des flottants et du traitement de très petites valeurs comme celle-ci, donc je vous encourage à lire le reste de son article.