diff --git a/uavcan/src/types.rs b/uavcan/src/types.rs index 4499c8e3..0f77b6a1 100644 --- a/uavcan/src/types.rs +++ b/uavcan/src/types.rs @@ -700,39 +700,14 @@ impl PrimitiveType for f16 { impl_serializeable!(f16, 16); impl PrimitiveType for f32 { - - #[cfg_attr(feature="clippy", allow(transmute_int_to_float))] - fn from_bits(v: u64) -> Self { - let mut v32 = v as u32; - const EXP_MASK: u32 = 0x7F80_0000; - const FRACT_MASK: u32 = 0x007F_FFFF; - if v32 & EXP_MASK == EXP_MASK && v32 & FRACT_MASK != 0 { - v32 = unsafe { lib::core::mem::transmute(lib::core::f32::NAN) }; - } - unsafe { lib::core::mem::transmute::(v32) } - } - fn to_bits(self) -> u64 { - (unsafe { lib::core::mem::transmute::(self) }) as u64 - - - } + fn from_bits(v: u64) -> Self { f32::from_bits(v as u32) } + fn to_bits(self) -> u64 { u64::from(self.to_bits()) } } impl_serializeable!(f32, 32); impl PrimitiveType for f64 { - - #[cfg_attr(feature="clippy", allow(transmute_int_to_float))] - fn from_bits(mut v: u64) -> Self { - const EXP_MASK: u64 = 0x7FF0_0000_0000_0000; - const FRACT_MASK: u64 = 0x000F_FFFF_FFFF_FFFF; - if v & EXP_MASK == EXP_MASK && v & FRACT_MASK != 0 { - v = unsafe { lib::core::mem::transmute(lib::core::f64::NAN) }; - } - unsafe { lib::core::mem::transmute(v) } - } - fn to_bits(self) -> u64 { - unsafe { lib::core::mem::transmute(self) } - } + fn from_bits(v: u64) -> Self { f64::from_bits(v) } + fn to_bits(self) -> u64 { self.to_bits() } } impl_serializeable!(f64, 64);