From 18a50dae831bbafa8df0cd1302eeb6cddba27af0 Mon Sep 17 00:00:00 2001 From: Vinnie Falco Date: Fri, 9 Oct 2020 10:22:59 -0700 Subject: [PATCH] Better decimal to float accuracy --- include/boost/json/basic_parser_impl.hpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/include/boost/json/basic_parser_impl.hpp b/include/boost/json/basic_parser_impl.hpp index 13924487..bfdd9d55 100644 --- a/include/boost/json/basic_parser_impl.hpp +++ b/include/boost/json/basic_parser_impl.hpp @@ -138,13 +138,14 @@ dec_to_float( std::int32_t e, bool neg) noexcept { + auto x = + static_cast(m); if(neg) - return (-static_cast< - double>(m)) * - pow10(e); - return (static_cast< - double>(m)) * - pow10(e); + x = -x; + if(e < -307) + return x * 1e-307 * + pow10(e+307); + return x * pow10(e); } inline