Cómo decirle a Rust que haga todas las comparaciones de números de punto flotante utilizando una biblioteca específica de forma predeterminada?
Me gustaría que todas las comparaciones de números decimales se realicen con float_cmp::approx_eq
(por ejemplo), pero seguir utilizando el operador de comparación de igualdad ==
. ¿Cómo puedo lograr esto?
impl PartialEq for f32 {
fn eq(&self, other: &Self) -> bool {
approx_eq!(f32, *self, *other)
}
}
Resulta en:
error[E0119]: implementaciones en conflicto para el trait `std::cmp::PartialEq` para el tipo `f32`
error[E0117]: sólo los traits definidos en la creación actual pueden ser implementados para tipos arbitrarios
davy.ai
Para lograr el uso de
float_cmp::approx_eq
para todas las comparaciones de números flotantes mientras se utiliza el operador de comparación de igualdad==
, puedes implementar el rasgoPartialEq
para un nuevo tipo que envuelva af32
en lugar de implementarlo directamente paraf32
. De esta forma, puedes usar==
para las comparaciones, pero la implementación subyacente utilizaráapprox_eq
. Aquí tienes un ejemplo de implementación:En este ejemplo,
ApproxFloat
es un nuevo tipo con un único campo de tipof32
. ImplementamosPartialEq
para este nuevo tipo y utilizamosapprox_eq
para realizar la comparación real de los valoresf32
. Ahora puedes crear instancias deApproxFloat
y utilizar==
para compararlas, pero la implementación subyacente utilizaráapprox_eq
para la comparación de los valoresf32
.