Ce n'EPS signifie en C?
J'ai l'extrait de code suivant:
if (ABS(p43.x) < EPS && ABS(p43.y) < EPS && ABS(p43.z) < EPS) return(FALSE);
Qui je suis en train de convertir en C#. Ce n' "EPS"?
Ce code est à partir de http://local.wasp.uwa.edu.au/~pbourke/géométrie/lineline3d/
J'ai du mal à résoudre un problème avec des racines carrées, et j'ai besoin d'utiliser EPS. Mais je ne peux pas trouver la macro. Je suis currenty l'utilisation de cygwin sous Windows 7 x64, la compilation avec gcc et g++. Quelle lib dois-je inclure dans mon projet?
OriginalL'auteur John | 2009-03-09
Vous devez vous connecter pour publier un commentaire.
Ça va être une certaine forme de epsilon à déterminer si le nombre est "assez petit pour être insignifiant". La valeur exacte semble être
#define
d quelque part dans ce cas.OriginalL'auteur Jon Skeet
EPS est epsilon. Le "proche-assez" facteur.
La question est "est la valeur absolue assez proche?" Où "assez proche" est un petit nombre, souvent quelque chose comme
1.0E-3
.En fonction de la façon dont l'algorithme converge sur la réponse, la performance peut dépendre de la taille de l'EPS. Soyez prudent de faire des EPS trop petit, parce que votre processus pourrait fonctionner pendant des heures (voire des siècles) et de ne pas produire un vraiment utilisable réponse.
Dans ce cas -- là où il n'y a pas de boucle -- le BPA est utilisé parce que les nombres à virgule flottante accumuler de petites erreurs lors de la multiplication. Vous ne pouvez pas simplement dire
Et il est être vrai en général. Donc, au lieu de cela, nous disons toujours
OriginalL'auteur S.Lott
Je dirais Jon Skeet est correct. En regardant le code lisp sur cette page, vous trouverez une référence dans les calculs appelé "nearzero", qui est défini comme tel:
Donc à partir de cela, je dirais que l'EPS est une constante définie à 0,00001.
OriginalL'auteur Arnold Spence
Epsilon..., Il sera probablement un #define...
Epsilon est généralement utilisé pour désigner un nombre très proche de zéro dans les limites de float ou double précision.
Il est utilisé pour déterminer si la valeur de la p43.x est assez proche de zéro pour être compté comme nul.
Et... Ce n'est pas dans le code de l'échantillon.
OriginalL'auteur Andrew Rollings
Je dirai que le BPA est pour Epsilon:
En vous exemple, il est utilisé pour déterminer si le résultat de (ABS(p43.x) est assez petit (proche de zéro).
OriginalL'auteur Julien Hoarau
Le plus probable,
p43
est une structure qui détient des valeurs à virgule flottante. Comme des valeurs à virgule flottante ont une précision limitée, ils ne peuvent représenter un sous-ensemble des nombres réels, ce qui signifie qu'il est souvent nécessaire de vérifier l'égalité, avec une marge pour les erreurs d'arrondi.Au lieu de vérifier
x = 0
, le code vérifie|x| < EPS
, c'est à dire toutes les valeurs dans]-EPS, +EPS[
sont considérés comme suffisamment petit pour être0
.Vous pouvez également envisager de faire des lectures sur le machine epsilon.
OriginalL'auteur Christoph
En C et C++ vous avez le préprocesseur constantes FLT_EPSILON et DBL_EPSILON qui sont le plus petit nombre tel que 1 + {FLT,DBL}_EPSILON > 1 pour les float et double précision, respectivement. Ce EPS semble être similaire de l'application spécifique "proche de zéro" de la valeur.
OriginalL'auteur janneb