From c0b2957c6709802ee0b1fc51a1117d919a76e75c Mon Sep 17 00:00:00 2001 From: Lars Mueller Date: Wed, 8 Jun 2022 10:16:47 +0200 Subject: [PATCH] Fix binary.write_float --- binary.lua | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/binary.lua b/binary.lua index 25b11a1..9c0d4fe 100644 --- a/binary.lua +++ b/binary.lua @@ -104,10 +104,14 @@ function write_float(write_byte, number, on_write, double) end local mantissa, exponent = math_frexp(number) exponent = exponent + 127 + if number == 0 then exponent = 0 end -- zero must be written as a subnormal number if exponent > 1 then -- TODO ensure this deals properly with subnormal numbers mantissa = mantissa * 2 - 1 exponent = exponent - 1 + elseif exponent < 0 then -- number is currently sub-subnormal, subnormalize + mantissa = mantissa * 2^(exponent-1) + exponent = 0 end local sign_byte = sign + math_floor(exponent / 2) if double == nil then