From c7305408d150e1ca51195e8f31e4e3e6bd6b7c33 Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Mon, 28 Mar 2016 21:39:31 +0200 Subject: [PATCH] Fix formatting of some small denormals at low precision. Contributed by Peter Cawley. --- src/lj_strfmt_num.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lj_strfmt_num.c b/src/lj_strfmt_num.c index ab84fda7..79bc7610 100644 --- a/src/lj_strfmt_num.c +++ b/src/lj_strfmt_num.c @@ -364,6 +364,7 @@ static char *lj_strfmt_wfnum(SBuf *sb, SFormat sf, lua_Number n, char *p) /* Precision is sufficiently low that rescaling will probably work. */ if ((ndebias = rescale_e[e >> 6])) { t.n = n * rescale_n[e >> 6]; + if (LJ_UNLIKELY(!e)) t.n *= 1e10, ndebias -= 10; t.u64 -= 2; /* Convert 2ulp below (later we convert 2ulp above). */ nd[0] = 0x100000 | (t.u32.hi & 0xfffff); e = ((t.u32.hi >> 20) & 0x7ff) - 1075 - (ND_MUL2K_MAX_SHIFT < 29);