diff --git a/implementations/rust/oo/src/text/writer.rs b/implementations/rust/oo/src/text/writer.rs index 2e549fc..d7791dd 100644 --- a/implementations/rust/oo/src/text/writer.rs +++ b/implementations/rust/oo/src/text/writer.rs @@ -208,22 +208,22 @@ impl Writer for TextWriter { } fn write_f32(&mut self, v: f32) -> io::Result<()> { - if f32::is_normal(v) || f32::is_subnormal(v) { + if v.is_nan() || v.is_infinite() { + write!(self.w, "#xf\"{}\"", + HexFormatter::Packed.encode(&u32::to_be_bytes(f32::to_bits(v)))) + } else { dtoa::write(&mut self.w, v)?; write!(self.w, "f") - } else { - let bs = v.to_be_bytes(); - write!(self.w, "#xf\"{}\"", HexFormatter::Packed.encode(&bs)) } } fn write_f64(&mut self, v: f64) -> io::Result<()> { - if f64::is_normal(v) || f64::is_subnormal(v) { + if v.is_nan() || v.is_infinite() { + write!(self.w, "#xd\"{}\"", + HexFormatter::Packed.encode(&u64::to_be_bytes(f64::to_bits(v)))) + } else { dtoa::write(&mut self.w, v)?; Ok(()) - } else { - let bs = v.to_be_bytes(); - write!(self.w, "#xd\"{}\"", HexFormatter::Packed.encode(&bs)) } }