From bf855042330bfcd5df70407fb3f9fc5ac6a07fdc Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Tue, 8 Nov 2022 20:47:50 +0100 Subject: [PATCH] Fix printing of zero floats and doubles (!) --- implementations/rust/oo/src/text/writer.rs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) 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)) } }