¿Hay en el STL o en Boost un conjunto de funciones simples de comparación genéricas?Comparación de punto flotante en STL, BOOST
El que encontré siempre requieren parámetros de plantilla y/o instanciación de una plantilla de estructura .
estoy buscando algo con una sintaxis como:
if (is_equal(x,y))
{
...
}
que podría ser implementado como:
template <typename T>
bool is_equal(const T& x, const T& y)
{
return (fabs(x - y) < Precision<T>::eps);
}
EDIT: He cambiado el operador de igualdad. (Ver comentarios abajo)
¿Por qué usaría un épsilon para comparar mayor o menor? – AshleysBrain
El único momento en que se necesita una comparación epsilon para coma flotante o tipos dobles es para la comparación de igualdad '=='. más o menos realmente no tienen ningún significado con épsilon, porque ¿qué esperas que sea la respuesta cuando son iguales? si mayor o menor se definen ambos en la forma que usted menciona, entonces en el caso en que sean iguales, obtendrá un b = verdadero y a == b = verdadero, que es incorrecto. El comportamiento correcto es que iff a == b entonces a> b = falso, y a Akanksh
@Akanksh, la implementación anterior puede no ser correcta, pero las desigualdades basadas en épsilon son significativas e importantes precisamente para el escenario que resalta. Si dos números son iguales de acuerdo con una prueba '==' basada en épsilon, entonces también necesita una prueba '<' que devuelve falso, incluso si el primer número es ligeramente menor que el segundo. –