From f2543b0a98692ef2db37a7af37cf328655df60a3 Mon Sep 17 00:00:00 2001 From: Victor Zverovich Date: Mon, 14 Mar 2022 14:00:15 -0700 Subject: [PATCH] Add initial support for 128-bit floats --- include/fmt/format-inl.h | 6 ++---- include/fmt/format.h | 6 +++--- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/include/fmt/format-inl.h b/include/fmt/format-inl.h index 81b236c8..e1010a90 100644 --- a/include/fmt/format-inl.h +++ b/include/fmt/format-inl.h @@ -233,17 +233,15 @@ template struct basic_fp { template using is_supported = bool_constant::is_iec559 && - std::numeric_limits::digits <= 64>; + std::numeric_limits::digits <= 113>; // Assigns d to this and return true iff predecessor is closer than successor. template ::value)> FMT_CONSTEXPR bool assign(Float n) { // Assume float is in the format [sign][exponent][significand]. - const int num_float_significand_bits = - detail::num_significand_bits(); using carrier_uint = typename dragonbox::float_info::carrier_uint; const carrier_uint implicit_bit = carrier_uint(1) - << num_float_significand_bits; + << detail::num_significand_bits(); const carrier_uint significand_mask = implicit_bit - 1; auto u = bit_cast(n); f = static_cast(u & significand_mask); diff --git a/include/fmt/format.h b/include/fmt/format.h index a3097e22..51d830a2 100644 --- a/include/fmt/format.h +++ b/include/fmt/format.h @@ -1252,10 +1252,10 @@ template <> struct float_info { static const int shorter_interval_tie_upper_threshold = -77; }; -// 80-bit extended precision long double. +// An 80- or 128-bit floating point number. template -struct float_info::value && - std::numeric_limits::digits == 64>> { +struct float_info::digits == 64 || + std::numeric_limits::digits == 113>> { using carrier_uint = detail::uint128_t; static const int exponent_bits = 15; };