Java double epsilon
Je suis actuellement dans le besoin d'un epsilon de type double
(de préférence sont des constantes en java des bibliothèques, au lieu de propres implémentations/définitions)
Aussi loin que je peux voir Double
a MIN_VALUE
et MAX_VALUE
que des membres statiques.
Pourquoi il n'y a pas de EPSILON
?
Que serait un epsilon<double>
être?
Existe-il des différences d'un std::numeric_limits< double >::epsilon()
?
Epsilon: la différence entre La 1 et la plus petite valeur supérieure à 1, qui est représentable pour le type de données.
- qu'est-ce que epsilon?
- je suis vorting bas - poser des questions claires!
- Par souci d'équité, il est clair que si vous savez ce qu'est un epsilon (en.wikipedia.org/wiki/Machine_epsilon).
- puis oh wow... laisser les autres avoir une partie de votre connaissance profonde.... parce que epsilon est widly utilisé... pas seulement pour les erreurs et les marges d'erreur... ou d'angles et enegery-quantique-les montants....
- merci, aider accepté!
- Édité le Q. Désolé, personnellement, je ne connais pas d'autres useages d'un epsilon autres que les petites valeurs de l'erreur (et par conséquent, ne pensez pas à ce sujet..)
- hm, oui, j'étais peut-être un peu emotionaly hier, j'espère que je n'ai pas fait de mal à personne... merci pour la suppression de votre question!
Vous devez vous connecter pour publier un commentaire.
Je suis en supposant que vous dire epsilon dans le sens de l'erreur dans la valeur. I. e cette.
Si oui, alors en Java, il est appelé ULP (unité en dernier lieu). Vous pouvez le trouver à l'aide de la
java.lang.Math
paquet et leMath.ulp()
méthode. Voir la documentation javadoc ici.La valeur n'est pas stocké en tant que membre statique, car il sera différent selon le double qui vous intéresse.
EDIT: Par les OP de la définition de l'epsilon maintenant dans la question, l'ULP d'un double de la valeur 1.0 est 2.220446049250313 E-16 exprimé comme un double. (I. e. la valeur de retour de
Math.ulp(1.0)
.)Sans l'aide de paquet de Maths:
C'est 2^-52 (971 = 1023(double biais de l'exposant) - 52, maj par 52 est parce que la mantisse est stocké sur le premier de 52 bits).
C'est un peu plus rapide que les Mathématiques.ulp(1.0);
Aussi, si vous en avez besoin pour comparer les valeurs doubles, il y a vraiment un article utile: https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/
Par la modification de la question, en expliquant ce qu'est
EPSILON
, la question est maintenant clair, mais il pourrait être bon de signaler les éléments suivants:Je crois que la question initiale a été déclenchée par le fait qu'en C il y a une constante
DBL_EPSILON
, défini dans la norme en-tête de fichierfloat.h
, ce qui rend ce que la question se rapporte. Le même standard de fichier d'entête contient les définitions de constantesDBL_MIN
etDBL_MAX
, ce qui est clairement correspondent àDouble.MIN_VALUE
etDouble.MAX_VALUE
, respectivement, en Java. Par conséquent, il serait naturel de supposer que Java, par analogie, devrait également contenir une définition de quelque chose commeDouble.EPSILON
avec le même sens queDBL_EPSILON
dans C. Étrangement, cependant, il ne le fait pas. Encore plus étrange, C# ne contiennent une définitiondouble.EPSILON
, mais il a un sens différent, à savoir celui qui est couvert de C par la constanteDBL_MIN
et en Java parDouble.MIN_VALUE
. Certainement une situation qui peut conduire à une certaine confusion, car il rend le termeEPSILON
ambigu.double: Le double type de données est un double précision 64 bits IEEE 754 en virgule flottante. Sa gamme de valeurs est au-delà de la portée de cette discussion, mais il est spécifié dans les Types à virgule Flottante, les Formats et les Valeurs de la section de la Java Langage de Spécification. Pour les valeurs décimales, ce type de données est généralement le choix par défaut. Comme mentionné ci-dessus, ce type de données ne doit jamais être utilisé pour obtenir des valeurs précises, telles que la devise.
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
regardant la norme IEEE 754, vous trouverez la précision de epsion...
http://en.wikipedia.org/wiki/IEEE_floating_point
binary64: