Obtengo este fragmento de código de algún otro lugar. Según el webmaster, el código se escoge de The art of computer programming by KnuthDiferencia entre aproximadamente igual y esencialmente igual en El arte de la programación de computadoras
Como no tengo una copia de ese libro, ¿puedo saber cuál es la diferencia entre las dos funciones?
bool approximatelyEqual(float a, float b, float epsilon)
{
return fabs(a - b) <= ((fabs(a) < fabs(b) ? fabs(b) : fabs(a)) * epsilon);
}
bool essentiallyEqual(float a, float b, float epsilon)
{
return fabs(a - b) <= ((fabs(a) > fabs(b) ? fabs(b) : fabs(a)) * epsilon);
}
¿Puedo decir que esencialmenteEqual siempre necesitará un valor "más cercano" que aproximadamente igual? –
Sí, los valores de 'esencialmente Equal' siempre estarán más cerca que los valores de 'approximatelyEqual'. – palswim
Piense en las ofertas en su tienda habitual y qué porcentajes significan allí. ¿Qué es más valioso 33% de descuento en el precio o 33% de producto adicional gratis? La solución es que debe preferir el 33% de descuento, ya que es equivalente a una oferta de producto adicional del 50%. Lo mismo ocurre aquí, dependiendo de si toma el épsilon alrededor del mayor o menor de los dos valores, el resultado será diferente. 66.6 es aproximadamente igual a 100 con un épsilon de 33%, pero solo es esencialmente igual a un épsilon de 50%. –