Je compare des flotteurs en Java en ce moment et la formule la plus simple est:
Math.abs(a - b) < THRESHOLD
Lorsque vous nommez votre variable pour le seuil de différence, devez-vous la nommer delta ou epsilon ? Plus précisément, lequel des deux est le terme correct pour la plus petite valeur qu'un nombre à virgule flottante peut représenter?
Le terme langage de programmation est-il spécifique ou est-il universel d'un langage à l'autre?
Réponses:
Epsilon en mathématiques et en génie
En mathématiques et en génie en général:
et epsilon semble plus approprié dans votre cas.
Epsilon en informatique
En informatique en particulier, le terme epsilon désigne également la machine espilon qui mesure la différence entre
1.0f
et le plus petit flotteur strictement supérieur à1.0f
. Ce dernier nombre est1.00000011920928955078125f
pour les flottants en Java et peut être calculé avec:La définition de epsilon machine est cohérente avec l'utilisation générale d'epsilon décrite ci-dessus.
Comparaison des flotteurs
Notez cependant qu'avant de comparer les flotteurs pour la "proximité", vous devez avoir une idée de leur échelle. Deux flotteurs très grands et supposés très différents peuvent être égaux:
Et inversement, il pourrait y avoir de nombreuses valeurs de flotteur possibles (et plusieurs ordres de grandeur) entre deux petits flotteurs qui diffèrent par la machine epsilon "uniquement". Dans l'exemple ci-dessous, il y a 10 000 000 de valeurs flottantes disponibles entre
small
etf
, mais leur différence est toujours bien en dessous de la machine epsilon:L'article lié dans la réponse de GlenH7 étudie davantage la comparaison des flotteurs et propose plusieurs solutions pour surmonter ces problèmes.
la source
En mathématiques, delta est utilisé pour représenter une certaine différence par rapport à une valeur, epsilon est utilisé pour représenter une valeur d'erreur arbitraire. Dans ce cas, epsilon serait le nom conventionnel.
la source
Pour répondre directement à votre question, vous souhaitez utiliser le terme
epsilon
. Plus précisément, ce n'estmachine epsilon
que l'usage courant qui laisse tomber la "machine" et n'utilise queepsilon
.En regardant dans ma copie locale de
float.h
je vois: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à:
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.
la source
simplest formula
pour la comparaison. Beaucoup utilisent cette approche comme première tentative, et j'ai inclus l'article de Dawson parce qu'il va vraiment dans les nuances de la complexité de la comparaison. J'ai donc essayé de répondre directement à la question, puis de montrer pourquoi ne pas l'utiliser de cette façon.Il s'agit d'une fonction d'erreur; l'erreur absolue est généralement appelée ε (epsilon) ou Δ x pour une certaine quantité x:
L'erreur relative est parfois appelée η (eta):
À des fins de programmation,
absoluteError
etrelativeError
(ou certaines de leurs abréviations) sont plus descriptifs. Si vous voulez affirmer que l'erreur est inférieure à une certaine valeur, cette valeur sera simplement appelée seuil ou tolérance .Voir:
Erreur absolue chez Wolfram MathWorld
Erreur d'approximation sur Wikipédia
la source
Je l'appellerais "tolérance".
Ce n'est peut-être pas le terme mathématiquement correct, mais le simple fait que vous posiez la question m'implique que ni "delta" ni "epsilon" ne seraient un bon nom de variable à utiliser.
D'après mon expérience, il est préférable d'utiliser des noms d'identifiants qui ont du sens pour ceux qui liront réellement le code. À quoi sert un nom parfaitement correct s'il signifie que le lecteur doit le rechercher sur Wikipedia pour comprendre ce qu'il signifie?
la source