me gustaría asegurarme de que tengo una aplicación sólida para la igualdad, mayor que, menor que, menor que o igual a, y mayor o igual a.
Está utilizando la aritmética de punto flotante binario.
La aritmética binaria en coma flotante se diseñó para representar cantidades físicas como longitud, masa, carga, tiempo, etc.
Presumiblemente, entonces está utilizando una aritmética binaria en coma flotante como estaba destinado a ser utilizada: para hacer cálculos aritméticos en cantidades físicas.
Las mediciones de cantidades físicas siempre tienen una precisión particular, dependiendo de la precisión del dispositivo utilizado para medirlas.
Dado que usted es el que proporciona los valores de las cantidades que está manipulando, usted es el que sabe cuáles son las "barras de error" en esa cantidad. Por ejemplo, si proporciona la cantidad "la altura del edificio es de 123.56 metros", entonces sabe que esto es exacto al centímetro, pero no al micrómetro.
Por lo tanto, al comparar dos cantidades para igualdad, la semántica deseada es decir "¿son estas dos cantidades iguales dentro de las barras de error especificadas por cada medición?"
Así que ahora tenemos una respuesta a su pregunta. Lo que debe hacer es realizar un seguimiento de cuál es el error en cada cantidad; por ejemplo, la altura del edificio es "dentro de 0.01 de 123.56 metros" porque sabes que así es la precisión de la medición. Si luego obtiene otra medición que es 123.5587 y desea saber si las dos medidas son "iguales" dentro de las tolerancias de error, haga la resta y vea si cae en la tolerancia de error. En este caso, sí. Si las mediciones fueron de hecho precisas para el micrometre, entonces no son iguales.
En resumen: usted es la única persona que sabe lo tolerancias de error son sensibles, porque usted es la única persona que sabe dónde están las figuras está manipulando vinieron de en el primer lugar. Use la tolerancia de error que tenga sentido para sus mediciones dada la precisión del equipo que utilizó para producirla.
Microsoft dice 'Representa el valor doble positivo más pequeño que es mayor que cero. Consulte http://msdn.microsoft.com/en-us/library/system.double.epsilon%28v=vs.110%29.aspx. –
@Ian Eso es lo que 'Double.Epsilon' debería ser, pero david.pfx lo define tal como es :-( –
1.0 + double.Epsilon = 1.0 –