[libc-commits] [libc] [libc][math][c23] Add hypotf16 function (PR #131991)

Tejas Vipin via libc-commits libc-commits at lists.llvm.org
Wed Mar 26 01:36:31 PDT 2025


https://github.com/meltq updated https://github.com/llvm/llvm-project/pull/131991

>From 08792d33933092bf25c1c059fe2fd402030ca5c5 Mon Sep 17 00:00:00 2001
From: meltq <alissxlace at proton.me>
Date: Wed, 19 Mar 2025 15:19:37 +0530
Subject: [PATCH 1/9] Add hypotf16() function

---
 libc/config/linux/x86_64/entrypoints.txt      |  1 +
 libc/docs/headers/math/index.rst              |  2 +-
 libc/include/math.yaml                        |  8 ++
 libc/src/math/CMakeLists.txt                  |  1 +
 libc/src/math/generic/CMakeLists.txt          | 15 ++++
 libc/src/math/generic/hypotf16.cpp            | 86 +++++++++++++++++++
 libc/src/math/hypotf16.h                      | 21 +++++
 libc/test/src/math/CMakeLists.txt             | 12 +++
 libc/test/src/math/exhaustive/CMakeLists.txt  | 18 ++++
 .../src/math/exhaustive/hypotf16_test.cpp     | 56 ++++++++++++
 libc/test/src/math/hypotf16_test.cpp          | 27 ++++++
 libc/test/src/math/smoke/CMakeLists.txt       | 14 +++
 libc/test/src/math/smoke/hypotf16_test.cpp    | 33 +++++++
 13 files changed, 293 insertions(+), 1 deletion(-)
 create mode 100644 libc/src/math/generic/hypotf16.cpp
 create mode 100644 libc/src/math/hypotf16.h
 create mode 100644 libc/test/src/math/exhaustive/hypotf16_test.cpp
 create mode 100644 libc/test/src/math/hypotf16_test.cpp
 create mode 100644 libc/test/src/math/smoke/hypotf16_test.cpp

diff --git a/libc/config/linux/x86_64/entrypoints.txt b/libc/config/linux/x86_64/entrypoints.txt
index a29478898fe70..f2a936962dd6d 100644
--- a/libc/config/linux/x86_64/entrypoints.txt
+++ b/libc/config/linux/x86_64/entrypoints.txt
@@ -701,6 +701,7 @@ if(LIBC_TYPES_HAS_FLOAT16)
     libc.src.math.fromfpf16
     libc.src.math.fromfpxf16
     libc.src.math.getpayloadf16
+    libc.src.math.hypotf16
     libc.src.math.ilogbf16
     libc.src.math.iscanonicalf16
     libc.src.math.issignalingf16
diff --git a/libc/docs/headers/math/index.rst b/libc/docs/headers/math/index.rst
index 5b855ce4881c3..ff7fd32690b3c 100644
--- a/libc/docs/headers/math/index.rst
+++ b/libc/docs/headers/math/index.rst
@@ -305,7 +305,7 @@ Higher Math Functions
 +-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+
 | fsqrt     | N/A              | |check|         |  |check|               | N/A                  | |check|\*              | 7.12.14.6              | F.10.11                    |
 +-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+
-| hypot     | |check|          | |check|         |                        |                      |                        | 7.12.7.4               | F.10.4.4                   |
+| hypot     | |check|          | |check|         |                        | |check|              |                        | 7.12.7.4               | F.10.4.4                   |
 +-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+
 | lgamma    |                  |                 |                        |                      |                        | 7.12.8.3               | F.10.5.3                   |
 +-----------+------------------+-----------------+------------------------+----------------------+------------------------+------------------------+----------------------------+
diff --git a/libc/include/math.yaml b/libc/include/math.yaml
index a66f981030864..b0bb5d74c5605 100644
--- a/libc/include/math.yaml
+++ b/libc/include/math.yaml
@@ -1366,6 +1366,14 @@ functions:
     arguments:
       - type: float
       - type: float
+  - name: hypotf16
+    standards:
+      - stdc
+    return_type: _Float16
+    arguments:
+      - type: _Float16
+      - type: _Float16
+    guard: LIBC_TYPES_HAS_FLOAT16
   - name: ilogb
     standards:
       - stdc
diff --git a/libc/src/math/CMakeLists.txt b/libc/src/math/CMakeLists.txt
index f18a73d46f9aa..3a098951bb205 100644
--- a/libc/src/math/CMakeLists.txt
+++ b/libc/src/math/CMakeLists.txt
@@ -310,6 +310,7 @@ add_math_entrypoint_object(getpayloadf128)
 
 add_math_entrypoint_object(hypot)
 add_math_entrypoint_object(hypotf)
+add_math_entrypoint_object(hypotf16)
 
 add_math_entrypoint_object(ilogb)
 add_math_entrypoint_object(ilogbf)
diff --git a/libc/src/math/generic/CMakeLists.txt b/libc/src/math/generic/CMakeLists.txt
index 3114289bad486..7ec2e0bf9e865 100644
--- a/libc/src/math/generic/CMakeLists.txt
+++ b/libc/src/math/generic/CMakeLists.txt
@@ -3105,6 +3105,21 @@ add_entrypoint_object(
     libc.src.__support.macros.optimization
 )
 
+add_entrypoint_object(
+  hypotf16
+  SRCS
+    hypotf16.cpp
+  HDRS
+    ../hypotf16.h
+  DEPENDS
+    libc.src.__support.FPUtil.fenv_impl
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.multiply_add
+    libc.src.__support.FPUtil.sqrt
+    libc.src.__support.macros.optimization
+    libc.src.__support.macros.properties.types
+)
+
 add_entrypoint_object(
   fdim
   SRCS
diff --git a/libc/src/math/generic/hypotf16.cpp b/libc/src/math/generic/hypotf16.cpp
new file mode 100644
index 0000000000000..c827c0d8a513f
--- /dev/null
+++ b/libc/src/math/generic/hypotf16.cpp
@@ -0,0 +1,86 @@
+//===-- Implementation of hypotf function ---------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "src/math/hypotf16.h"
+#include "src/__support/FPUtil/FEnvImpl.h"
+#include "src/__support/FPUtil/FPBits.h"
+#include "src/__support/FPUtil/multiply_add.h"
+#include "src/__support/FPUtil/sqrt.h"
+#include "src/__support/common.h"
+#include "src/__support/macros/properties/types.h"
+#include "src/__support/macros/optimization.h"
+#include "src/__support/FPUtil/cast.h"
+
+namespace LIBC_NAMESPACE_DECL {
+
+LLVM_LIBC_FUNCTION(float16, hypotf16, (float16 x, float16 y)) {
+  using FloatBits = fputil::FPBits<float>;
+  using FPBits = fputil::FPBits<float16>;
+
+  FPBits x_abs = FPBits(x).abs();
+  FPBits y_abs = FPBits(y).abs();
+
+  bool x_abs_larger = x_abs.uintval() >= y_abs.uintval();
+
+  FPBits a_bits = x_abs_larger ? x_abs : y_abs;
+  FPBits b_bits = x_abs_larger ? y_abs : x_abs;
+
+  uint16_t a_u = a_bits.uintval();
+  uint16_t b_u = b_bits.uintval();
+
+  // Note: replacing `a_u >= FPBits::EXP_MASK` with `a_bits.is_inf_or_nan()`
+  // generates extra exponent bit masking instructions on x86-64.
+  if (LIBC_UNLIKELY(a_u >= FPBits::EXP_MASK)) {
+    // x or y is inf or nan
+    if (a_bits.is_signaling_nan() || b_bits.is_signaling_nan()) {
+      fputil::raise_except_if_required(FE_INVALID);
+      return FPBits::quiet_nan().get_val();
+    }
+    if (a_bits.is_inf() || b_bits.is_inf())
+      return FPBits::inf().get_val();
+    return a_bits.get_val();
+  }
+
+  if (LIBC_UNLIKELY(a_u - b_u >=
+                    static_cast<uint16_t>((FPBits::FRACTION_LEN + 2)
+                                          << FPBits::FRACTION_LEN)))
+    return x_abs.get_val() + y_abs.get_val();
+
+  float ad = fputil::cast<float>(a_bits.get_val());
+  float bd = fputil::cast<float>(b_bits.get_val());
+
+  // These squares are exact.
+  float a_sq = ad * ad;
+  float sum_sq = fputil::multiply_add(bd, bd, a_sq);
+
+  FloatBits result(fputil::sqrt<float>(sum_sq));
+  uint32_t r_u = result.uintval();
+
+  // If any of the sticky bits of the result are non-zero, except the LSB, then
+  // the rounded result is correct.
+  if (LIBC_UNLIKELY(((r_u + 1) & 0x0000'0FFE) == 0)) {
+    float r_d = result.get_val();
+
+    // Perform rounding correction.
+    float sum_sq_lo = fputil::multiply_add(bd, bd, a_sq - sum_sq);
+    float err = sum_sq_lo - fputil::multiply_add(r_d, r_d, -sum_sq);
+
+    if (err > 0) {
+      r_u |= 1;
+    } else if ((err < 0) && (r_u & 1) == 0) {
+      r_u -= 1;
+    } else if ((r_u & 0x0000'1FFF) == 0) {
+      // The rounded result is exact.
+      fputil::clear_except_if_required(FE_INEXACT);
+    }
+    return fputil::cast<float16>(FloatBits(r_u).get_val());
+  }
+
+  return fputil::cast<float16>(result.get_val());
+}
+}
diff --git a/libc/src/math/hypotf16.h b/libc/src/math/hypotf16.h
new file mode 100644
index 0000000000000..2d37c61b4ee7b
--- /dev/null
+++ b/libc/src/math/hypotf16.h
@@ -0,0 +1,21 @@
+//===-- Implementation header for hypotf16 ----------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIBC_SRC_MATH_HYPOTF16_H
+#define LLVM_LIBC_SRC_MATH_HYPOTF16_H
+
+#include "src/__support/macros/config.h"
+#include "src/__support/macros/properties/types.h"
+
+namespace LIBC_NAMESPACE_DECL {
+
+float16 hypotf16(float16 x, float16 y);
+
+} // namespace LIBC_NAMESPACE_DECL
+
+#endif // LLVM_LIBC_SRC_MATH_HYPOTF16_H
diff --git a/libc/test/src/math/CMakeLists.txt b/libc/test/src/math/CMakeLists.txt
index 53ddd301900c0..79ae9377afd28 100644
--- a/libc/test/src/math/CMakeLists.txt
+++ b/libc/test/src/math/CMakeLists.txt
@@ -1701,6 +1701,18 @@ add_fp_unittest(
     libc.src.__support.FPUtil.fp_bits
 )
 
+add_fp_unittest(
+  hypotf16_test
+  NEED_MPFR
+  SUITE
+    libc-math-unittests
+  SRCS
+    hypotf16_test.cpp
+  DEPENDS
+    libc.src.math.hypotf16
+    libc.src.__support.FPUtil.fp_bits
+)
+
 add_fp_unittest(
   nextafter_test
   SUITE
diff --git a/libc/test/src/math/exhaustive/CMakeLists.txt b/libc/test/src/math/exhaustive/CMakeLists.txt
index b1927dbc19a3b..551f449c9c8db 100644
--- a/libc/test/src/math/exhaustive/CMakeLists.txt
+++ b/libc/test/src/math/exhaustive/CMakeLists.txt
@@ -314,6 +314,24 @@ add_fp_unittest(
     -lpthread
 )
 
+add_fp_unittest(
+  hypotf16_test
+  NO_RUN_POSTBUILD
+  NEED_MPFR
+  SUITE
+    libc_math_exhaustive_tests
+  SRCS
+    hypotf16_test.cpp
+  COMPILE_OPTIONS
+    ${libc_opt_high_flag}
+  DEPENDS
+    .exhaustive_test
+    libc.src.math.hypotf16
+    libc.src.__support.FPUtil.fp_bits
+  LINK_LIBRARIES
+    -lpthread
+)
+
 add_fp_unittest(
   fmod_generic_impl_test
   NO_RUN_POSTBUILD
diff --git a/libc/test/src/math/exhaustive/hypotf16_test.cpp b/libc/test/src/math/exhaustive/hypotf16_test.cpp
new file mode 100644
index 0000000000000..085504398deac
--- /dev/null
+++ b/libc/test/src/math/exhaustive/hypotf16_test.cpp
@@ -0,0 +1,56 @@
+//===-- Exhaustive test for hypotf16 --------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "exhaustive_test.h"
+#include "src/__support/FPUtil/FPBits.h"
+#include "src/__support/FPUtil/Hypot.h"
+#include "src/math/hypotf16.h"
+#include "test/UnitTest/FPMatcher.h"
+#include "utils/MPFRWrapper/MPFRUtils.h"
+
+namespace mpfr = LIBC_NAMESPACE::testing::mpfr;
+
+// Range of both inputs: [0, inf]
+static constexpr uint16_t START = 0x0000U;
+static constexpr uint16_t STOP = 0x7C00U;
+
+struct Hypotf16Checker : public virtual LIBC_NAMESPACE::testing::Test {
+  using FloatType = float16;
+  using FPBits = LIBC_NAMESPACE::fputil::FPBits<float16>;
+  using StorageType = typename FPBits::StorageType;
+
+  uint64_t check(uint16_t start, uint16_t stop, mpfr::RoundingMode rounding) {
+    mpfr::ForceRoundingMode r(rounding);
+    if (!r.success)
+      return true;
+    uint16_t xbits = start;
+    uint64_t failed = 0;
+    do {
+      float16 x = FPBits(xbits).get_val();
+      uint16_t ybits = xbits;
+      do {
+        float16 y = FPBits(ybits).get_val();
+        bool correct = TEST_FP_EQ(LIBC_NAMESPACE::fputil::hypot(x, y),
+                                  LIBC_NAMESPACE::hypotf16(x, y));
+        // Using MPFR will be much slower.
+        // mpfr::BinaryInput<float16> input{x, y};
+        // bool correct = TEST_MPFR_MATCH_ROUNDING_SILENTLY(
+        //  mpfr::Operation::Hypot, input, LIBC_NAMESPACE::hypotf16(x, y), 0.5,
+        //  rounding);
+        failed += (!correct);
+      } while (ybits++ < STOP);
+    } while (xbits++ < stop);
+    return failed;
+  }
+};
+
+using LlvmLibcHypotf16ExhaustiveTest = LlvmLibcExhaustiveMathTest<Hypotf16Checker>;
+
+TEST_F(LlvmLibcHypotf16ExhaustiveTest, PositiveRange) {
+  test_full_range_all_roundings(START, STOP);
+}
diff --git a/libc/test/src/math/hypotf16_test.cpp b/libc/test/src/math/hypotf16_test.cpp
new file mode 100644
index 0000000000000..28ac9683876a6
--- /dev/null
+++ b/libc/test/src/math/hypotf16_test.cpp
@@ -0,0 +1,27 @@
+//===-- Unittests for hypotf16 --------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "HypotTest.h"
+#include "hypotf_hard_to_round.h"
+
+#include "src/math/hypotf16.h"
+
+using LlvmLibcHypotf16Test = HypotTestTemplate<float16>;
+
+// TEST_F(LlvmLibcHypotf16Test, SubnormalRange) {
+//   test_subnormal_range(&LIBC_NAMESPACE::hypotf16);
+// }
+//
+// TEST_F(LlvmLibcHypotf16Test, NormalRange) {
+//   test_normal_range(&LIBC_NAMESPACE::hypotf16);
+// }
+//
+// TEST_F(LlvmLibcHypotf16Test, TrickyInputs) {
+//   test_input_list(&LIBC_NAMESPACE::hypotf16, N_HARD_TO_ROUND,
+//                   HYPOTF_HARD_TO_ROUND);
+// }
diff --git a/libc/test/src/math/smoke/CMakeLists.txt b/libc/test/src/math/smoke/CMakeLists.txt
index 6f94440d826d9..639fe9590ef39 100644
--- a/libc/test/src/math/smoke/CMakeLists.txt
+++ b/libc/test/src/math/smoke/CMakeLists.txt
@@ -3121,6 +3121,20 @@ add_fp_unittest(
     libc.src.__support.macros.properties.architectures
 )
 
+add_fp_unittest(
+  hypotf16_test
+  SUITE
+    libc-math-smoke-tests
+  SRCS
+    hypotf16_test.cpp
+  HDRS
+    HypotTest.h
+  DEPENDS
+    libc.src.math.hypotf16
+    libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.macros.properties.architectures
+)
+
 add_fp_unittest(
   hypot_test
   SUITE
diff --git a/libc/test/src/math/smoke/hypotf16_test.cpp b/libc/test/src/math/smoke/hypotf16_test.cpp
new file mode 100644
index 0000000000000..5e9d987b6dbd6
--- /dev/null
+++ b/libc/test/src/math/smoke/hypotf16_test.cpp
@@ -0,0 +1,33 @@
+//===-- Unittests for hypotf16 --------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "src/errno/libc_errno.h"
+#include "test/UnitTest/FPMatcher.h"
+#include "test/UnitTest/Test.h"
+#include "src/math/hypotf16.h"
+
+using LlvmLibcHypotf16Test = LIBC_NAMESPACE::testing::FPTest<float16>;
+
+TEST_F(LlvmLibcHypotf16Test, SpecialNumbers) {
+  LIBC_NAMESPACE::libc_errno = 0;
+  EXPECT_FP_EQ(inf, LIBC_NAMESPACE::hypotf16(inf, aNaN));
+  EXPECT_MATH_ERRNO(0);
+  EXPECT_FP_EQ(inf, LIBC_NAMESPACE::hypotf16(aNaN, neg_inf));
+  EXPECT_MATH_ERRNO(0);
+  EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::hypotf16(aNaN, aNaN));
+  EXPECT_MATH_ERRNO(0);
+  EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::hypotf16(sNaN, zero));
+  EXPECT_MATH_ERRNO(0);
+  EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::hypotf16(neg_zero, sNaN));
+  EXPECT_MATH_ERRNO(0);
+
+  EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, LIBC_NAMESPACE::hypotf16(inf, sNaN), FE_INVALID);
+  EXPECT_MATH_ERRNO(0);
+  EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, LIBC_NAMESPACE::hypotf16(sNaN, neg_inf), FE_INVALID);
+  EXPECT_MATH_ERRNO(0);
+}

>From 483ce41e5ae10f4757bcdb6a0cd14ae178dea160 Mon Sep 17 00:00:00 2001
From: meltq <alissxlace at proton.me>
Date: Wed, 19 Mar 2025 15:22:34 +0530
Subject: [PATCH 2/9] Formatting changes

---
 libc/src/math/generic/hypotf16.cpp              | 6 +++---
 libc/test/src/math/exhaustive/hypotf16_test.cpp | 3 ++-
 libc/test/src/math/smoke/hypotf16_test.cpp      | 8 +++++---
 3 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/libc/src/math/generic/hypotf16.cpp b/libc/src/math/generic/hypotf16.cpp
index c827c0d8a513f..75323c5cf5aa8 100644
--- a/libc/src/math/generic/hypotf16.cpp
+++ b/libc/src/math/generic/hypotf16.cpp
@@ -9,12 +9,12 @@
 #include "src/math/hypotf16.h"
 #include "src/__support/FPUtil/FEnvImpl.h"
 #include "src/__support/FPUtil/FPBits.h"
+#include "src/__support/FPUtil/cast.h"
 #include "src/__support/FPUtil/multiply_add.h"
 #include "src/__support/FPUtil/sqrt.h"
 #include "src/__support/common.h"
-#include "src/__support/macros/properties/types.h"
 #include "src/__support/macros/optimization.h"
-#include "src/__support/FPUtil/cast.h"
+#include "src/__support/macros/properties/types.h"
 
 namespace LIBC_NAMESPACE_DECL {
 
@@ -83,4 +83,4 @@ LLVM_LIBC_FUNCTION(float16, hypotf16, (float16 x, float16 y)) {
 
   return fputil::cast<float16>(result.get_val());
 }
-}
+} // namespace LIBC_NAMESPACE_DECL
diff --git a/libc/test/src/math/exhaustive/hypotf16_test.cpp b/libc/test/src/math/exhaustive/hypotf16_test.cpp
index 085504398deac..a13f2e4a1bd05 100644
--- a/libc/test/src/math/exhaustive/hypotf16_test.cpp
+++ b/libc/test/src/math/exhaustive/hypotf16_test.cpp
@@ -49,7 +49,8 @@ struct Hypotf16Checker : public virtual LIBC_NAMESPACE::testing::Test {
   }
 };
 
-using LlvmLibcHypotf16ExhaustiveTest = LlvmLibcExhaustiveMathTest<Hypotf16Checker>;
+using LlvmLibcHypotf16ExhaustiveTest =
+    LlvmLibcExhaustiveMathTest<Hypotf16Checker>;
 
 TEST_F(LlvmLibcHypotf16ExhaustiveTest, PositiveRange) {
   test_full_range_all_roundings(START, STOP);
diff --git a/libc/test/src/math/smoke/hypotf16_test.cpp b/libc/test/src/math/smoke/hypotf16_test.cpp
index 5e9d987b6dbd6..d56cdc457a134 100644
--- a/libc/test/src/math/smoke/hypotf16_test.cpp
+++ b/libc/test/src/math/smoke/hypotf16_test.cpp
@@ -7,9 +7,9 @@
 //===----------------------------------------------------------------------===//
 
 #include "src/errno/libc_errno.h"
+#include "src/math/hypotf16.h"
 #include "test/UnitTest/FPMatcher.h"
 #include "test/UnitTest/Test.h"
-#include "src/math/hypotf16.h"
 
 using LlvmLibcHypotf16Test = LIBC_NAMESPACE::testing::FPTest<float16>;
 
@@ -26,8 +26,10 @@ TEST_F(LlvmLibcHypotf16Test, SpecialNumbers) {
   EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::hypotf16(neg_zero, sNaN));
   EXPECT_MATH_ERRNO(0);
 
-  EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, LIBC_NAMESPACE::hypotf16(inf, sNaN), FE_INVALID);
+  EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, LIBC_NAMESPACE::hypotf16(inf, sNaN),
+                              FE_INVALID);
   EXPECT_MATH_ERRNO(0);
-  EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, LIBC_NAMESPACE::hypotf16(sNaN, neg_inf), FE_INVALID);
+  EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, LIBC_NAMESPACE::hypotf16(sNaN, neg_inf),
+                              FE_INVALID);
   EXPECT_MATH_ERRNO(0);
 }

>From 67d93c8c1ae2232666839380983a5accb75f2bd0 Mon Sep 17 00:00:00 2001
From: meltq <alissxlace at proton.me>
Date: Thu, 20 Mar 2025 11:15:17 +0530
Subject: [PATCH 3/9] Temp removed exhaustive

---
 .../src/math/exhaustive/hypotf16_test.cpp     | 98 +++++++++----------
 1 file changed, 49 insertions(+), 49 deletions(-)

diff --git a/libc/test/src/math/exhaustive/hypotf16_test.cpp b/libc/test/src/math/exhaustive/hypotf16_test.cpp
index a13f2e4a1bd05..c552ce973489c 100644
--- a/libc/test/src/math/exhaustive/hypotf16_test.cpp
+++ b/libc/test/src/math/exhaustive/hypotf16_test.cpp
@@ -6,52 +6,52 @@
 //
 //===----------------------------------------------------------------------===//
 
-#include "exhaustive_test.h"
-#include "src/__support/FPUtil/FPBits.h"
-#include "src/__support/FPUtil/Hypot.h"
-#include "src/math/hypotf16.h"
-#include "test/UnitTest/FPMatcher.h"
-#include "utils/MPFRWrapper/MPFRUtils.h"
-
-namespace mpfr = LIBC_NAMESPACE::testing::mpfr;
-
-// Range of both inputs: [0, inf]
-static constexpr uint16_t START = 0x0000U;
-static constexpr uint16_t STOP = 0x7C00U;
-
-struct Hypotf16Checker : public virtual LIBC_NAMESPACE::testing::Test {
-  using FloatType = float16;
-  using FPBits = LIBC_NAMESPACE::fputil::FPBits<float16>;
-  using StorageType = typename FPBits::StorageType;
-
-  uint64_t check(uint16_t start, uint16_t stop, mpfr::RoundingMode rounding) {
-    mpfr::ForceRoundingMode r(rounding);
-    if (!r.success)
-      return true;
-    uint16_t xbits = start;
-    uint64_t failed = 0;
-    do {
-      float16 x = FPBits(xbits).get_val();
-      uint16_t ybits = xbits;
-      do {
-        float16 y = FPBits(ybits).get_val();
-        bool correct = TEST_FP_EQ(LIBC_NAMESPACE::fputil::hypot(x, y),
-                                  LIBC_NAMESPACE::hypotf16(x, y));
-        // Using MPFR will be much slower.
-        // mpfr::BinaryInput<float16> input{x, y};
-        // bool correct = TEST_MPFR_MATCH_ROUNDING_SILENTLY(
-        //  mpfr::Operation::Hypot, input, LIBC_NAMESPACE::hypotf16(x, y), 0.5,
-        //  rounding);
-        failed += (!correct);
-      } while (ybits++ < STOP);
-    } while (xbits++ < stop);
-    return failed;
-  }
-};
-
-using LlvmLibcHypotf16ExhaustiveTest =
-    LlvmLibcExhaustiveMathTest<Hypotf16Checker>;
-
-TEST_F(LlvmLibcHypotf16ExhaustiveTest, PositiveRange) {
-  test_full_range_all_roundings(START, STOP);
-}
+// #include "exhaustive_test.h"
+// #include "src/__support/FPUtil/FPBits.h"
+// #include "src/__support/FPUtil/Hypot.h"
+// #include "src/math/hypotf16.h"
+// #include "test/UnitTest/FPMatcher.h"
+// #include "utils/MPFRWrapper/MPFRUtils.h"
+//
+// namespace mpfr = LIBC_NAMESPACE::testing::mpfr;
+//
+// // Range of both inputs: [0, inf]
+// static constexpr uint16_t START = 0x0000U;
+// static constexpr uint16_t STOP = 0x7C00U;
+//
+// struct Hypotf16Checker : public virtual LIBC_NAMESPACE::testing::Test {
+//   using FloatType = float16;
+//   using FPBits = LIBC_NAMESPACE::fputil::FPBits<float16>;
+//   using StorageType = typename FPBits::StorageType;
+//
+//   uint64_t check(uint16_t start, uint16_t stop, mpfr::RoundingMode rounding) {
+//     mpfr::ForceRoundingMode r(rounding);
+//     if (!r.success)
+//       return true;
+//     uint16_t xbits = start;
+//     uint64_t failed = 0;
+//     do {
+//       float16 x = FPBits(xbits).get_val();
+//       uint16_t ybits = xbits;
+//       do {
+//         float16 y = FPBits(ybits).get_val();
+//         bool correct = TEST_FP_EQ(LIBC_NAMESPACE::fputil::hypot(x, y),
+//                                   LIBC_NAMESPACE::hypotf16(x, y));
+//         // Using MPFR will be much slower.
+//         // mpfr::BinaryInput<float16> input{x, y};
+//         // bool correct = TEST_MPFR_MATCH_ROUNDING_SILENTLY(
+//         //  mpfr::Operation::Hypot, input, LIBC_NAMESPACE::hypotf16(x, y), 0.5,
+//         //  rounding);
+//         failed += (!correct);
+//       } while (ybits++ < STOP);
+//     } while (xbits++ < stop);
+//     return failed;
+//   }
+// };
+//
+// using LlvmLibcHypotf16ExhaustiveTest =
+//     LlvmLibcExhaustiveMathTest<Hypotf16Checker>;
+//
+// TEST_F(LlvmLibcHypotf16ExhaustiveTest, PositiveRange) {
+//   test_full_range_all_roundings(START, STOP);
+// }

>From 3395a6f5609c4169e42e2875e6bb9e9a544d8ba0 Mon Sep 17 00:00:00 2001
From: meltq <alissxlace at proton.me>
Date: Thu, 20 Mar 2025 11:19:22 +0530
Subject: [PATCH 4/9] Formatting changes

---
 libc/test/src/math/exhaustive/hypotf16_test.cpp | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/libc/test/src/math/exhaustive/hypotf16_test.cpp b/libc/test/src/math/exhaustive/hypotf16_test.cpp
index c552ce973489c..328c0da78f378 100644
--- a/libc/test/src/math/exhaustive/hypotf16_test.cpp
+++ b/libc/test/src/math/exhaustive/hypotf16_test.cpp
@@ -24,7 +24,8 @@
 //   using FPBits = LIBC_NAMESPACE::fputil::FPBits<float16>;
 //   using StorageType = typename FPBits::StorageType;
 //
-//   uint64_t check(uint16_t start, uint16_t stop, mpfr::RoundingMode rounding) {
+//   uint64_t check(uint16_t start, uint16_t stop, mpfr::RoundingMode rounding)
+//   {
 //     mpfr::ForceRoundingMode r(rounding);
 //     if (!r.success)
 //       return true;
@@ -40,7 +41,8 @@
 //         // Using MPFR will be much slower.
 //         // mpfr::BinaryInput<float16> input{x, y};
 //         // bool correct = TEST_MPFR_MATCH_ROUNDING_SILENTLY(
-//         //  mpfr::Operation::Hypot, input, LIBC_NAMESPACE::hypotf16(x, y), 0.5,
+//         //  mpfr::Operation::Hypot, input, LIBC_NAMESPACE::hypotf16(x, y),
+//         0.5,
 //         //  rounding);
 //         failed += (!correct);
 //       } while (ybits++ < STOP);

>From 916c5ec90daede70087981e8b8ff700f67f45a21 Mon Sep 17 00:00:00 2001
From: meltq <alissxlace at proton.me>
Date: Thu, 20 Mar 2025 15:19:01 +0530
Subject: [PATCH 5/9] Add normal and subnormal tests

---
 libc/test/src/math/hypotf16_test.cpp | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/libc/test/src/math/hypotf16_test.cpp b/libc/test/src/math/hypotf16_test.cpp
index 28ac9683876a6..82d18c38568c9 100644
--- a/libc/test/src/math/hypotf16_test.cpp
+++ b/libc/test/src/math/hypotf16_test.cpp
@@ -13,14 +13,14 @@
 
 using LlvmLibcHypotf16Test = HypotTestTemplate<float16>;
 
-// TEST_F(LlvmLibcHypotf16Test, SubnormalRange) {
-//   test_subnormal_range(&LIBC_NAMESPACE::hypotf16);
-// }
-//
-// TEST_F(LlvmLibcHypotf16Test, NormalRange) {
-//   test_normal_range(&LIBC_NAMESPACE::hypotf16);
-// }
-//
+TEST_F(LlvmLibcHypotf16Test, SubnormalRange) {
+  test_subnormal_range(&LIBC_NAMESPACE::hypotf16);
+}
+
+TEST_F(LlvmLibcHypotf16Test, NormalRange) {
+  test_normal_range(&LIBC_NAMESPACE::hypotf16);
+}
+
 // TEST_F(LlvmLibcHypotf16Test, TrickyInputs) {
 //   test_input_list(&LIBC_NAMESPACE::hypotf16, N_HARD_TO_ROUND,
 //                   HYPOTF_HARD_TO_ROUND);

>From 55d58c105cdedc1dcac62a9caa5d1d7c79b7c6ab Mon Sep 17 00:00:00 2001
From: meltq <alissxlace at proton.me>
Date: Thu, 20 Mar 2025 19:09:46 +0530
Subject: [PATCH 6/9] Add 1 to round up STEP for subnormal

---
 libc/test/src/math/HypotTest.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libc/test/src/math/HypotTest.h b/libc/test/src/math/HypotTest.h
index fd0c1b394b8f7..dc73581e67ff0 100644
--- a/libc/test/src/math/HypotTest.h
+++ b/libc/test/src/math/HypotTest.h
@@ -73,7 +73,7 @@ class HypotTestTemplate : public LIBC_NAMESPACE::testing::FEnvSafeTest {
     constexpr StorageType COUNT = 10'001;
     for (unsigned scale = 0; scale < 4; ++scale) {
       StorageType max_value = MAX_SUBNORMAL << scale;
-      StorageType step = (max_value - MIN_SUBNORMAL) / COUNT;
+      StorageType step = (max_value - MIN_SUBNORMAL) / COUNT + 1;
       for (int signs = 0; signs < 4; ++signs) {
         for (StorageType v = MIN_SUBNORMAL, w = max_value;
              v <= max_value && w >= MIN_SUBNORMAL; v += step, w -= step) {

>From c6970d671c0efe52268d36fec9a9c94ff5cac2f9 Mon Sep 17 00:00:00 2001
From: meltq <alissxlace at proton.me>
Date: Sun, 23 Mar 2025 22:46:34 +0530
Subject: [PATCH 7/9] Added hard to round, formatting

---
 .../src/math/exhaustive/hypotf16_test.cpp     |  102 +-
 libc/test/src/math/hypotf16_hard_to_round.h   | 1022 +++++++++++++++++
 libc/test/src/math/hypotf16_test.cpp          |   10 +-
 libc/test/src/math/smoke/hypotf16_test.cpp    |   26 +-
 4 files changed, 1082 insertions(+), 78 deletions(-)
 create mode 100644 libc/test/src/math/hypotf16_hard_to_round.h

diff --git a/libc/test/src/math/exhaustive/hypotf16_test.cpp b/libc/test/src/math/exhaustive/hypotf16_test.cpp
index 328c0da78f378..4defb11d02ee6 100644
--- a/libc/test/src/math/exhaustive/hypotf16_test.cpp
+++ b/libc/test/src/math/exhaustive/hypotf16_test.cpp
@@ -6,54 +6,54 @@
 //
 //===----------------------------------------------------------------------===//
 
-// #include "exhaustive_test.h"
-// #include "src/__support/FPUtil/FPBits.h"
-// #include "src/__support/FPUtil/Hypot.h"
-// #include "src/math/hypotf16.h"
-// #include "test/UnitTest/FPMatcher.h"
-// #include "utils/MPFRWrapper/MPFRUtils.h"
-//
-// namespace mpfr = LIBC_NAMESPACE::testing::mpfr;
-//
-// // Range of both inputs: [0, inf]
-// static constexpr uint16_t START = 0x0000U;
-// static constexpr uint16_t STOP = 0x7C00U;
-//
-// struct Hypotf16Checker : public virtual LIBC_NAMESPACE::testing::Test {
-//   using FloatType = float16;
-//   using FPBits = LIBC_NAMESPACE::fputil::FPBits<float16>;
-//   using StorageType = typename FPBits::StorageType;
-//
-//   uint64_t check(uint16_t start, uint16_t stop, mpfr::RoundingMode rounding)
-//   {
-//     mpfr::ForceRoundingMode r(rounding);
-//     if (!r.success)
-//       return true;
-//     uint16_t xbits = start;
-//     uint64_t failed = 0;
-//     do {
-//       float16 x = FPBits(xbits).get_val();
-//       uint16_t ybits = xbits;
-//       do {
-//         float16 y = FPBits(ybits).get_val();
-//         bool correct = TEST_FP_EQ(LIBC_NAMESPACE::fputil::hypot(x, y),
-//                                   LIBC_NAMESPACE::hypotf16(x, y));
-//         // Using MPFR will be much slower.
-//         // mpfr::BinaryInput<float16> input{x, y};
-//         // bool correct = TEST_MPFR_MATCH_ROUNDING_SILENTLY(
-//         //  mpfr::Operation::Hypot, input, LIBC_NAMESPACE::hypotf16(x, y),
-//         0.5,
-//         //  rounding);
-//         failed += (!correct);
-//       } while (ybits++ < STOP);
-//     } while (xbits++ < stop);
-//     return failed;
-//   }
-// };
-//
-// using LlvmLibcHypotf16ExhaustiveTest =
-//     LlvmLibcExhaustiveMathTest<Hypotf16Checker>;
-//
-// TEST_F(LlvmLibcHypotf16ExhaustiveTest, PositiveRange) {
-//   test_full_range_all_roundings(START, STOP);
-// }
+#include "exhaustive_test.h"
+#include "src/__support/FPUtil/FPBits.h"
+#include "src/__support/FPUtil/Hypot.h"
+#include "src/math/hypotf16.h"
+#include "test/UnitTest/FPMatcher.h"
+#include "utils/MPFRWrapper/MPFRUtils.h"
+
+namespace mpfr = LIBC_NAMESPACE::testing::mpfr;
+
+// Range of both inputs: [0, inf]
+static constexpr uint16_t START = 0x0000U;
+static constexpr uint16_t STOP = 0x7C00U;
+
+struct Hypotf16Checker : public virtual LIBC_NAMESPACE::testing::Test {
+  using FloatType = float16;
+  using FPBits = LIBC_NAMESPACE::fputil::FPBits<float16>;
+  using StorageType = typename FPBits::StorageType;
+
+  uint64_t check(uint16_t start, uint16_t stop, mpfr::RoundingMode rounding)
+  {
+    mpfr::ForceRoundingMode r(rounding);
+    if (!r.success)
+      return true;
+    uint16_t xbits = start;
+    uint64_t failed = 0;
+    do {
+      float16 x = FPBits(xbits).get_val();
+      uint16_t ybits = xbits;
+      do {
+        float16 y = FPBits(ybits).get_val();
+        bool correct = TEST_FP_EQ(LIBC_NAMESPACE::fputil::hypot(x, y),
+                                  LIBC_NAMESPACE::hypotf16(x, y));
+        // Using MPFR will be much slower.
+        // mpfr::BinaryInput<float16> input{x, y};
+        // bool correct = TEST_MPFR_MATCH_ROUNDING_SILENTLY(
+        //  mpfr::Operation::Hypot, input, LIBC_NAMESPACE::hypotf16(x, y),
+        // 0.5,
+        //  rounding);
+        failed += (!correct);
+      } while (ybits++ < STOP);
+    } while (xbits++ < stop);
+    return failed;
+  }
+};
+
+using LlvmLibcHypotf16ExhaustiveTest =
+    LlvmLibcExhaustiveMathTest<Hypotf16Checker>;
+
+TEST_F(LlvmLibcHypotf16ExhaustiveTest, PositiveRange) {
+  test_full_range_all_roundings(START, STOP);
+}
diff --git a/libc/test/src/math/hypotf16_hard_to_round.h b/libc/test/src/math/hypotf16_hard_to_round.h
new file mode 100644
index 0000000000000..00e3066b00e61
--- /dev/null
+++ b/libc/test/src/math/hypotf16_hard_to_round.h
@@ -0,0 +1,1022 @@
+//===-- Hard-to-round inputs for hypotf16 ----------------------------C++--===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIBC_TEST_SRC_MATH_HYPOTTEST_HARD_TO_ROUND_H
+#define LLVM_LIBC_TEST_SRC_MATH_HYPOTTEST_HARD_TO_ROUND_H
+
+#include "utils/MPFRWrapper/MPFRUtils.h"
+
+namespace mpfr = LIBC_NAMESPACE::testing::mpfr;
+
+// 1000 cases where the precise result is between two consecutive 
+// Float16 numbers
+constexpr int N_HARD_TO_ROUND = 1000;
+constexpr mpfr::BinaryInput<float16> HYPOTF16_HARD_TO_ROUND[N_HARD_TO_ROUND] = {
+  {0x1.3b8p-5, 0x1.d94p-6},
+  {0x1.068p-7, 0x1.1ccp-8},
+  {0x1.1dp-3, 0x1.4c8p-5},
+  {0x1.c38p-2, 0x1.784p-3},
+  {0x1.e3cp-3, 0x1.02p-3},
+  {0x1.04p-8, 0x1.b3p-11},
+  {0x1.e3p+5, 0x1.928p+4},
+  {0x1.8bp+4, 0x1.638p+2},
+  {0x1.4fp+1, 0x1.2d8p-1},
+  {0x1.458p+3, 0x1.0f4p+2},
+  {0x1.c08p+1, 0x1.75cp+0},
+  {0x1.1fp-13, 0x1.524p-14},
+  {0x1.36p-3, 0x1.2e4p-4},
+  {0x1.b58p-9, 0x1.3ecp-10},
+  {0x1.d74p+6, 0x1.a7p+6},
+  {0x1.dc4p-6, 0x1.fcp-7},
+  {0x1.6f8p-3, 0x1.324p-4},
+  {0x1.86p+13, 0x1.7c4p+12},
+  {0x1.9c8p+4, 0x1.57cp+3},
+  {0x1.81p+7, 0x1.638p+5},
+  {0x1.488p+9, 0x1.11cp+8},
+  {0x1.0a8p+12, 0x1.f68p+10},
+  {0x1.008p-8, 0x1.bcp-13},
+  {0x1.818p-8, 0x1.414p-9},
+  {0x1.efp+1, 0x1.814p+1},
+  {0x1.b6cp+6, 0x1.11p+6},
+  {0x1.458p+10, 0x1.93p+7},
+  {0x1.058p+13, 0x1.884p+12},
+  {0x1.ae8p+7, 0x1.0a8p+5},
+  {0x1.9c8p+7, 0x1.60cp+6},
+  {0x1.2cp+2, 0x1.14cp+1},
+  {0x1.9bp+13, 0x1.df8p+11},
+  {0x1.b2p+14, 0x1.d1p+11},
+  {0x1.f8p-10, 0x1.d1cp-10},
+  {0x1.22p-13, 0x1.7b8p-15},
+  {0x1.cep-13, 0x1.104p-13},
+  {0x1.2e8p+5, 0x1.cep+1},
+  {0x1.edp-10, 0x1.71cp-10},
+  {0x1.6f8p+12, 0x1.96p+8},
+  {0x1.e78p+7, 0x1.32p+3},
+  {0x1.2dp-1, 0x1.62cp-2},
+  {0x1.ab8p-4, 0x1.72p-8},
+  {0x1.ab8p+7, 0x1.398p+5},
+  {0x1.97p-10, 0x1.1b8p-12},
+  {0x1.eap+5, 0x1.068p+3},
+  {0x1.fdp+11, 0x1.7dcp+11},
+  {0x1.fbp-14, 0x1.b04p-14},
+  {0x1.3bp+14, 0x1.6f8p+12},
+  {0x1.4c8p+5, 0x1.c8cp+4},
+  {0x1.848p-3, 0x1.e1p-6},
+  {0x1.72p+4, 0x1.68cp+3},
+  {0x1.2a8p-10, 0x1.bfcp-11},
+  {0x1.d8cp+9, 0x1.59p+9},
+  {0x1.e3p+12, 0x1.a2cp+12},
+  {0x1.81p-8, 0x1.5a8p-10},
+  {0x1.b48p+3, 0x1.6bcp+2},
+  {0x1.14p+8, 0x1.bbcp+7},
+  {0x1.72p-1, 0x1.cep-5},
+  {0x1.068p-3, 0x1.aa4p-4},
+  {0x1.7b8p+5, 0x1.e8cp+4},
+  {0x1.14p-9, 0x1.998p-11},
+  {0x1.878p+1, 0x1.83cp+0},
+  {0x1.068p+5, 0x1.41cp+4},
+  {0x1.0bp+14, 0x1.378p+12},
+  {0x1.2dp-2, 0x1.0a4p-3},
+  {0x1.ed8p+10, 0x1.bdp+7},
+  {0x1.f8p+5, 0x1.158p+4},
+  {0x1.44p-2, 0x1.62cp-3},
+  {0x1.a4p+11, 0x1.ce8p+9},
+  {0x1.fbp+5, 0x1.45p+2},
+  {0x1.1dp+4, 0x1.4c8p+2},
+  {0x1.2a8p-1, 0x1.f18p-3},
+  {0x1.2dp-11, 0x1.0a4p-12},
+  {0x1.c2p-8, 0x1.b6cp-9},
+  {0x1.adp+12, 0x1.41cp+12},
+  {0x1.9fp+4, 0x1.758p+2},
+  {0x1.42p-7, 0x1.59p-10},
+  {0x1.198p-8, 0x1.a64p-9},
+  {0x1.f2cp-2, 0x1.56p-3},
+  {0x1.e14p-2, 0x1.b9p-2},
+  {0x1.158p+7, 0x1.d5p+4},
+  {0x1.1f8p+7, 0x1.af4p+6},
+  {0x1.d88p-6, 0x1.8fp-9},
+  {0x1.38p-8, 0x1.f1p-11},
+  {0x1.3bp-8, 0x1.1cp-13},
+  {0x1.4a8p-4, 0x1.efcp-5},
+  {0x1.efp-2, 0x1.848p-3},
+  {0x1.cep-1, 0x1.75cp-1},
+  {0x1.098p+12, 0x1.ba8p+10},
+  {0x1.1fp+13, 0x1.c08p+11},
+  {0x1.d9p-12, 0x1.5cp-17},
+  {0x1.89cp+8, 0x1.77p+8},
+  {0x1.158p+0, 0x1.97p-3},
+  {0x1.d7p+1, 0x1.614p+1},
+  {0x1.b3p+5, 0x1.878p+3},
+  {0x1.028p-4, 0x1.af4p-5},
+  {0x1.93p-6, 0x1.b3cp-7},
+  {0x1.4d8p+13, 0x1.f44p+12},
+  {0x1.d4cp+5, 0x1.f4p+4},
+  {0x1.efp-11, 0x1.59p-14},
+  {0x1.b6cp+11, 0x1.11p+11},
+  {0x1.328p+11, 0x1.cbcp+10},
+  {0x1.bap+0, 0x1.be4p-1},
+  {0x1.318p+11, 0x1.ca4p+10},
+  {0x1.74cp-13, 0x1.63p-13},
+  {0x1.3bp+11, 0x1.1b8p+9},
+  {0x1.278p-5, 0x1.bb4p-6},
+  {0x1.1f8p+7, 0x1.74cp+6},
+  {0x1.848p-12, 0x1.8bp-15},
+  {0x1.28p-5, 0x1.59p-8},
+  {0x1.9ep+11, 0x1.87p+8},
+  {0x1.d38p-10, 0x1.e78p-12},
+  {0x1.abp-8, 0x1.f74p-9},
+  {0x1.5fp+12, 0x1.c2p+8},
+  {0x1.dbp-13, 0x1.998p-14},
+  {0x1.0e8p-5, 0x1.95cp-6},
+  {0x1.98p+6, 0x1.8a4p+5},
+  {0x1.998p+0, 0x1.fbp-3},
+  {0x1.188p+2, 0x1.d38p+0},
+  {0x1.efp-5, 0x1.814p-5},
+  {0x1.dbp-10, 0x1.464p-10},
+  {0x1.1a8p-10, 0x1.a7cp-11},
+  {0x1.068p-12, 0x1.41cp-13},
+  {0x1.ba8p-4, 0x1.448p-6},
+  {0x1.658p+10, 0x1.89cp+9},
+  {0x1.9c8p+2, 0x1.2e8p+0},
+  {0x1.d88p-12, 0x1.89cp-13},
+  {0x1.508p+4, 0x1.f8cp+3},
+  {0x1.c2p-8, 0x1.be4p-8},
+  {0x1.d4cp+9, 0x1.f4p+8},
+  {0x1.198p+5, 0x1.a64p+4},
+  {0x1.9ap-5, 0x1.44p-10},
+  {0x1.d5p+5, 0x1.5fcp+5},
+  {0x1.dbp-3, 0x1.ab8p-5},
+  {0x1.efp-14, 0x1.3ecp-14},
+  {0x1.05p+0, 0x1.c7p-3},
+  {0x1.c7p+15, 0x1.998p+13},
+  {0x1.658p+7, 0x1.7b8p+5},
+  {0x1.c98p+11, 0x1.7d4p+10},
+  {0x1.c2p+2, 0x1.a9p-1},
+  {0x1.fdp-9, 0x1.7dcp-9},
+  {0x1.3bp-6, 0x1.6f8p-8},
+  {0x1.d18p+3, 0x1.de8p+1},
+  {0x1.2cp+1, 0x1.36p-3},
+  {0x1.458p-4, 0x1.e84p-5},
+  {0x1.3f8p+8, 0x1.df4p+7},
+  {0x1.c2p+1, 0x1.26p-3},
+  {0x1.e5p+9, 0x1.6bcp+9},
+  {0x1.e7p+4, 0x1.6d4p+4},
+  {0x1.318p-12, 0x1.7f4p-13},
+  {0x1.cbp-2, 0x1.0bcp-3},
+  {0x1.068p-3, 0x1.41cp-4},
+  {0x1.55p+10, 0x1.e78p+8},
+  {0x1.c5cp+14, 0x1.8cp+14},
+  {0x1.a28p-1, 0x1.ddcp-2},
+  {0x1.848p-7, 0x1.43cp-8},
+  {0x1.9ecp-6, 0x1.8bp-6},
+  {0x1.3bp-2, 0x1.364p-3},
+  {0x1.c2p+13, 0x1.26p+9},
+  {0x1.1b8p-13, 0x1.a94p-14},
+  {0x1.dbp+11, 0x1.ab8p+9},
+  {0x1.f3p-13, 0x1.764p-13},
+  {0x1.32p+7, 0x1.ae8p+5},
+  {0x1.2dp-4, 0x1.0a4p-5},
+  {0x1.d8cp+7, 0x1.59p+7},
+  {0x1.05p+1, 0x1.308p-1},
+  {0x1.d64p+7, 0x1.11p+7},
+  {0x1.6f8p+7, 0x1.324p+6},
+  {0x1.d88p+8, 0x1.248p+6},
+  {0x1.008p+5, 0x1.ab8p+3},
+  {0x1.248p+4, 0x1.f2cp+3},
+  {0x1.e5p-11, 0x1.b48p-13},
+  {0x1.c2p+7, 0x1.964p+7},
+  {0x1.fa4p+0, 0x1.3bp+0},
+  {0x1.058p-12, 0x1.884p-13},
+  {0x1.f2p-13, 0x1.228p-14},
+  {0x1.c5cp-14, 0x1.8cp-14},
+  {0x1.cep+4, 0x1.75cp+4},
+  {0x1.71p+15, 0x1.81p+12},
+  {0x1.3bp+12, 0x1.644p+11},
+  {0x1.188p-8, 0x1.0cp-13},
+  {0x1.2fp+9, 0x1.618p+7},
+  {0x1.088p+11, 0x1.8ccp+10},
+  {0x1.c3p+9, 0x1.524p+9},
+  {0x1.f2cp+8, 0x1.44p+8},
+  {0x1.11p-7, 0x1.34cp-8},
+  {0x1.efp+9, 0x1.848p+8},
+  {0x1.fa4p+11, 0x1.0ep+11},
+  {0x1.3e8p-7, 0x1.ddcp-8},
+  {0x1.288p-13, 0x1.bccp-14},
+  {0x1.518p-8, 0x1.fa4p-9},
+  {0x1.c7p-3, 0x1.944p-4},
+  {0x1.338p+3, 0x1.c3p+0},
+  {0x1.1b8p+14, 0x1.d88p+12},
+  {0x1.d7p-5, 0x1.614p-5},
+  {0x1.9ep+6, 0x1.87p+3},
+  {0x1.e9p+13, 0x1.6ecp+13},
+  {0x1.9dp-3, 0x1.35cp-3},
+  {0x1.318p+13, 0x1.ca4p+12},
+  {0x1.11p+1, 0x1.cd4p+0},
+  {0x1.26p-10, 0x1.3bp-13},
+  {0x1.adp+14, 0x1.13p+11},
+  {0x1.9bcp-7, 0x1.76p-7},
+  {0x1.e6p-10, 0x1.cbp-13},
+  {0x1.dbp-2, 0x1.86p-6},
+  {0x1.f2cp+3, 0x1.dbp+3},
+  {0x1.2a8p+3, 0x1.bfcp+2},
+  {0x1.f2cp+14, 0x1.0ap+14},
+  {0x1.5cp+13, 0x1.b6cp+12},
+  {0x1.3d8p+3, 0x1.dc4p+2},
+  {0x1.0b8p-10, 0x1.914p-11},
+  {0x1.5cp+3, 0x1.6dcp+2},
+  {0x1.ba8p+0, 0x1.70cp-1},
+  {0x1.45p-2, 0x1.20cp-3},
+  {0x1.ab8p+5, 0x1.72p+1},
+  {0x1.dbp-13, 0x1.86p-17},
+  {0x1.aep-9, 0x1.6a4p-9},
+  {0x1.298p-13, 0x1.14p-18},
+  {0x1.0f8p-10, 0x1.974p-11},
+  {0x1.ddp+1, 0x1.65cp+1},
+  {0x1.d88p-6, 0x1.5a8p-8},
+  {0x1.08p-4, 0x1.04p-9},
+  {0x1.318p-1, 0x1.ca4p-2},
+  {0x1.45p-8, 0x1.248p-10},
+  {0x1.068p+14, 0x1.1ccp+13},
+  {0x1.468p+13, 0x1.e9cp+12},
+  {0x1.aa4p-9, 0x1.74p-9},
+  {0x1.02p+3, 0x1.3e4p+2},
+  {0x1.6bp-11, 0x1.a78p-13},
+  {0x1.158p-5, 0x1.d5p-8},
+  {0x1.0f8p-4, 0x1.974p-5},
+  {0x1.1ep-1, 0x1.728p-3},
+  {0x1.a9p+8, 0x1.7e8p+6},
+  {0x1.86p+13, 0x1.3cp+8},
+  {0x1.c2p+6, 0x1.8ecp+6},
+  {0x1.238p-4, 0x1.b54p-5},
+  {0x1.3bp-13, 0x1.734p-14},
+  {0x1.aep-3, 0x1.f2p-7},
+  {0x1.2cp+7, 0x1.36p+3},
+  {0x1.70cp+13, 0x1.65p+13},
+  {0x1.ed8p-9, 0x1.bdp-12},
+  {0x1.188p+15, 0x1.248p+13},
+  {0x1.5ep+15, 0x1.77p+12},
+  {0x1.bd8p-8, 0x1.6f8p-10},
+  {0x1.e78p+8, 0x1.32p+4},
+  {0x1.c38p-8, 0x1.784p-9},
+  {0x1.008p+5, 0x1.658p+3},
+  {0x1.6f8p-9, 0x1.0d8p-11},
+  {0x1.9c8p-13, 0x1.2e8p-15},
+  {0x1.4f8p+15, 0x1.f74p+14},
+  {0x1.158p+11, 0x1.d5p+8},
+  {0x1.9c8p-3, 0x1.57cp-4},
+  {0x1.0c8p+15, 0x1.bf8p+13},
+  {0x1.5a8p-3, 0x1.518p-5},
+  {0x1.e84p+7, 0x1.d1p+7},
+  {0x1.abp-12, 0x1.f74p-13},
+  {0x1.1ep+13, 0x1.728p+11},
+  {0x1.8cp-3, 0x1.e14p-4},
+  {0x1.6d8p+7, 0x1.5a8p+5},
+  {0x1.e9p-13, 0x1.6ecp-13},
+  {0x1.7e8p+10, 0x1.188p+8},
+  {0x1.17p+10, 0x1.f7cp+9},
+  {0x1.dfp-8, 0x1.674p-8},
+  {0x1.d34p+5, 0x1.bdp+5},
+  {0x1.018p-2, 0x1.824p-3},
+  {0x1.6f8p-13, 0x1.c7p-16},
+  {0x1.a58p+11, 0x1.5f4p+10},
+  {0x1.e3cp+3, 0x1.02p+3},
+  {0x1.cbp-5, 0x1.584p-5},
+  {0x1.5a8p+9, 0x1.3c4p+8},
+  {0x1.528p-8, 0x1.fbcp-9},
+  {0x1.1b8p+9, 0x1.a94p+8},
+  {0x1.788p-7, 0x1.39cp-8},
+  {0x1.f2cp+4, 0x1.56p+3},
+  {0x1.f2cp+2, 0x1.fap+1},
+  {0x1.218p+5, 0x1.b24p+4},
+  {0x1.fbp+4, 0x1.7c4p+4},
+  {0x1.45p-3, 0x1.20cp-4},
+  {0x1.368p+12, 0x1.338p+10},
+  {0x1.1ep-3, 0x1.20cp-4},
+  {0x1.c5p+6, 0x1.084p+5},
+  {0x1.afp+12, 0x1.434p+12},
+  {0x1.bfp-3, 0x1.4f4p-3},
+  {0x1.d4p+8, 0x1.d88p+7},
+  {0x1.e3cp-5, 0x1.02p-5},
+  {0x1.adp+9, 0x1.6dcp+9},
+  {0x1.b8p+3, 0x1.f44p+2},
+  {0x1.ddcp+7, 0x1.c7p+7},
+  {0x1.248p-10, 0x1.e78p-12},
+  {0x1.efp+13, 0x1.9c8p+12},
+  {0x1.a2p+5, 0x1.89cp+5},
+  {0x1.298p+8, 0x1.be4p+7},
+  {0x1.0f8p-12, 0x1.974p-13},
+  {0x1.dcp-8, 0x1.cep-12},
+  {0x1.c38p+0, 0x1.784p-1},
+  {0x1.038p+11, 0x1.854p+10},
+  {0x1.b3cp+11, 0x1.9fp+11},
+  {0x1.5fp-4, 0x1.c2p-8},
+  {0x1.c7p+2, 0x1.554p+2},
+  {0x1.c38p-12, 0x1.178p-14},
+  {0x1.f14p+2, 0x1.cep+2},
+  {0x1.3e8p-13, 0x1.ddcp-14},
+  {0x1.188p+12, 0x1.248p+10},
+  {0x1.b04p-13, 0x1.1dp-13},
+  {0x1.c5cp-7, 0x1.8cp-7},
+  {0x1.22p-11, 0x1.7b8p-13},
+  {0x1.338p+0, 0x1.868p-2},
+  {0x1.f44p+2, 0x1.d4p+0},
+  {0x1.0d8p+1, 0x1.944p+0},
+  {0x1.a88p-9, 0x1.61cp-10},
+  {0x1.178p+14, 0x1.254p+13},
+  {0x1.2cp+15, 0x1.36p+11},
+  {0x1.7ap-1, 0x1.95p-4},
+  {0x1.adp+14, 0x1.f48p+12},
+  {0x1.c2p-2, 0x1.964p-2},
+  {0x1.a1p-6, 0x1.38cp-6},
+  {0x1.518p+6, 0x1.efp+3},
+  {0x1.32p+1, 0x1.fa4p+0},
+  {0x1.ccp-11, 0x1.0bcp-11},
+  {0x1.96p+14, 0x1.b3p+11},
+  {0x1.308p+14, 0x1.fb8p+12},
+  {0x1.02p-11, 0x1.3e4p-12},
+  {0x1.be4p+1, 0x1.76p+1},
+  {0x1.c08p-3, 0x1.b9p-6},
+  {0x1.e3p-13, 0x1.928p-14},
+  {0x1.218p-2, 0x1.b24p-3},
+  {0x1.22p+5, 0x1.1acp+4},
+  {0x1.bfp+14, 0x1.4f4p+14},
+  {0x1.78p-5, 0x1.284p-6},
+  {0x1.ae8p-4, 0x1.4cp-9},
+  {0x1.c2p-12, 0x1.be4p-12},
+  {0x1.458p+6, 0x1.e84p+5},
+  {0x1.efp-14, 0x1.fb8p-15},
+  {0x1.cd4p-1, 0x1.1fp-1},
+  {0x1.71p+12, 0x1.81p+9},
+  {0x1.cbp+4, 0x1.584p+4},
+  {0x1.3d8p-1, 0x1.dc4p-2},
+  {0x1.c2p+9, 0x1.68cp+9},
+  {0x1.128p+1, 0x1.c98p-1},
+  {0x1.068p-4, 0x1.7e8p-6},
+  {0x1.178p-6, 0x1.a34p-7},
+  {0x1.c38p+7, 0x1.784p+6},
+  {0x1.158p+6, 0x1.ce8p+4},
+  {0x1.e78p-12, 0x1.658p-14},
+  {0x1.83p-7, 0x1.7d4p-7},
+  {0x1.658p-3, 0x1.7b8p-5},
+  {0x1.bd8p+3, 0x1.734p+2},
+  {0x1.408p+3, 0x1.e0cp+2},
+  {0x1.d1p+5, 0x1.0f4p+4},
+  {0x1.848p-9, 0x1.43cp-10},
+  {0x1.ccp-8, 0x1.554p-9},
+  {0x1.45p+4, 0x1.248p+2},
+  {0x1.a5p-10, 0x1.3bcp-10},
+  {0x1.65p-4, 0x1.a08p-6},
+  {0x1.408p-9, 0x1.e0cp-10},
+  {0x1.c38p+3, 0x1.54p-2},
+  {0x1.518p+12, 0x1.194p+11},
+  {0x1.c2p-11, 0x1.8ecp-11},
+  {0x1.d88p-1, 0x1.8fp-4},
+  {0x1.268p+6, 0x1.b9cp+5},
+  {0x1.74p+11, 0x1.4fcp+10},
+  {0x1.188p-2, 0x1.0cp-7},
+  {0x1.c7p+8, 0x1.998p+6},
+  {0x1.3fp+13, 0x1.11cp+12},
+  {0x1.608p-5, 0x1.474p-6},
+  {0x1.4ap+4, 0x1.ffp+1},
+  {0x1.3bp-13, 0x1.a34p-14},
+  {0x1.5f8p+3, 0x1.2cp-2},
+  {0x1.58p-5, 0x1.9c8p-7},
+  {0x1.f2cp+14, 0x1.56p+13},
+  {0x1.988p+3, 0x1.95p+0},
+  {0x1.f2cp+13, 0x1.fap+12},
+  {0x1.e14p+6, 0x1.a4p+6},
+  {0x1.efp-7, 0x1.64p-12},
+  {0x1.fbp-8, 0x1.7c4p-8},
+  {0x1.95p-4, 0x1.6c8p-6},
+  {0x1.68p+9, 0x1.f48p+7},
+  {0x1.668p+5, 0x1.2acp+4},
+  {0x1.608p+15, 0x1.028p+13},
+  {0x1.13p+8, 0x1.47cp+7},
+  {0x1.518p-13, 0x1.c38p-15},
+  {0x1.5a8p+0, 0x1.adp-3},
+  {0x1.f5p-10, 0x1.77cp-10},
+  {0x1.05p-5, 0x1.c7p-8},
+  {0x1.b3cp-10, 0x1.9fp-10},
+  {0x1.488p-13, 0x1.11cp-14},
+  {0x1.e3p+2, 0x1.a2cp+2},
+  {0x1.8ecp+2, 0x1.5cp+2},
+  {0x1.abp-4, 0x1.404p-4},
+  {0x1.398p-11, 0x1.71p-14},
+  {0x1.c2p-7, 0x1.a9p-10},
+  {0x1.d8cp+1, 0x1.59p+1},
+  {0x1.848p-2, 0x1.8bp-5},
+  {0x1.0ep-5, 0x1.b38p-7},
+  {0x1.d9p+14, 0x1.554p+14},
+  {0x1.aep+2, 0x1.a34p+1},
+  {0x1.d64p+14, 0x1.81p+14},
+  {0x1.8a8p+0, 0x1.48cp-1},
+  {0x1.308p+3, 0x1.79p+0},
+  {0x1.6f8p+3, 0x1.774p+2},
+  {0x1.428p+1, 0x1.d9p-2},
+  {0x1.108p-5, 0x1.98cp-6},
+  {0x1.b9p+11, 0x1.014p+10},
+  {0x1.de8p+5, 0x1.0bcp+4},
+  {0x1.b6cp-1, 0x1.b5p-1},
+  {0x1.cep-6, 0x1.75cp-6},
+  {0x1.0f8p+9, 0x1.974p+8},
+  {0x1.ee8p+10, 0x1.0bp+7},
+  {0x1.2cp+15, 0x1.14cp+14},
+  {0x1.5f8p-11, 0x1.2cp-16},
+  {0x1.f7cp-13, 0x1.efp-13},
+  {0x1.2fp+12, 0x1.618p+10},
+  {0x1.0e8p-3, 0x1.95cp-4},
+  {0x1.a1p+11, 0x1.38cp+11},
+  {0x1.86p-11, 0x1.7c4p-12},
+  {0x1.028p+7, 0x1.83cp+6},
+  {0x1.f74p+5, 0x1.49p+5},
+  {0x1.65p+3, 0x1.c64p+2},
+  {0x1.8fp-9, 0x1.7bcp-10},
+  {0x1.f14p-5, 0x1.52p-5},
+  {0x1.e48p+15, 0x1.214p+14},
+  {0x1.fbp+5, 0x1.7c4p+5},
+  {0x1.1fp-3, 0x1.c08p-5},
+  {0x1.248p+6, 0x1.838p+4},
+  {0x1.65p+10, 0x1.fb8p+8},
+  {0x1.4c8p-5, 0x1.b6p-9},
+  {0x1.a88p+11, 0x1.61cp+10},
+  {0x1.458p+5, 0x1.93p+2},
+  {0x1.d18p+1, 0x1.de8p-1},
+  {0x1.6dp+1, 0x1.488p-1},
+  {0x1.698p-5, 0x1.2d4p-6},
+  {0x1.3f8p-2, 0x1.df4p-3},
+  {0x1.b3p-7, 0x1.878p-9},
+  {0x1.1b8p-5, 0x1.02cp-6},
+  {0x1.518p-3, 0x1.1dp-6},
+  {0x1.198p+2, 0x1.a64p+1},
+  {0x1.098p-7, 0x1.ba8p-9},
+  {0x1.b3p-8, 0x1.4acp-9},
+  {0x1.a28p+4, 0x1.e8cp+3},
+  {0x1.41p+13, 0x1.768p+11},
+  {0x1.cfp-14, 0x1.5b4p-14},
+  {0x1.31p-4, 0x1.128p-6},
+  {0x1.83p-2, 0x1.148p-4},
+  {0x1.498p+15, 0x1.ee4p+14},
+  {0x1.b6cp-3, 0x1.5ep-3},
+  {0x1.2a8p+7, 0x1.bfcp+6},
+  {0x1.268p-5, 0x1.e3p-8},
+  {0x1.7cp-4, 0x1.068p-6},
+  {0x1.8fp-4, 0x1.7bcp-5},
+  {0x1.95p-9, 0x1.ed8p-11},
+  {0x1.29p+2, 0x1.2dcp+1},
+  {0x1.dbp-9, 0x1.998p-10},
+  {0x1.b1p-10, 0x1.44cp-10},
+  {0x1.57p-9, 0x1.944p-10},
+  {0x1.138p-9, 0x1.9d4p-10},
+  {0x1.d64p-8, 0x1.11p-8},
+  {0x1.928p+6, 0x1.bd8p+4},
+  {0x1.2a8p+7, 0x1.f18p+5},
+  {0x1.95p-6, 0x1.ed8p-8},
+  {0x1.998p-9, 0x1.75cp-10},
+  {0x1.57p+9, 0x1.944p+8},
+  {0x1.998p+11, 0x1.fbp+8},
+  {0x1.e3p-7, 0x1.a2cp-7},
+  {0x1.efp+8, 0x1.bd8p+6},
+  {0x1.d74p+1, 0x1.a7p+1},
+  {0x1.f68p-13, 0x1.708p-15},
+  {0x1.398p-8, 0x1.93cp-9},
+  {0x1.3d8p+1, 0x1.dc4p+0},
+  {0x1.efp-1, 0x1.64p-6},
+  {0x1.02p-3, 0x1.3e4p-4},
+  {0x1.a4p+5, 0x1.ce8p+3},
+  {0x1.83p-5, 0x1.148p-7},
+  {0x1.adp-9, 0x1.93cp-10},
+  {0x1.7e8p-13, 0x1.188p-15},
+  {0x1.248p+1, 0x1.838p-1},
+  {0x1.adp-10, 0x1.f48p-12},
+  {0x1.ecp-2, 0x1.378p-4},
+  {0x1.998p-13, 0x1.fbp-16},
+  {0x1.dbp-7, 0x1.86p-11},
+  {0x1.e3cp-10, 0x1.02p-10},
+  {0x1.bfp+2, 0x1.4f4p+2},
+  {0x1.adp+7, 0x1.f48p+5},
+  {0x1.6f8p+10, 0x1.0d8p+8},
+  {0x1.f4p+13, 0x1.e78p+12},
+  {0x1.0d8p-9, 0x1.944p-10},
+  {0x1.3bp+8, 0x1.1cp+3},
+  {0x1.c98p+10, 0x1.4f8p+8},
+  {0x1.9fp-10, 0x1.758p-12},
+  {0x1.9c8p-4, 0x1.2e8p-6},
+  {0x1.d9p-1, 0x1.5cp-6},
+  {0x1.ddp+11, 0x1.8d8p+10},
+  {0x1.308p-1, 0x1.79p-4},
+  {0x1.9bp+12, 0x1.344p+12},
+  {0x1.d7p+12, 0x1.12cp+11},
+  {0x1.e7p-13, 0x1.6d4p-13},
+  {0x1.518p+11, 0x1.bacp+10},
+  {0x1.fep+11, 0x1.cbp+9},
+  {0x1.e3cp+2, 0x1.02p+2},
+  {0x1.098p+0, 0x1.8e4p-1},
+  {0x1.538p-10, 0x1.fd4p-11},
+  {0x1.858p-3, 0x1.dap-7},
+  {0x1.71p-12, 0x1.ae8p-14},
+  {0x1.e3p-9, 0x1.34cp-9},
+  {0x1.ab8p+13, 0x1.69p+10},
+  {0x1.1b8p+3, 0x1.a94p+2},
+  {0x1.f14p-12, 0x1.52p-12},
+  {0x1.988p+13, 0x1.95p+10},
+  {0x1.998p+7, 0x1.e6p+3},
+  {0x1.f68p+8, 0x1.708p+6},
+  {0x1.81p+15, 0x1.e84p+14},
+  {0x1.ae8p+8, 0x1.0a8p+6},
+  {0x1.29p+10, 0x1.2dcp+9},
+  {0x1.118p-8, 0x1.9a4p-9},
+  {0x1.59p+1, 0x1.368p-1},
+  {0x1.efp+1, 0x1.9c8p+0},
+  {0x1.d7p-9, 0x1.614p-9},
+  {0x1.4b8p-5, 0x1.6dp-8},
+  {0x1.4c8p-12, 0x1.9c8p-14},
+  {0x1.f8p-13, 0x1.158p-14},
+  {0x1.41p+10, 0x1.768p+8},
+  {0x1.29p-3, 0x1.2dcp-4},
+  {0x1.c08p-8, 0x1.75cp-9},
+  {0x1.538p-7, 0x1.fd4p-8},
+  {0x1.518p-4, 0x1.fa4p-5},
+  {0x1.2dp+4, 0x1.62cp+3},
+  {0x1.49p-9, 0x1.83cp-10},
+  {0x1.6bp+3, 0x1.fap-1},
+  {0x1.efp+3, 0x1.734p+3},
+  {0x1.038p-5, 0x1.b08p-7},
+  {0x1.f3p-3, 0x1.764p-3},
+  {0x1.65p-7, 0x1.93cp-8},
+  {0x1.73p+13, 0x1.fa4p+12},
+  {0x1.a1p+5, 0x1.38cp+5},
+  {0x1.9bp-10, 0x1.344p-10},
+  {0x1.068p+13, 0x1.1ccp+12},
+  {0x1.d38p+15, 0x1.65p+12},
+  {0x1.0ep+15, 0x1.074p+14},
+  {0x1.b2p+7, 0x1.d1p+4},
+  {0x1.0a8p+4, 0x1.f68p+2},
+  {0x1.fccp+2, 0x1.bcp+2},
+  {0x1.998p-10, 0x1.e6p-14},
+  {0x1.83p+10, 0x1.148p+8},
+  {0x1.488p+5, 0x1.eccp+4},
+  {0x1.e3p-3, 0x1.a2cp-3},
+  {0x1.1fp-4, 0x1.524p-5},
+  {0x1.428p-3, 0x1.da8p-5},
+  {0x1.34p-6, 0x1.d88p-8},
+  {0x1.a28p+8, 0x1.e8cp+7},
+  {0x1.348p+6, 0x1.cecp+5},
+  {0x1.65p+14, 0x1.734p+13},
+  {0x1.59p-5, 0x1.928p-7},
+  {0x1.068p-11, 0x1.81p-14},
+  {0x1.cep+14, 0x1.2b4p+13},
+  {0x1.188p+0, 0x1.248p-2},
+  {0x1.8bp+9, 0x1.638p+7},
+  {0x1.4ap+12, 0x1.bacp+11},
+  {0x1.e78p+12, 0x1.e98p+10},
+  {0x1.3bp+3, 0x1.1b8p+1},
+  {0x1.268p-9, 0x1.e3p-12},
+  {0x1.28p-13, 0x1.59p-16},
+  {0x1.efp+12, 0x1.814p+12},
+  {0x1.7e8p+2, 0x1.3ecp+1},
+  {0x1.e1p+15, 0x1.4dcp+14},
+  {0x1.1e8p+14, 0x1.dd8p+12},
+  {0x1.83p-4, 0x1.7d4p-4},
+  {0x1.65p+9, 0x1.734p+8},
+  {0x1.72p+11, 0x1.68cp+10},
+  {0x1.848p-4, 0x1.43cp-5},
+  {0x1.908p+13, 0x1.4dcp+12},
+  {0x1.f7cp-9, 0x1.98p-9},
+  {0x1.efp+8, 0x1.814p+8},
+  {0x1.cf8p+3, 0x1.824p+2},
+  {0x1.7cp-12, 0x1.068p-14},
+  {0x1.adp-11, 0x1.f48p-13},
+  {0x1.a4p+9, 0x1.b2p+5},
+  {0x1.178p+12, 0x1.254p+11},
+  {0x1.d1p+11, 0x1.a4cp+10},
+  {0x1.7b8p+10, 0x1.e8cp+9},
+  {0x1.b3p+13, 0x1.464p+13},
+  {0x1.a28p+8, 0x1.5ccp+7},
+  {0x1.288p+7, 0x1.bccp+6},
+  {0x1.bfp+3, 0x1.4f4p+3},
+  {0x1.d1p+13, 0x1.a4cp+12},
+  {0x1.038p+1, 0x1.b08p-1},
+  {0x1.bd8p+7, 0x1.c8cp+6},
+  {0x1.bdp+10, 0x1.4dcp+10},
+  {0x1.bap-12, 0x1.be4p-13},
+  {0x1.efp+4, 0x1.59p+1},
+  {0x1.3bp+9, 0x1.1b8p+7},
+  {0x1.c7p-10, 0x1.944p-11},
+  {0x1.86p+14, 0x1.3cp+9},
+  {0x1.26p-11, 0x1.3bp-14},
+  {0x1.a9p+2, 0x1.158p+0},
+  {0x1.3bp-5, 0x1.734p-6},
+  {0x1.6cp+13, 0x1.308p+11},
+  {0x1.83p-6, 0x1.7d4p-6},
+  {0x1.008p-13, 0x1.658p-15},
+  {0x1.b18p+3, 0x1.694p+2},
+  {0x1.11p+10, 0x1.41cp+9},
+  {0x1.9dp-8, 0x1.e6cp-9},
+  {0x1.2dp+3, 0x1.0a4p+2},
+  {0x1.5f8p-7, 0x1.2cp-12},
+  {0x1.248p-7, 0x1.368p-9},
+  {0x1.d7cp+6, 0x1.95p+6},
+  {0x1.fep-12, 0x1.4dp-14},
+  {0x1.158p-5, 0x1.a04p-6},
+  {0x1.378p-10, 0x1.d34p-11},
+  {0x1.e7p+10, 0x1.6d4p+10},
+  {0x1.208p-9, 0x1.b0cp-10},
+  {0x1.c7p-14, 0x1.554p-14},
+  {0x1.38p-13, 0x1.f1p-16},
+  {0x1.278p+1, 0x1.ec8p-1},
+  {0x1.7e8p+13, 0x1.5ep+9},
+  {0x1.95p+7, 0x1.6c8p+5},
+  {0x1.c2p+11, 0x1.b6cp+10},
+  {0x1.fdp-7, 0x1.7dcp-7},
+  {0x1.428p+4, 0x1.d9p+1},
+  {0x1.ddcp-3, 0x1.dcp-4},
+  {0x1.adp+13, 0x1.93cp+12},
+  {0x1.e14p-5, 0x1.c2p-6},
+  {0x1.608p+5, 0x1.028p+3},
+  {0x1.518p+11, 0x1.1dp+8},
+  {0x1.f2cp-12, 0x1.dbp-12},
+  {0x1.ab8p+9, 0x1.644p+8},
+  {0x1.e6p+7, 0x1.cbp+4},
+  {0x1.e84p+9, 0x1.d1p+9},
+  {0x1.458p-10, 0x1.93p-13},
+  {0x1.068p-10, 0x1.81p-13},
+  {0x1.59p+0, 0x1.e14p-1},
+  {0x1.2e8p+15, 0x1.c5cp+14},
+  {0x1.a1p+9, 0x1.38cp+9},
+  {0x1.d64p-11, 0x1.11p-11},
+  {0x1.488p+0, 0x1.11cp-1},
+  {0x1.7ap-13, 0x1.65p-16},
+  {0x1.96p-4, 0x1.b3p-7},
+  {0x1.8ecp+11, 0x1.5cp+11},
+  {0x1.3fp-11, 0x1.11cp-12},
+  {0x1.3bp-13, 0x1.ecp-18},
+  {0x1.ce8p-8, 0x1.1acp-9},
+  {0x1.a28p-13, 0x1.ddcp-14},
+  {0x1.488p+4, 0x1.11cp+3},
+  {0x1.228p+9, 0x1.b3cp+8},
+  {0x1.298p+15, 0x1.14p+10},
+  {0x1.ccp+10, 0x1.0bcp+10},
+  {0x1.efp+6, 0x1.814p+6},
+  {0x1.8d8p+3, 0x1.4b4p+2},
+  {0x1.0ep+1, 0x1.6a4p+0},
+  {0x1.8f8p+0, 0x1.074p-1},
+  {0x1.368p+12, 0x1.02cp+11},
+  {0x1.59p-4, 0x1.83p-7},
+  {0x1.efp+7, 0x1.848p+6},
+  {0x1.998p-5, 0x1.554p-6},
+  {0x1.65p+0, 0x1.c64p-1},
+  {0x1.29p+8, 0x1.9ep+4},
+  {0x1.9ap+3, 0x1.404p+3},
+  {0x1.368p-10, 0x1.338p-12},
+  {0x1.e3p+0, 0x1.a2cp+0},
+  {0x1.8fp+6, 0x1.d64p+5},
+  {0x1.5a8p+12, 0x1.3c4p+11},
+  {0x1.e48p-7, 0x1.214p-8},
+  {0x1.378p-5, 0x1.d34p-6},
+  {0x1.ebp-8, 0x1.704p-8},
+  {0x1.5a8p+5, 0x1.634p+4},
+  {0x1.e3p-9, 0x1.928p-10},
+  {0x1.258p+7, 0x1.b84p+6},
+  {0x1.5a8p-4, 0x1.20cp-5},
+  {0x1.08p-9, 0x1.04p-14},
+  {0x1.188p-3, 0x1.0cp-8},
+  {0x1.fep-10, 0x1.4dp-12},
+  {0x1.4c8p-6, 0x1.f2cp-7},
+  {0x1.aep-11, 0x1.a34p-12},
+  {0x1.3a8p-7, 0x1.d7cp-8},
+  {0x1.fd4p-3, 0x1.e5p-3},
+  {0x1.068p+14, 0x1.22p+10},
+  {0x1.71p+7, 0x1.81p+4},
+  {0x1.1c8p-12, 0x1.aacp-13},
+  {0x1.c5p+7, 0x1.084p+6},
+  {0x1.dcp-4, 0x1.89cp-4},
+  {0x1.7e8p-7, 0x1.b28p-9},
+  {0x1.fep+7, 0x1.4dp+5},
+  {0x1.068p+9, 0x1.7e8p+7},
+  {0x1.59p+7, 0x1.e14p+6},
+  {0x1.7ap+12, 0x1.65p+9},
+  {0x1.158p-11, 0x1.ce8p-13},
+  {0x1.adp+8, 0x1.6dcp+8},
+  {0x1.008p+2, 0x1.80cp+1},
+  {0x1.4d8p+9, 0x1.3ecp+8},
+  {0x1.4b8p+6, 0x1.144p+5},
+  {0x1.59p-6, 0x1.e14p-7},
+  {0x1.1b8p-9, 0x1.8fcp-10},
+  {0x1.b9p+14, 0x1.4acp+14},
+  {0x1.378p-13, 0x1.d34p-14},
+  {0x1.f2cp+1, 0x1.dcp-1},
+  {0x1.be8p-6, 0x1.7e8p-8},
+  {0x1.878p+11, 0x1.464p+10},
+  {0x1.c9p+12, 0x1.56cp+12},
+  {0x1.3e8p-12, 0x1.7ap-16},
+  {0x1.7e8p-10, 0x1.b28p-12},
+  {0x1.28p+10, 0x1.59p+7},
+  {0x1.c2p-11, 0x1.be4p-11},
+  {0x1.d4p+1, 0x1.314p+1},
+  {0x1.ab8p-12, 0x1.69p-15},
+  {0x1.e9p+5, 0x1.978p+4},
+  {0x1.3f8p-4, 0x1.df4p-5},
+  {0x1.c2p+6, 0x1.26p+2},
+  {0x1.5a8p-7, 0x1.3c4p-8},
+  {0x1.f2cp-3, 0x1.fap-4},
+  {0x1.aa4p-11, 0x1.74p-11},
+  {0x1.89cp-10, 0x1.4ap-10},
+  {0x1.928p+7, 0x1.a04p+6},
+  {0x1.878p-11, 0x1.464p-12},
+  {0x1.0b8p+14, 0x1.914p+13},
+  {0x1.f2cp-1, 0x1.fap-2},
+  {0x1.fep+7, 0x1.6a8p+6},
+  {0x1.c08p+10, 0x1.298p+8},
+  {0x1.2a8p+13, 0x1.bfcp+12},
+  {0x1.d5p+10, 0x1.5fcp+10},
+  {0x1.96p+3, 0x1.b3p+0},
+  {0x1.f44p-7, 0x1.d4p-9},
+  {0x1.efp+3, 0x1.814p+3},
+  {0x1.bfp-5, 0x1.4f4p-5},
+  {0x1.4c8p+0, 0x1.9c8p-2},
+  {0x1.de8p+11, 0x1.0bcp+10},
+  {0x1.59p-8, 0x1.83p-11},
+  {0x1.028p-5, 0x1.83cp-6},
+  {0x1.f8p-10, 0x1.158p-11},
+  {0x1.b3p+11, 0x1.464p+11},
+  {0x1.1b8p+7, 0x1.a94p+6},
+  {0x1.13p+14, 0x1.47cp+13},
+  {0x1.e78p+11, 0x1.658p+9},
+  {0x1.098p+15, 0x1.ba8p+13},
+  {0x1.878p+13, 0x1.464p+12},
+  {0x1.4dp+1, 0x1.24p-4},
+  {0x1.ab8p+12, 0x1.644p+11},
+  {0x1.968p-3, 0x1.52cp-4},
+  {0x1.de8p+10, 0x1.0bcp+9},
+  {0x1.adp-10, 0x1.a04p-10},
+  {0x1.7cp-3, 0x1.734p-3},
+  {0x1.b3p-9, 0x1.878p-11},
+  {0x1.d18p+9, 0x1.20cp+8},
+  {0x1.1b8p-12, 0x1.5fp-15},
+  {0x1.81p+12, 0x1.c5cp+11},
+  {0x1.13p-8, 0x1.47cp-9},
+  {0x1.7e8p+5, 0x1.188p+3},
+  {0x1.d9p-5, 0x1.554p-5},
+  {0x1.d5p+0, 0x1.5fcp+0},
+  {0x1.f7cp-4, 0x1.efp-4},
+  {0x1.cdp+1, 0x1.59cp+1},
+  {0x1.abp+0, 0x1.f74p-1},
+  {0x1.81p-5, 0x1.638p-7},
+  {0x1.d8cp+2, 0x1.59p+2},
+  {0x1.cep+7, 0x1.75cp+7},
+  {0x1.9dp+12, 0x1.35cp+12},
+  {0x1.22p-6, 0x1.7b8p-8},
+  {0x1.83p+0, 0x1.7d4p+0},
+  {0x1.3e8p-11, 0x1.ddcp-12},
+  {0x1.a28p+1, 0x1.5ccp+0},
+  {0x1.848p-5, 0x1.43cp-6},
+  {0x1.f7cp-7, 0x1.efp-7},
+  {0x1.d7p+13, 0x1.12cp+12},
+  {0x1.d3p+5, 0x1.5e4p+5},
+  {0x1.efp-9, 0x1.848p-10},
+  {0x1.848p+2, 0x1.43cp+1},
+  {0x1.e3p+0, 0x1.928p-1},
+  {0x1.098p-8, 0x1.ba8p-10},
+  {0x1.d34p-7, 0x1.bdp-7},
+  {0x1.3f8p-12, 0x1.0a4p-13},
+  {0x1.e3p+7, 0x1.19cp+6},
+  {0x1.02p+8, 0x1.3e4p+7},
+  {0x1.d9p-9, 0x1.62cp-9},
+  {0x1.a28p-7, 0x1.ddcp-8},
+  {0x1.c98p+9, 0x1.7d4p+8},
+  {0x1.1dp+5, 0x1.008p+3},
+  {0x1.9ap+0, 0x1.8fcp-1},
+  {0x1.9ep-11, 0x1.1ap-15},
+  {0x1.81p-4, 0x1.5a8p-6},
+  {0x1.218p+13, 0x1.e28p+11},
+  {0x1.608p+6, 0x1.474p+5},
+  {0x1.49p+2, 0x1.83cp+1},
+  {0x1.258p+1, 0x1.b84p+0},
+  {0x1.e14p-8, 0x1.b9p-8},
+  {0x1.7f4p-9, 0x1.6dp-9},
+  {0x1.76p-9, 0x1.e48p-11},
+  {0x1.56p-9, 0x1.428p-11},
+  {0x1.57p-12, 0x1.944p-13},
+  {0x1.ae8p-9, 0x1.4cp-14},
+  {0x1.4dp-10, 0x1.24p-15},
+  {0x1.668p+3, 0x1.2acp+2},
+  {0x1.238p-11, 0x1.b54p-12},
+  {0x1.9dp-11, 0x1.35cp-11},
+  {0x1.368p-12, 0x1.d1cp-13},
+  {0x1.c5p+10, 0x1.53cp+10},
+  {0x1.3bp-7, 0x1.1cp-12},
+  {0x1.338p+2, 0x1.cd4p+1},
+  {0x1.e3p+13, 0x1.6a4p+13},
+  {0x1.cep-2, 0x1.efp-5},
+  {0x1.848p+9, 0x1.43cp+8},
+  {0x1.998p+14, 0x1.75cp+13},
+  {0x1.9f8p-2, 0x1.5a4p-3},
+  {0x1.c3p+5, 0x1.2b4p+5},
+  {0x1.8fp-2, 0x1.7bcp-3},
+  {0x1.3c8p-3, 0x1.07cp-4},
+  {0x1.83p+6, 0x1.7d4p+6},
+  {0x1.81p+10, 0x1.c5cp+9},
+  {0x1.05p+3, 0x1.c7p+0},
+  {0x1.098p+14, 0x1.ba8p+12},
+  {0x1.28p-11, 0x1.59p-14},
+  {0x1.e84p+2, 0x1.d1p+2},
+  {0x1.9c8p+14, 0x1.a7p+11},
+  {0x1.4e8p+6, 0x1.f5cp+5},
+  {0x1.358p-12, 0x1.d04p-13},
+  {0x1.158p+9, 0x1.d5p+6},
+  {0x1.e78p-6, 0x1.02cp-7},
+  {0x1.a1p-9, 0x1.e68p-11},
+  {0x1.458p+9, 0x1.e84p+8},
+  {0x1.ae8p+9, 0x1.4cp+4},
+  {0x1.518p-9, 0x1.194p-10},
+  {0x1.79p-12, 0x1.d1cp-13},
+  {0x1.068p-3, 0x1.22p-7},
+  {0x1.b7p-1, 0x1.494p-1},
+  {0x1.fep-5, 0x1.6a8p-6},
+  {0x1.b5p+6, 0x1.47cp+6},
+  {0x1.de8p-8, 0x1.0bcp-9},
+  {0x1.6d8p+4, 0x1.5a8p+2},
+  {0x1.878p+14, 0x1.83cp+13},
+  {0x1.ba8p-8, 0x1.70cp-9},
+  {0x1.bcp-3, 0x1.d38p-5},
+  {0x1.a28p+6, 0x1.e8cp+5},
+  {0x1.cbp+12, 0x1.464p+11},
+  {0x1.13p-11, 0x1.5ccp-12},
+  {0x1.1dp+6, 0x1.4c8p+4},
+  {0x1.74cp+7, 0x1.63p+7},
+  {0x1.eap-13, 0x1.068p-15},
+  {0x1.068p+5, 0x1.aa4p+4},
+  {0x1.8bp-9, 0x1.638p-11},
+  {0x1.e3p-5, 0x1.f38p-6},
+  {0x1.abcp+10, 0x1.4ap+10},
+  {0x1.9c8p-6, 0x1.3bp-9},
+  {0x1.c28p+6, 0x1.9d4p+5},
+  {0x1.57p+12, 0x1.944p+11},
+  {0x1.34p+1, 0x1.d88p-1},
+  {0x1.0ap-13, 0x1.1dp-16},
+  {0x1.3e8p+9, 0x1.ddcp+8},
+  {0x1.e3p+1, 0x1.19cp+0},
+  {0x1.c2p-7, 0x1.8ecp-7},
+  {0x1.2dp+12, 0x1.62cp+11},
+  {0x1.028p+12, 0x1.af4p+11},
+  {0x1.e9p+1, 0x1.1d4p+0},
+  {0x1.578p-6, 0x1.1e4p-7},
+  {0x1.c28p-13, 0x1.9d4p-14},
+  {0x1.188p+7, 0x1.d38p+5},
+  {0x1.908p+10, 0x1.4dcp+9},
+  {0x1.338p-3, 0x1.cd4p-4},
+  {0x1.1d8p+0, 0x1.ac4p-1},
+  {0x1.a1p-8, 0x1.e68p-10},
+  {0x1.f2cp-9, 0x1.a2p-9},
+  {0x1.218p+7, 0x1.e28p+5},
+  {0x1.c2p-10, 0x1.964p-10},
+  {0x1.f4p+7, 0x1.e78p+6},
+  {0x1.cc8p+12, 0x1.7fcp+11},
+  {0x1.9dp-3, 0x1.e6cp-4},
+  {0x1.4c8p-4, 0x1.e48p-6},
+  {0x1.f8p-5, 0x1.324p-5},
+  {0x1.cep-2, 0x1.2b4p-3},
+  {0x1.838p+12, 0x1.80cp+11},
+  {0x1.45p-2, 0x1.248p-4},
+  {0x1.ccp-14, 0x1.0bcp-14},
+  {0x1.4ap+8, 0x1.ffp+5},
+  {0x1.8d8p-5, 0x1.238p-7},
+  {0x1.648p+6, 0x1.20cp+5},
+  {0x1.b48p-13, 0x1.6bcp-14},
+  {0x1.0ep+4, 0x1.fep+0},
+  {0x1.458p-7, 0x1.e84p-8},
+  {0x1.2b8p+15, 0x1.c14p+14},
+  {0x1.4b8p+15, 0x1.e14p+14},
+  {0x1.3a8p+0, 0x1.aap-4},
+  {0x1.77p-7, 0x1.b58p-9},
+  {0x1.83p+14, 0x1.c38p+12},
+  {0x1.2a8p-12, 0x1.bfcp-13},
+  {0x1.ed8p+8, 0x1.bdp+5},
+  {0x1.d58p-10, 0x1.874p-11},
+  {0x1.e78p-7, 0x1.e98p-9},
+  {0x1.a98p+3, 0x1.758p+1},
+  {0x1.038p-10, 0x1.b08p-12},
+  {0x1.4c8p-8, 0x1.c8cp-9},
+  {0x1.5a8p-2, 0x1.634p-3},
+  {0x1.9c8p-11, 0x1.57cp-12},
+  {0x1.6a8p-11, 0x1.9ecp-12},
+  {0x1.70cp+4, 0x1.65p+4},
+  {0x1.a98p+10, 0x1.758p+8},
+  {0x1.d28p+15, 0x1.84cp+14},
+  {0x1.d64p+4, 0x1.11p+4},
+  {0x1.848p+6, 0x1.43cp+5},
+  {0x1.c3p-3, 0x1.fep-7},
+  {0x1.8fp-6, 0x1.5ecp-6},
+  {0x1.ab8p+3, 0x1.69p+0},
+  {0x1.028p-2, 0x1.af4p-3},
+  {0x1.ccp-2, 0x1.0bcp-2},
+  {0x1.c98p-5, 0x1.7d4p-6},
+  {0x1.8fp+1, 0x1.d18p-1},
+  {0x1.be4p+12, 0x1.76p+12},
+  {0x1.a58p-9, 0x1.5f4p-10},
+  {0x1.f2cp+6, 0x1.56p+5},
+  {0x1.86p+6, 0x1.82cp+6},
+  {0x1.458p+7, 0x1.93p+4},
+  {0x1.3bp+0, 0x1.644p-1},
+  {0x1.9bp+6, 0x1.df8p+4},
+  {0x1.b58p+2, 0x1.3ecp+1},
+  {0x1.788p+6, 0x1.39cp+5},
+  {0x1.068p+5, 0x1.b58p+3},
+  {0x1.bcp+9, 0x1.d38p+7},
+  {0x1.e14p-13, 0x1.b9p-13},
+  {0x1.e6p+5, 0x1.b6cp+5},
+  {0x1.cep+13, 0x1.2b4p+12},
+  {0x1.908p+1, 0x1.4dcp+0},
+  {0x1.e5p-8, 0x1.b48p-10},
+  {0x1.d34p+9, 0x1.bdp+9},
+  {0x1.4b8p+3, 0x1.e14p+2},
+  {0x1.3c8p+2, 0x1.dacp+1},
+  {0x1.4dp-5, 0x1.848p-7},
+  {0x1.49p-1, 0x1.644p-2},
+  {0x1.efp+6, 0x1.fb8p+5},
+  {0x1.288p-5, 0x1.bccp-6},
+  {0x1.9c8p+2, 0x1.57cp+1},
+  {0x1.81p-6, 0x1.c5cp-7},
+  {0x1.57p+2, 0x1.944p+1},
+  {0x1.4ap-12, 0x1.ffp-15},
+  {0x1.1dp-1, 0x1.4c8p-3},
+  {0x1.a2p+13, 0x1.89cp+13},
+  {0x1.218p-12, 0x1.b24p-13},
+  {0x1.3f8p-5, 0x1.0a4p-6},
+  {0x1.9ap+15, 0x1.44p+10},
+  {0x1.a9p-11, 0x1.7e8p-13},
+  {0x1.23p-3, 0x1.538p-5},
+  {0x1.59p-10, 0x1.928p-12},
+  {0x1.89cp-5, 0x1.77p-5},
+  {0x1.c2p-4, 0x1.8ecp-4},
+  {0x1.218p-7, 0x1.b24p-8},
+  {0x1.ed8p-2, 0x1.bdp-5},
+  {0x1.fep-8, 0x1.298p-9},
+  {0x1.e78p-2, 0x1.32p-6},
+  {0x1.3f8p-2, 0x1.0a4p-3},
+  {0x1.bacp-5, 0x1.65p-5},
+  {0x1.308p-5, 0x1.e3cp-6},
+  {0x1.d1p-12, 0x1.a4cp-13},
+  {0x1.368p+1, 0x1.02cp+0},
+  {0x1.2d8p-11, 0x1.f68p-13},
+  {0x1.9ecp+2, 0x1.8bp+2},
+  {0x1.338p+8, 0x1.cd4p+7},
+  {0x1.8bp-7, 0x1.638p-9},
+  {0x1.d88p+5, 0x1.5a8p+3},
+  {0x1.4ap-6, 0x1.ffp-9},
+  {0x1.e9p+7, 0x1.978p+6},
+  {0x1.128p+1, 0x1.9bcp+0},
+  {0x1.56p+8, 0x1.43p+5},
+  {0x1.298p+11, 0x1.4acp+10},
+  {0x1.368p-10, 0x1.5acp-11},
+  {0x1.3a8p-12, 0x1.aap-16},
+  {0x1.77p-1, 0x1.b58p-3},
+  {0x1.6f8p-10, 0x1.774p-11},
+  {0x1.928p+13, 0x1.a04p+12},
+  {0x1.f2cp+6, 0x1.dbp+6},
+  {0x1.5a8p+7, 0x1.adp+4},
+  {0x1.b2p-7, 0x1.d1p-10},
+  {0x1.e3cp+9, 0x1.02p+9},
+  {0x1.35p-8, 0x1.688p-10},
+  {0x1.9dp-4, 0x1.35cp-4},
+  {0x1.a4p+14, 0x1.ce8p+12},
+  {0x1.d18p+11, 0x1.de8p+9},
+  {0x1.318p+6, 0x1.ca4p+5},
+  {0x1.298p-3, 0x1.be4p-4},
+  {0x1.2cp+0, 0x1.36p-4},
+  {0x1.2dp+9, 0x1.0a4p+8},
+  {0x1.c08p+12, 0x1.b9p+9},
+  {0x1.f7p-1, 0x1.794p-1},
+  {0x1.ce8p-4, 0x1.1acp-5},
+  {0x1.76p+15, 0x1.e48p+13},
+  {0x1.31p+2, 0x1.128p+0},
+  {0x1.338p-2, 0x1.868p-4},
+  {0x1.e3cp-10, 0x1.2dp-10},
+  {0x1.e78p-10, 0x1.02cp-11},
+  {0x1.d7p-1, 0x1.12cp-2},
+  {0x1.81p-2, 0x1.5a8p-4},
+  {0x1.ffp-5, 0x1.7f4p-5},
+  {0x1.6f8p-7, 0x1.c7p-10},
+  {0x1.f7cp-11, 0x1.98p-11},
+  {0x1.b3p+12, 0x1.fb8p+10},
+  {0x1.4b8p+12, 0x1.224p+11},
+  {0x1.8d8p-13, 0x1.dd4p-14},
+  {0x1.e14p+0, 0x1.c2p-1},
+  {0x1.248p-2, 0x1.524p-3},
+  {0x1.a3p+12, 0x1.3a4p+12},
+  {0x1.bdp-11, 0x1.4dcp-11},
+  {0x1.418p+0, 0x1.e24p-1},
+  {0x1.fep-9, 0x1.6a8p-10},
+  {0x1.a98p-8, 0x1.758p-10},
+  {0x1.1dp+11, 0x1.0f4p+10},
+  {0x1.5a8p+0, 0x1.20cp-1},
+  {0x1.f2cp-3, 0x1.0ap-3},
+  {0x1.7e8p+15, 0x1.188p+13},
+};
+
+#endif // LLVM_LIBC_TEST_SRC_MATH_HYPOTTEST_HARD_TO_ROUND_H
diff --git a/libc/test/src/math/hypotf16_test.cpp b/libc/test/src/math/hypotf16_test.cpp
index 82d18c38568c9..cdb6c345e9d7b 100644
--- a/libc/test/src/math/hypotf16_test.cpp
+++ b/libc/test/src/math/hypotf16_test.cpp
@@ -7,7 +7,7 @@
 //===----------------------------------------------------------------------===//
 
 #include "HypotTest.h"
-#include "hypotf_hard_to_round.h"
+#include "hypotf16_hard_to_round.h"
 
 #include "src/math/hypotf16.h"
 
@@ -21,7 +21,7 @@ TEST_F(LlvmLibcHypotf16Test, NormalRange) {
   test_normal_range(&LIBC_NAMESPACE::hypotf16);
 }
 
-// TEST_F(LlvmLibcHypotf16Test, TrickyInputs) {
-//   test_input_list(&LIBC_NAMESPACE::hypotf16, N_HARD_TO_ROUND,
-//                   HYPOTF_HARD_TO_ROUND);
-// }
+TEST_F(LlvmLibcHypotf16Test, TrickyInputs) {
+  test_input_list(&LIBC_NAMESPACE::hypotf16, N_HARD_TO_ROUND,
+                  HYPOTF16_HARD_TO_ROUND);
+}
diff --git a/libc/test/src/math/smoke/hypotf16_test.cpp b/libc/test/src/math/smoke/hypotf16_test.cpp
index d56cdc457a134..b48b0930431de 100644
--- a/libc/test/src/math/smoke/hypotf16_test.cpp
+++ b/libc/test/src/math/smoke/hypotf16_test.cpp
@@ -6,30 +6,12 @@
 //
 //===----------------------------------------------------------------------===//
 
-#include "src/errno/libc_errno.h"
+#include "HypotTest.h"
+
 #include "src/math/hypotf16.h"
-#include "test/UnitTest/FPMatcher.h"
-#include "test/UnitTest/Test.h"
 
-using LlvmLibcHypotf16Test = LIBC_NAMESPACE::testing::FPTest<float16>;
+using LlvmLibcHypotf16Test = HypotTestTemplate<float16>;
 
 TEST_F(LlvmLibcHypotf16Test, SpecialNumbers) {
-  LIBC_NAMESPACE::libc_errno = 0;
-  EXPECT_FP_EQ(inf, LIBC_NAMESPACE::hypotf16(inf, aNaN));
-  EXPECT_MATH_ERRNO(0);
-  EXPECT_FP_EQ(inf, LIBC_NAMESPACE::hypotf16(aNaN, neg_inf));
-  EXPECT_MATH_ERRNO(0);
-  EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::hypotf16(aNaN, aNaN));
-  EXPECT_MATH_ERRNO(0);
-  EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::hypotf16(sNaN, zero));
-  EXPECT_MATH_ERRNO(0);
-  EXPECT_FP_EQ(aNaN, LIBC_NAMESPACE::hypotf16(neg_zero, sNaN));
-  EXPECT_MATH_ERRNO(0);
-
-  EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, LIBC_NAMESPACE::hypotf16(inf, sNaN),
-                              FE_INVALID);
-  EXPECT_MATH_ERRNO(0);
-  EXPECT_FP_EQ_WITH_EXCEPTION(aNaN, LIBC_NAMESPACE::hypotf16(sNaN, neg_inf),
-                              FE_INVALID);
-  EXPECT_MATH_ERRNO(0);
+  test_special_numbers(&LIBC_NAMESPACE::hypotf16);
 }

>From 66514de04f61964c7267f82aa42285e9407640b6 Mon Sep 17 00:00:00 2001
From: meltq <alissxlace at proton.me>
Date: Mon, 24 Mar 2025 08:32:24 +0530
Subject: [PATCH 8/9] Formatting changes

---
 libc/src/math/generic/CMakeLists.txt          |    1 +
 libc/src/math/generic/hypotf16.cpp            |    2 +-
 libc/test/src/math/CMakeLists.txt             |    1 -
 .../src/math/exhaustive/hypotf16_test.cpp     |    3 +-
 libc/test/src/math/hypotf16_hard_to_round.h   | 1502 ++++++-----------
 libc/test/src/math/smoke/CMakeLists.txt       |    1 -
 6 files changed, 504 insertions(+), 1006 deletions(-)

diff --git a/libc/src/math/generic/CMakeLists.txt b/libc/src/math/generic/CMakeLists.txt
index 7ec2e0bf9e865..e980d103a1d22 100644
--- a/libc/src/math/generic/CMakeLists.txt
+++ b/libc/src/math/generic/CMakeLists.txt
@@ -3114,6 +3114,7 @@ add_entrypoint_object(
   DEPENDS
     libc.src.__support.FPUtil.fenv_impl
     libc.src.__support.FPUtil.fp_bits
+    libc.src.__support.FPUtil.cast
     libc.src.__support.FPUtil.multiply_add
     libc.src.__support.FPUtil.sqrt
     libc.src.__support.macros.optimization
diff --git a/libc/src/math/generic/hypotf16.cpp b/libc/src/math/generic/hypotf16.cpp
index 75323c5cf5aa8..b7255bc4420db 100644
--- a/libc/src/math/generic/hypotf16.cpp
+++ b/libc/src/math/generic/hypotf16.cpp
@@ -1,4 +1,4 @@
-//===-- Implementation of hypotf function ---------------------------------===//
+//===-- Implementation of hypotf16 function -------------------------------===//
 //
 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 // See https://llvm.org/LICENSE.txt for license information.
diff --git a/libc/test/src/math/CMakeLists.txt b/libc/test/src/math/CMakeLists.txt
index 79ae9377afd28..6daaacac99345 100644
--- a/libc/test/src/math/CMakeLists.txt
+++ b/libc/test/src/math/CMakeLists.txt
@@ -1710,7 +1710,6 @@ add_fp_unittest(
     hypotf16_test.cpp
   DEPENDS
     libc.src.math.hypotf16
-    libc.src.__support.FPUtil.fp_bits
 )
 
 add_fp_unittest(
diff --git a/libc/test/src/math/exhaustive/hypotf16_test.cpp b/libc/test/src/math/exhaustive/hypotf16_test.cpp
index 4defb11d02ee6..3ba752bd81f24 100644
--- a/libc/test/src/math/exhaustive/hypotf16_test.cpp
+++ b/libc/test/src/math/exhaustive/hypotf16_test.cpp
@@ -24,8 +24,7 @@ struct Hypotf16Checker : public virtual LIBC_NAMESPACE::testing::Test {
   using FPBits = LIBC_NAMESPACE::fputil::FPBits<float16>;
   using StorageType = typename FPBits::StorageType;
 
-  uint64_t check(uint16_t start, uint16_t stop, mpfr::RoundingMode rounding)
-  {
+  uint64_t check(uint16_t start, uint16_t stop, mpfr::RoundingMode rounding) {
     mpfr::ForceRoundingMode r(rounding);
     if (!r.success)
       return true;
diff --git a/libc/test/src/math/hypotf16_hard_to_round.h b/libc/test/src/math/hypotf16_hard_to_round.h
index 00e3066b00e61..15e0dc13adbf3 100644
--- a/libc/test/src/math/hypotf16_hard_to_round.h
+++ b/libc/test/src/math/hypotf16_hard_to_round.h
@@ -13,1010 +13,510 @@
 
 namespace mpfr = LIBC_NAMESPACE::testing::mpfr;
 
-// 1000 cases where the precise result is between two consecutive 
+// 1000 cases where the precise result is between two consecutive
 // Float16 numbers
 constexpr int N_HARD_TO_ROUND = 1000;
 constexpr mpfr::BinaryInput<float16> HYPOTF16_HARD_TO_ROUND[N_HARD_TO_ROUND] = {
-  {0x1.3b8p-5, 0x1.d94p-6},
-  {0x1.068p-7, 0x1.1ccp-8},
-  {0x1.1dp-3, 0x1.4c8p-5},
-  {0x1.c38p-2, 0x1.784p-3},
-  {0x1.e3cp-3, 0x1.02p-3},
-  {0x1.04p-8, 0x1.b3p-11},
-  {0x1.e3p+5, 0x1.928p+4},
-  {0x1.8bp+4, 0x1.638p+2},
-  {0x1.4fp+1, 0x1.2d8p-1},
-  {0x1.458p+3, 0x1.0f4p+2},
-  {0x1.c08p+1, 0x1.75cp+0},
-  {0x1.1fp-13, 0x1.524p-14},
-  {0x1.36p-3, 0x1.2e4p-4},
-  {0x1.b58p-9, 0x1.3ecp-10},
-  {0x1.d74p+6, 0x1.a7p+6},
-  {0x1.dc4p-6, 0x1.fcp-7},
-  {0x1.6f8p-3, 0x1.324p-4},
-  {0x1.86p+13, 0x1.7c4p+12},
-  {0x1.9c8p+4, 0x1.57cp+3},
-  {0x1.81p+7, 0x1.638p+5},
-  {0x1.488p+9, 0x1.11cp+8},
-  {0x1.0a8p+12, 0x1.f68p+10},
-  {0x1.008p-8, 0x1.bcp-13},
-  {0x1.818p-8, 0x1.414p-9},
-  {0x1.efp+1, 0x1.814p+1},
-  {0x1.b6cp+6, 0x1.11p+6},
-  {0x1.458p+10, 0x1.93p+7},
-  {0x1.058p+13, 0x1.884p+12},
-  {0x1.ae8p+7, 0x1.0a8p+5},
-  {0x1.9c8p+7, 0x1.60cp+6},
-  {0x1.2cp+2, 0x1.14cp+1},
-  {0x1.9bp+13, 0x1.df8p+11},
-  {0x1.b2p+14, 0x1.d1p+11},
-  {0x1.f8p-10, 0x1.d1cp-10},
-  {0x1.22p-13, 0x1.7b8p-15},
-  {0x1.cep-13, 0x1.104p-13},
-  {0x1.2e8p+5, 0x1.cep+1},
-  {0x1.edp-10, 0x1.71cp-10},
-  {0x1.6f8p+12, 0x1.96p+8},
-  {0x1.e78p+7, 0x1.32p+3},
-  {0x1.2dp-1, 0x1.62cp-2},
-  {0x1.ab8p-4, 0x1.72p-8},
-  {0x1.ab8p+7, 0x1.398p+5},
-  {0x1.97p-10, 0x1.1b8p-12},
-  {0x1.eap+5, 0x1.068p+3},
-  {0x1.fdp+11, 0x1.7dcp+11},
-  {0x1.fbp-14, 0x1.b04p-14},
-  {0x1.3bp+14, 0x1.6f8p+12},
-  {0x1.4c8p+5, 0x1.c8cp+4},
-  {0x1.848p-3, 0x1.e1p-6},
-  {0x1.72p+4, 0x1.68cp+3},
-  {0x1.2a8p-10, 0x1.bfcp-11},
-  {0x1.d8cp+9, 0x1.59p+9},
-  {0x1.e3p+12, 0x1.a2cp+12},
-  {0x1.81p-8, 0x1.5a8p-10},
-  {0x1.b48p+3, 0x1.6bcp+2},
-  {0x1.14p+8, 0x1.bbcp+7},
-  {0x1.72p-1, 0x1.cep-5},
-  {0x1.068p-3, 0x1.aa4p-4},
-  {0x1.7b8p+5, 0x1.e8cp+4},
-  {0x1.14p-9, 0x1.998p-11},
-  {0x1.878p+1, 0x1.83cp+0},
-  {0x1.068p+5, 0x1.41cp+4},
-  {0x1.0bp+14, 0x1.378p+12},
-  {0x1.2dp-2, 0x1.0a4p-3},
-  {0x1.ed8p+10, 0x1.bdp+7},
-  {0x1.f8p+5, 0x1.158p+4},
-  {0x1.44p-2, 0x1.62cp-3},
-  {0x1.a4p+11, 0x1.ce8p+9},
-  {0x1.fbp+5, 0x1.45p+2},
-  {0x1.1dp+4, 0x1.4c8p+2},
-  {0x1.2a8p-1, 0x1.f18p-3},
-  {0x1.2dp-11, 0x1.0a4p-12},
-  {0x1.c2p-8, 0x1.b6cp-9},
-  {0x1.adp+12, 0x1.41cp+12},
-  {0x1.9fp+4, 0x1.758p+2},
-  {0x1.42p-7, 0x1.59p-10},
-  {0x1.198p-8, 0x1.a64p-9},
-  {0x1.f2cp-2, 0x1.56p-3},
-  {0x1.e14p-2, 0x1.b9p-2},
-  {0x1.158p+7, 0x1.d5p+4},
-  {0x1.1f8p+7, 0x1.af4p+6},
-  {0x1.d88p-6, 0x1.8fp-9},
-  {0x1.38p-8, 0x1.f1p-11},
-  {0x1.3bp-8, 0x1.1cp-13},
-  {0x1.4a8p-4, 0x1.efcp-5},
-  {0x1.efp-2, 0x1.848p-3},
-  {0x1.cep-1, 0x1.75cp-1},
-  {0x1.098p+12, 0x1.ba8p+10},
-  {0x1.1fp+13, 0x1.c08p+11},
-  {0x1.d9p-12, 0x1.5cp-17},
-  {0x1.89cp+8, 0x1.77p+8},
-  {0x1.158p+0, 0x1.97p-3},
-  {0x1.d7p+1, 0x1.614p+1},
-  {0x1.b3p+5, 0x1.878p+3},
-  {0x1.028p-4, 0x1.af4p-5},
-  {0x1.93p-6, 0x1.b3cp-7},
-  {0x1.4d8p+13, 0x1.f44p+12},
-  {0x1.d4cp+5, 0x1.f4p+4},
-  {0x1.efp-11, 0x1.59p-14},
-  {0x1.b6cp+11, 0x1.11p+11},
-  {0x1.328p+11, 0x1.cbcp+10},
-  {0x1.bap+0, 0x1.be4p-1},
-  {0x1.318p+11, 0x1.ca4p+10},
-  {0x1.74cp-13, 0x1.63p-13},
-  {0x1.3bp+11, 0x1.1b8p+9},
-  {0x1.278p-5, 0x1.bb4p-6},
-  {0x1.1f8p+7, 0x1.74cp+6},
-  {0x1.848p-12, 0x1.8bp-15},
-  {0x1.28p-5, 0x1.59p-8},
-  {0x1.9ep+11, 0x1.87p+8},
-  {0x1.d38p-10, 0x1.e78p-12},
-  {0x1.abp-8, 0x1.f74p-9},
-  {0x1.5fp+12, 0x1.c2p+8},
-  {0x1.dbp-13, 0x1.998p-14},
-  {0x1.0e8p-5, 0x1.95cp-6},
-  {0x1.98p+6, 0x1.8a4p+5},
-  {0x1.998p+0, 0x1.fbp-3},
-  {0x1.188p+2, 0x1.d38p+0},
-  {0x1.efp-5, 0x1.814p-5},
-  {0x1.dbp-10, 0x1.464p-10},
-  {0x1.1a8p-10, 0x1.a7cp-11},
-  {0x1.068p-12, 0x1.41cp-13},
-  {0x1.ba8p-4, 0x1.448p-6},
-  {0x1.658p+10, 0x1.89cp+9},
-  {0x1.9c8p+2, 0x1.2e8p+0},
-  {0x1.d88p-12, 0x1.89cp-13},
-  {0x1.508p+4, 0x1.f8cp+3},
-  {0x1.c2p-8, 0x1.be4p-8},
-  {0x1.d4cp+9, 0x1.f4p+8},
-  {0x1.198p+5, 0x1.a64p+4},
-  {0x1.9ap-5, 0x1.44p-10},
-  {0x1.d5p+5, 0x1.5fcp+5},
-  {0x1.dbp-3, 0x1.ab8p-5},
-  {0x1.efp-14, 0x1.3ecp-14},
-  {0x1.05p+0, 0x1.c7p-3},
-  {0x1.c7p+15, 0x1.998p+13},
-  {0x1.658p+7, 0x1.7b8p+5},
-  {0x1.c98p+11, 0x1.7d4p+10},
-  {0x1.c2p+2, 0x1.a9p-1},
-  {0x1.fdp-9, 0x1.7dcp-9},
-  {0x1.3bp-6, 0x1.6f8p-8},
-  {0x1.d18p+3, 0x1.de8p+1},
-  {0x1.2cp+1, 0x1.36p-3},
-  {0x1.458p-4, 0x1.e84p-5},
-  {0x1.3f8p+8, 0x1.df4p+7},
-  {0x1.c2p+1, 0x1.26p-3},
-  {0x1.e5p+9, 0x1.6bcp+9},
-  {0x1.e7p+4, 0x1.6d4p+4},
-  {0x1.318p-12, 0x1.7f4p-13},
-  {0x1.cbp-2, 0x1.0bcp-3},
-  {0x1.068p-3, 0x1.41cp-4},
-  {0x1.55p+10, 0x1.e78p+8},
-  {0x1.c5cp+14, 0x1.8cp+14},
-  {0x1.a28p-1, 0x1.ddcp-2},
-  {0x1.848p-7, 0x1.43cp-8},
-  {0x1.9ecp-6, 0x1.8bp-6},
-  {0x1.3bp-2, 0x1.364p-3},
-  {0x1.c2p+13, 0x1.26p+9},
-  {0x1.1b8p-13, 0x1.a94p-14},
-  {0x1.dbp+11, 0x1.ab8p+9},
-  {0x1.f3p-13, 0x1.764p-13},
-  {0x1.32p+7, 0x1.ae8p+5},
-  {0x1.2dp-4, 0x1.0a4p-5},
-  {0x1.d8cp+7, 0x1.59p+7},
-  {0x1.05p+1, 0x1.308p-1},
-  {0x1.d64p+7, 0x1.11p+7},
-  {0x1.6f8p+7, 0x1.324p+6},
-  {0x1.d88p+8, 0x1.248p+6},
-  {0x1.008p+5, 0x1.ab8p+3},
-  {0x1.248p+4, 0x1.f2cp+3},
-  {0x1.e5p-11, 0x1.b48p-13},
-  {0x1.c2p+7, 0x1.964p+7},
-  {0x1.fa4p+0, 0x1.3bp+0},
-  {0x1.058p-12, 0x1.884p-13},
-  {0x1.f2p-13, 0x1.228p-14},
-  {0x1.c5cp-14, 0x1.8cp-14},
-  {0x1.cep+4, 0x1.75cp+4},
-  {0x1.71p+15, 0x1.81p+12},
-  {0x1.3bp+12, 0x1.644p+11},
-  {0x1.188p-8, 0x1.0cp-13},
-  {0x1.2fp+9, 0x1.618p+7},
-  {0x1.088p+11, 0x1.8ccp+10},
-  {0x1.c3p+9, 0x1.524p+9},
-  {0x1.f2cp+8, 0x1.44p+8},
-  {0x1.11p-7, 0x1.34cp-8},
-  {0x1.efp+9, 0x1.848p+8},
-  {0x1.fa4p+11, 0x1.0ep+11},
-  {0x1.3e8p-7, 0x1.ddcp-8},
-  {0x1.288p-13, 0x1.bccp-14},
-  {0x1.518p-8, 0x1.fa4p-9},
-  {0x1.c7p-3, 0x1.944p-4},
-  {0x1.338p+3, 0x1.c3p+0},
-  {0x1.1b8p+14, 0x1.d88p+12},
-  {0x1.d7p-5, 0x1.614p-5},
-  {0x1.9ep+6, 0x1.87p+3},
-  {0x1.e9p+13, 0x1.6ecp+13},
-  {0x1.9dp-3, 0x1.35cp-3},
-  {0x1.318p+13, 0x1.ca4p+12},
-  {0x1.11p+1, 0x1.cd4p+0},
-  {0x1.26p-10, 0x1.3bp-13},
-  {0x1.adp+14, 0x1.13p+11},
-  {0x1.9bcp-7, 0x1.76p-7},
-  {0x1.e6p-10, 0x1.cbp-13},
-  {0x1.dbp-2, 0x1.86p-6},
-  {0x1.f2cp+3, 0x1.dbp+3},
-  {0x1.2a8p+3, 0x1.bfcp+2},
-  {0x1.f2cp+14, 0x1.0ap+14},
-  {0x1.5cp+13, 0x1.b6cp+12},
-  {0x1.3d8p+3, 0x1.dc4p+2},
-  {0x1.0b8p-10, 0x1.914p-11},
-  {0x1.5cp+3, 0x1.6dcp+2},
-  {0x1.ba8p+0, 0x1.70cp-1},
-  {0x1.45p-2, 0x1.20cp-3},
-  {0x1.ab8p+5, 0x1.72p+1},
-  {0x1.dbp-13, 0x1.86p-17},
-  {0x1.aep-9, 0x1.6a4p-9},
-  {0x1.298p-13, 0x1.14p-18},
-  {0x1.0f8p-10, 0x1.974p-11},
-  {0x1.ddp+1, 0x1.65cp+1},
-  {0x1.d88p-6, 0x1.5a8p-8},
-  {0x1.08p-4, 0x1.04p-9},
-  {0x1.318p-1, 0x1.ca4p-2},
-  {0x1.45p-8, 0x1.248p-10},
-  {0x1.068p+14, 0x1.1ccp+13},
-  {0x1.468p+13, 0x1.e9cp+12},
-  {0x1.aa4p-9, 0x1.74p-9},
-  {0x1.02p+3, 0x1.3e4p+2},
-  {0x1.6bp-11, 0x1.a78p-13},
-  {0x1.158p-5, 0x1.d5p-8},
-  {0x1.0f8p-4, 0x1.974p-5},
-  {0x1.1ep-1, 0x1.728p-3},
-  {0x1.a9p+8, 0x1.7e8p+6},
-  {0x1.86p+13, 0x1.3cp+8},
-  {0x1.c2p+6, 0x1.8ecp+6},
-  {0x1.238p-4, 0x1.b54p-5},
-  {0x1.3bp-13, 0x1.734p-14},
-  {0x1.aep-3, 0x1.f2p-7},
-  {0x1.2cp+7, 0x1.36p+3},
-  {0x1.70cp+13, 0x1.65p+13},
-  {0x1.ed8p-9, 0x1.bdp-12},
-  {0x1.188p+15, 0x1.248p+13},
-  {0x1.5ep+15, 0x1.77p+12},
-  {0x1.bd8p-8, 0x1.6f8p-10},
-  {0x1.e78p+8, 0x1.32p+4},
-  {0x1.c38p-8, 0x1.784p-9},
-  {0x1.008p+5, 0x1.658p+3},
-  {0x1.6f8p-9, 0x1.0d8p-11},
-  {0x1.9c8p-13, 0x1.2e8p-15},
-  {0x1.4f8p+15, 0x1.f74p+14},
-  {0x1.158p+11, 0x1.d5p+8},
-  {0x1.9c8p-3, 0x1.57cp-4},
-  {0x1.0c8p+15, 0x1.bf8p+13},
-  {0x1.5a8p-3, 0x1.518p-5},
-  {0x1.e84p+7, 0x1.d1p+7},
-  {0x1.abp-12, 0x1.f74p-13},
-  {0x1.1ep+13, 0x1.728p+11},
-  {0x1.8cp-3, 0x1.e14p-4},
-  {0x1.6d8p+7, 0x1.5a8p+5},
-  {0x1.e9p-13, 0x1.6ecp-13},
-  {0x1.7e8p+10, 0x1.188p+8},
-  {0x1.17p+10, 0x1.f7cp+9},
-  {0x1.dfp-8, 0x1.674p-8},
-  {0x1.d34p+5, 0x1.bdp+5},
-  {0x1.018p-2, 0x1.824p-3},
-  {0x1.6f8p-13, 0x1.c7p-16},
-  {0x1.a58p+11, 0x1.5f4p+10},
-  {0x1.e3cp+3, 0x1.02p+3},
-  {0x1.cbp-5, 0x1.584p-5},
-  {0x1.5a8p+9, 0x1.3c4p+8},
-  {0x1.528p-8, 0x1.fbcp-9},
-  {0x1.1b8p+9, 0x1.a94p+8},
-  {0x1.788p-7, 0x1.39cp-8},
-  {0x1.f2cp+4, 0x1.56p+3},
-  {0x1.f2cp+2, 0x1.fap+1},
-  {0x1.218p+5, 0x1.b24p+4},
-  {0x1.fbp+4, 0x1.7c4p+4},
-  {0x1.45p-3, 0x1.20cp-4},
-  {0x1.368p+12, 0x1.338p+10},
-  {0x1.1ep-3, 0x1.20cp-4},
-  {0x1.c5p+6, 0x1.084p+5},
-  {0x1.afp+12, 0x1.434p+12},
-  {0x1.bfp-3, 0x1.4f4p-3},
-  {0x1.d4p+8, 0x1.d88p+7},
-  {0x1.e3cp-5, 0x1.02p-5},
-  {0x1.adp+9, 0x1.6dcp+9},
-  {0x1.b8p+3, 0x1.f44p+2},
-  {0x1.ddcp+7, 0x1.c7p+7},
-  {0x1.248p-10, 0x1.e78p-12},
-  {0x1.efp+13, 0x1.9c8p+12},
-  {0x1.a2p+5, 0x1.89cp+5},
-  {0x1.298p+8, 0x1.be4p+7},
-  {0x1.0f8p-12, 0x1.974p-13},
-  {0x1.dcp-8, 0x1.cep-12},
-  {0x1.c38p+0, 0x1.784p-1},
-  {0x1.038p+11, 0x1.854p+10},
-  {0x1.b3cp+11, 0x1.9fp+11},
-  {0x1.5fp-4, 0x1.c2p-8},
-  {0x1.c7p+2, 0x1.554p+2},
-  {0x1.c38p-12, 0x1.178p-14},
-  {0x1.f14p+2, 0x1.cep+2},
-  {0x1.3e8p-13, 0x1.ddcp-14},
-  {0x1.188p+12, 0x1.248p+10},
-  {0x1.b04p-13, 0x1.1dp-13},
-  {0x1.c5cp-7, 0x1.8cp-7},
-  {0x1.22p-11, 0x1.7b8p-13},
-  {0x1.338p+0, 0x1.868p-2},
-  {0x1.f44p+2, 0x1.d4p+0},
-  {0x1.0d8p+1, 0x1.944p+0},
-  {0x1.a88p-9, 0x1.61cp-10},
-  {0x1.178p+14, 0x1.254p+13},
-  {0x1.2cp+15, 0x1.36p+11},
-  {0x1.7ap-1, 0x1.95p-4},
-  {0x1.adp+14, 0x1.f48p+12},
-  {0x1.c2p-2, 0x1.964p-2},
-  {0x1.a1p-6, 0x1.38cp-6},
-  {0x1.518p+6, 0x1.efp+3},
-  {0x1.32p+1, 0x1.fa4p+0},
-  {0x1.ccp-11, 0x1.0bcp-11},
-  {0x1.96p+14, 0x1.b3p+11},
-  {0x1.308p+14, 0x1.fb8p+12},
-  {0x1.02p-11, 0x1.3e4p-12},
-  {0x1.be4p+1, 0x1.76p+1},
-  {0x1.c08p-3, 0x1.b9p-6},
-  {0x1.e3p-13, 0x1.928p-14},
-  {0x1.218p-2, 0x1.b24p-3},
-  {0x1.22p+5, 0x1.1acp+4},
-  {0x1.bfp+14, 0x1.4f4p+14},
-  {0x1.78p-5, 0x1.284p-6},
-  {0x1.ae8p-4, 0x1.4cp-9},
-  {0x1.c2p-12, 0x1.be4p-12},
-  {0x1.458p+6, 0x1.e84p+5},
-  {0x1.efp-14, 0x1.fb8p-15},
-  {0x1.cd4p-1, 0x1.1fp-1},
-  {0x1.71p+12, 0x1.81p+9},
-  {0x1.cbp+4, 0x1.584p+4},
-  {0x1.3d8p-1, 0x1.dc4p-2},
-  {0x1.c2p+9, 0x1.68cp+9},
-  {0x1.128p+1, 0x1.c98p-1},
-  {0x1.068p-4, 0x1.7e8p-6},
-  {0x1.178p-6, 0x1.a34p-7},
-  {0x1.c38p+7, 0x1.784p+6},
-  {0x1.158p+6, 0x1.ce8p+4},
-  {0x1.e78p-12, 0x1.658p-14},
-  {0x1.83p-7, 0x1.7d4p-7},
-  {0x1.658p-3, 0x1.7b8p-5},
-  {0x1.bd8p+3, 0x1.734p+2},
-  {0x1.408p+3, 0x1.e0cp+2},
-  {0x1.d1p+5, 0x1.0f4p+4},
-  {0x1.848p-9, 0x1.43cp-10},
-  {0x1.ccp-8, 0x1.554p-9},
-  {0x1.45p+4, 0x1.248p+2},
-  {0x1.a5p-10, 0x1.3bcp-10},
-  {0x1.65p-4, 0x1.a08p-6},
-  {0x1.408p-9, 0x1.e0cp-10},
-  {0x1.c38p+3, 0x1.54p-2},
-  {0x1.518p+12, 0x1.194p+11},
-  {0x1.c2p-11, 0x1.8ecp-11},
-  {0x1.d88p-1, 0x1.8fp-4},
-  {0x1.268p+6, 0x1.b9cp+5},
-  {0x1.74p+11, 0x1.4fcp+10},
-  {0x1.188p-2, 0x1.0cp-7},
-  {0x1.c7p+8, 0x1.998p+6},
-  {0x1.3fp+13, 0x1.11cp+12},
-  {0x1.608p-5, 0x1.474p-6},
-  {0x1.4ap+4, 0x1.ffp+1},
-  {0x1.3bp-13, 0x1.a34p-14},
-  {0x1.5f8p+3, 0x1.2cp-2},
-  {0x1.58p-5, 0x1.9c8p-7},
-  {0x1.f2cp+14, 0x1.56p+13},
-  {0x1.988p+3, 0x1.95p+0},
-  {0x1.f2cp+13, 0x1.fap+12},
-  {0x1.e14p+6, 0x1.a4p+6},
-  {0x1.efp-7, 0x1.64p-12},
-  {0x1.fbp-8, 0x1.7c4p-8},
-  {0x1.95p-4, 0x1.6c8p-6},
-  {0x1.68p+9, 0x1.f48p+7},
-  {0x1.668p+5, 0x1.2acp+4},
-  {0x1.608p+15, 0x1.028p+13},
-  {0x1.13p+8, 0x1.47cp+7},
-  {0x1.518p-13, 0x1.c38p-15},
-  {0x1.5a8p+0, 0x1.adp-3},
-  {0x1.f5p-10, 0x1.77cp-10},
-  {0x1.05p-5, 0x1.c7p-8},
-  {0x1.b3cp-10, 0x1.9fp-10},
-  {0x1.488p-13, 0x1.11cp-14},
-  {0x1.e3p+2, 0x1.a2cp+2},
-  {0x1.8ecp+2, 0x1.5cp+2},
-  {0x1.abp-4, 0x1.404p-4},
-  {0x1.398p-11, 0x1.71p-14},
-  {0x1.c2p-7, 0x1.a9p-10},
-  {0x1.d8cp+1, 0x1.59p+1},
-  {0x1.848p-2, 0x1.8bp-5},
-  {0x1.0ep-5, 0x1.b38p-7},
-  {0x1.d9p+14, 0x1.554p+14},
-  {0x1.aep+2, 0x1.a34p+1},
-  {0x1.d64p+14, 0x1.81p+14},
-  {0x1.8a8p+0, 0x1.48cp-1},
-  {0x1.308p+3, 0x1.79p+0},
-  {0x1.6f8p+3, 0x1.774p+2},
-  {0x1.428p+1, 0x1.d9p-2},
-  {0x1.108p-5, 0x1.98cp-6},
-  {0x1.b9p+11, 0x1.014p+10},
-  {0x1.de8p+5, 0x1.0bcp+4},
-  {0x1.b6cp-1, 0x1.b5p-1},
-  {0x1.cep-6, 0x1.75cp-6},
-  {0x1.0f8p+9, 0x1.974p+8},
-  {0x1.ee8p+10, 0x1.0bp+7},
-  {0x1.2cp+15, 0x1.14cp+14},
-  {0x1.5f8p-11, 0x1.2cp-16},
-  {0x1.f7cp-13, 0x1.efp-13},
-  {0x1.2fp+12, 0x1.618p+10},
-  {0x1.0e8p-3, 0x1.95cp-4},
-  {0x1.a1p+11, 0x1.38cp+11},
-  {0x1.86p-11, 0x1.7c4p-12},
-  {0x1.028p+7, 0x1.83cp+6},
-  {0x1.f74p+5, 0x1.49p+5},
-  {0x1.65p+3, 0x1.c64p+2},
-  {0x1.8fp-9, 0x1.7bcp-10},
-  {0x1.f14p-5, 0x1.52p-5},
-  {0x1.e48p+15, 0x1.214p+14},
-  {0x1.fbp+5, 0x1.7c4p+5},
-  {0x1.1fp-3, 0x1.c08p-5},
-  {0x1.248p+6, 0x1.838p+4},
-  {0x1.65p+10, 0x1.fb8p+8},
-  {0x1.4c8p-5, 0x1.b6p-9},
-  {0x1.a88p+11, 0x1.61cp+10},
-  {0x1.458p+5, 0x1.93p+2},
-  {0x1.d18p+1, 0x1.de8p-1},
-  {0x1.6dp+1, 0x1.488p-1},
-  {0x1.698p-5, 0x1.2d4p-6},
-  {0x1.3f8p-2, 0x1.df4p-3},
-  {0x1.b3p-7, 0x1.878p-9},
-  {0x1.1b8p-5, 0x1.02cp-6},
-  {0x1.518p-3, 0x1.1dp-6},
-  {0x1.198p+2, 0x1.a64p+1},
-  {0x1.098p-7, 0x1.ba8p-9},
-  {0x1.b3p-8, 0x1.4acp-9},
-  {0x1.a28p+4, 0x1.e8cp+3},
-  {0x1.41p+13, 0x1.768p+11},
-  {0x1.cfp-14, 0x1.5b4p-14},
-  {0x1.31p-4, 0x1.128p-6},
-  {0x1.83p-2, 0x1.148p-4},
-  {0x1.498p+15, 0x1.ee4p+14},
-  {0x1.b6cp-3, 0x1.5ep-3},
-  {0x1.2a8p+7, 0x1.bfcp+6},
-  {0x1.268p-5, 0x1.e3p-8},
-  {0x1.7cp-4, 0x1.068p-6},
-  {0x1.8fp-4, 0x1.7bcp-5},
-  {0x1.95p-9, 0x1.ed8p-11},
-  {0x1.29p+2, 0x1.2dcp+1},
-  {0x1.dbp-9, 0x1.998p-10},
-  {0x1.b1p-10, 0x1.44cp-10},
-  {0x1.57p-9, 0x1.944p-10},
-  {0x1.138p-9, 0x1.9d4p-10},
-  {0x1.d64p-8, 0x1.11p-8},
-  {0x1.928p+6, 0x1.bd8p+4},
-  {0x1.2a8p+7, 0x1.f18p+5},
-  {0x1.95p-6, 0x1.ed8p-8},
-  {0x1.998p-9, 0x1.75cp-10},
-  {0x1.57p+9, 0x1.944p+8},
-  {0x1.998p+11, 0x1.fbp+8},
-  {0x1.e3p-7, 0x1.a2cp-7},
-  {0x1.efp+8, 0x1.bd8p+6},
-  {0x1.d74p+1, 0x1.a7p+1},
-  {0x1.f68p-13, 0x1.708p-15},
-  {0x1.398p-8, 0x1.93cp-9},
-  {0x1.3d8p+1, 0x1.dc4p+0},
-  {0x1.efp-1, 0x1.64p-6},
-  {0x1.02p-3, 0x1.3e4p-4},
-  {0x1.a4p+5, 0x1.ce8p+3},
-  {0x1.83p-5, 0x1.148p-7},
-  {0x1.adp-9, 0x1.93cp-10},
-  {0x1.7e8p-13, 0x1.188p-15},
-  {0x1.248p+1, 0x1.838p-1},
-  {0x1.adp-10, 0x1.f48p-12},
-  {0x1.ecp-2, 0x1.378p-4},
-  {0x1.998p-13, 0x1.fbp-16},
-  {0x1.dbp-7, 0x1.86p-11},
-  {0x1.e3cp-10, 0x1.02p-10},
-  {0x1.bfp+2, 0x1.4f4p+2},
-  {0x1.adp+7, 0x1.f48p+5},
-  {0x1.6f8p+10, 0x1.0d8p+8},
-  {0x1.f4p+13, 0x1.e78p+12},
-  {0x1.0d8p-9, 0x1.944p-10},
-  {0x1.3bp+8, 0x1.1cp+3},
-  {0x1.c98p+10, 0x1.4f8p+8},
-  {0x1.9fp-10, 0x1.758p-12},
-  {0x1.9c8p-4, 0x1.2e8p-6},
-  {0x1.d9p-1, 0x1.5cp-6},
-  {0x1.ddp+11, 0x1.8d8p+10},
-  {0x1.308p-1, 0x1.79p-4},
-  {0x1.9bp+12, 0x1.344p+12},
-  {0x1.d7p+12, 0x1.12cp+11},
-  {0x1.e7p-13, 0x1.6d4p-13},
-  {0x1.518p+11, 0x1.bacp+10},
-  {0x1.fep+11, 0x1.cbp+9},
-  {0x1.e3cp+2, 0x1.02p+2},
-  {0x1.098p+0, 0x1.8e4p-1},
-  {0x1.538p-10, 0x1.fd4p-11},
-  {0x1.858p-3, 0x1.dap-7},
-  {0x1.71p-12, 0x1.ae8p-14},
-  {0x1.e3p-9, 0x1.34cp-9},
-  {0x1.ab8p+13, 0x1.69p+10},
-  {0x1.1b8p+3, 0x1.a94p+2},
-  {0x1.f14p-12, 0x1.52p-12},
-  {0x1.988p+13, 0x1.95p+10},
-  {0x1.998p+7, 0x1.e6p+3},
-  {0x1.f68p+8, 0x1.708p+6},
-  {0x1.81p+15, 0x1.e84p+14},
-  {0x1.ae8p+8, 0x1.0a8p+6},
-  {0x1.29p+10, 0x1.2dcp+9},
-  {0x1.118p-8, 0x1.9a4p-9},
-  {0x1.59p+1, 0x1.368p-1},
-  {0x1.efp+1, 0x1.9c8p+0},
-  {0x1.d7p-9, 0x1.614p-9},
-  {0x1.4b8p-5, 0x1.6dp-8},
-  {0x1.4c8p-12, 0x1.9c8p-14},
-  {0x1.f8p-13, 0x1.158p-14},
-  {0x1.41p+10, 0x1.768p+8},
-  {0x1.29p-3, 0x1.2dcp-4},
-  {0x1.c08p-8, 0x1.75cp-9},
-  {0x1.538p-7, 0x1.fd4p-8},
-  {0x1.518p-4, 0x1.fa4p-5},
-  {0x1.2dp+4, 0x1.62cp+3},
-  {0x1.49p-9, 0x1.83cp-10},
-  {0x1.6bp+3, 0x1.fap-1},
-  {0x1.efp+3, 0x1.734p+3},
-  {0x1.038p-5, 0x1.b08p-7},
-  {0x1.f3p-3, 0x1.764p-3},
-  {0x1.65p-7, 0x1.93cp-8},
-  {0x1.73p+13, 0x1.fa4p+12},
-  {0x1.a1p+5, 0x1.38cp+5},
-  {0x1.9bp-10, 0x1.344p-10},
-  {0x1.068p+13, 0x1.1ccp+12},
-  {0x1.d38p+15, 0x1.65p+12},
-  {0x1.0ep+15, 0x1.074p+14},
-  {0x1.b2p+7, 0x1.d1p+4},
-  {0x1.0a8p+4, 0x1.f68p+2},
-  {0x1.fccp+2, 0x1.bcp+2},
-  {0x1.998p-10, 0x1.e6p-14},
-  {0x1.83p+10, 0x1.148p+8},
-  {0x1.488p+5, 0x1.eccp+4},
-  {0x1.e3p-3, 0x1.a2cp-3},
-  {0x1.1fp-4, 0x1.524p-5},
-  {0x1.428p-3, 0x1.da8p-5},
-  {0x1.34p-6, 0x1.d88p-8},
-  {0x1.a28p+8, 0x1.e8cp+7},
-  {0x1.348p+6, 0x1.cecp+5},
-  {0x1.65p+14, 0x1.734p+13},
-  {0x1.59p-5, 0x1.928p-7},
-  {0x1.068p-11, 0x1.81p-14},
-  {0x1.cep+14, 0x1.2b4p+13},
-  {0x1.188p+0, 0x1.248p-2},
-  {0x1.8bp+9, 0x1.638p+7},
-  {0x1.4ap+12, 0x1.bacp+11},
-  {0x1.e78p+12, 0x1.e98p+10},
-  {0x1.3bp+3, 0x1.1b8p+1},
-  {0x1.268p-9, 0x1.e3p-12},
-  {0x1.28p-13, 0x1.59p-16},
-  {0x1.efp+12, 0x1.814p+12},
-  {0x1.7e8p+2, 0x1.3ecp+1},
-  {0x1.e1p+15, 0x1.4dcp+14},
-  {0x1.1e8p+14, 0x1.dd8p+12},
-  {0x1.83p-4, 0x1.7d4p-4},
-  {0x1.65p+9, 0x1.734p+8},
-  {0x1.72p+11, 0x1.68cp+10},
-  {0x1.848p-4, 0x1.43cp-5},
-  {0x1.908p+13, 0x1.4dcp+12},
-  {0x1.f7cp-9, 0x1.98p-9},
-  {0x1.efp+8, 0x1.814p+8},
-  {0x1.cf8p+3, 0x1.824p+2},
-  {0x1.7cp-12, 0x1.068p-14},
-  {0x1.adp-11, 0x1.f48p-13},
-  {0x1.a4p+9, 0x1.b2p+5},
-  {0x1.178p+12, 0x1.254p+11},
-  {0x1.d1p+11, 0x1.a4cp+10},
-  {0x1.7b8p+10, 0x1.e8cp+9},
-  {0x1.b3p+13, 0x1.464p+13},
-  {0x1.a28p+8, 0x1.5ccp+7},
-  {0x1.288p+7, 0x1.bccp+6},
-  {0x1.bfp+3, 0x1.4f4p+3},
-  {0x1.d1p+13, 0x1.a4cp+12},
-  {0x1.038p+1, 0x1.b08p-1},
-  {0x1.bd8p+7, 0x1.c8cp+6},
-  {0x1.bdp+10, 0x1.4dcp+10},
-  {0x1.bap-12, 0x1.be4p-13},
-  {0x1.efp+4, 0x1.59p+1},
-  {0x1.3bp+9, 0x1.1b8p+7},
-  {0x1.c7p-10, 0x1.944p-11},
-  {0x1.86p+14, 0x1.3cp+9},
-  {0x1.26p-11, 0x1.3bp-14},
-  {0x1.a9p+2, 0x1.158p+0},
-  {0x1.3bp-5, 0x1.734p-6},
-  {0x1.6cp+13, 0x1.308p+11},
-  {0x1.83p-6, 0x1.7d4p-6},
-  {0x1.008p-13, 0x1.658p-15},
-  {0x1.b18p+3, 0x1.694p+2},
-  {0x1.11p+10, 0x1.41cp+9},
-  {0x1.9dp-8, 0x1.e6cp-9},
-  {0x1.2dp+3, 0x1.0a4p+2},
-  {0x1.5f8p-7, 0x1.2cp-12},
-  {0x1.248p-7, 0x1.368p-9},
-  {0x1.d7cp+6, 0x1.95p+6},
-  {0x1.fep-12, 0x1.4dp-14},
-  {0x1.158p-5, 0x1.a04p-6},
-  {0x1.378p-10, 0x1.d34p-11},
-  {0x1.e7p+10, 0x1.6d4p+10},
-  {0x1.208p-9, 0x1.b0cp-10},
-  {0x1.c7p-14, 0x1.554p-14},
-  {0x1.38p-13, 0x1.f1p-16},
-  {0x1.278p+1, 0x1.ec8p-1},
-  {0x1.7e8p+13, 0x1.5ep+9},
-  {0x1.95p+7, 0x1.6c8p+5},
-  {0x1.c2p+11, 0x1.b6cp+10},
-  {0x1.fdp-7, 0x1.7dcp-7},
-  {0x1.428p+4, 0x1.d9p+1},
-  {0x1.ddcp-3, 0x1.dcp-4},
-  {0x1.adp+13, 0x1.93cp+12},
-  {0x1.e14p-5, 0x1.c2p-6},
-  {0x1.608p+5, 0x1.028p+3},
-  {0x1.518p+11, 0x1.1dp+8},
-  {0x1.f2cp-12, 0x1.dbp-12},
-  {0x1.ab8p+9, 0x1.644p+8},
-  {0x1.e6p+7, 0x1.cbp+4},
-  {0x1.e84p+9, 0x1.d1p+9},
-  {0x1.458p-10, 0x1.93p-13},
-  {0x1.068p-10, 0x1.81p-13},
-  {0x1.59p+0, 0x1.e14p-1},
-  {0x1.2e8p+15, 0x1.c5cp+14},
-  {0x1.a1p+9, 0x1.38cp+9},
-  {0x1.d64p-11, 0x1.11p-11},
-  {0x1.488p+0, 0x1.11cp-1},
-  {0x1.7ap-13, 0x1.65p-16},
-  {0x1.96p-4, 0x1.b3p-7},
-  {0x1.8ecp+11, 0x1.5cp+11},
-  {0x1.3fp-11, 0x1.11cp-12},
-  {0x1.3bp-13, 0x1.ecp-18},
-  {0x1.ce8p-8, 0x1.1acp-9},
-  {0x1.a28p-13, 0x1.ddcp-14},
-  {0x1.488p+4, 0x1.11cp+3},
-  {0x1.228p+9, 0x1.b3cp+8},
-  {0x1.298p+15, 0x1.14p+10},
-  {0x1.ccp+10, 0x1.0bcp+10},
-  {0x1.efp+6, 0x1.814p+6},
-  {0x1.8d8p+3, 0x1.4b4p+2},
-  {0x1.0ep+1, 0x1.6a4p+0},
-  {0x1.8f8p+0, 0x1.074p-1},
-  {0x1.368p+12, 0x1.02cp+11},
-  {0x1.59p-4, 0x1.83p-7},
-  {0x1.efp+7, 0x1.848p+6},
-  {0x1.998p-5, 0x1.554p-6},
-  {0x1.65p+0, 0x1.c64p-1},
-  {0x1.29p+8, 0x1.9ep+4},
-  {0x1.9ap+3, 0x1.404p+3},
-  {0x1.368p-10, 0x1.338p-12},
-  {0x1.e3p+0, 0x1.a2cp+0},
-  {0x1.8fp+6, 0x1.d64p+5},
-  {0x1.5a8p+12, 0x1.3c4p+11},
-  {0x1.e48p-7, 0x1.214p-8},
-  {0x1.378p-5, 0x1.d34p-6},
-  {0x1.ebp-8, 0x1.704p-8},
-  {0x1.5a8p+5, 0x1.634p+4},
-  {0x1.e3p-9, 0x1.928p-10},
-  {0x1.258p+7, 0x1.b84p+6},
-  {0x1.5a8p-4, 0x1.20cp-5},
-  {0x1.08p-9, 0x1.04p-14},
-  {0x1.188p-3, 0x1.0cp-8},
-  {0x1.fep-10, 0x1.4dp-12},
-  {0x1.4c8p-6, 0x1.f2cp-7},
-  {0x1.aep-11, 0x1.a34p-12},
-  {0x1.3a8p-7, 0x1.d7cp-8},
-  {0x1.fd4p-3, 0x1.e5p-3},
-  {0x1.068p+14, 0x1.22p+10},
-  {0x1.71p+7, 0x1.81p+4},
-  {0x1.1c8p-12, 0x1.aacp-13},
-  {0x1.c5p+7, 0x1.084p+6},
-  {0x1.dcp-4, 0x1.89cp-4},
-  {0x1.7e8p-7, 0x1.b28p-9},
-  {0x1.fep+7, 0x1.4dp+5},
-  {0x1.068p+9, 0x1.7e8p+7},
-  {0x1.59p+7, 0x1.e14p+6},
-  {0x1.7ap+12, 0x1.65p+9},
-  {0x1.158p-11, 0x1.ce8p-13},
-  {0x1.adp+8, 0x1.6dcp+8},
-  {0x1.008p+2, 0x1.80cp+1},
-  {0x1.4d8p+9, 0x1.3ecp+8},
-  {0x1.4b8p+6, 0x1.144p+5},
-  {0x1.59p-6, 0x1.e14p-7},
-  {0x1.1b8p-9, 0x1.8fcp-10},
-  {0x1.b9p+14, 0x1.4acp+14},
-  {0x1.378p-13, 0x1.d34p-14},
-  {0x1.f2cp+1, 0x1.dcp-1},
-  {0x1.be8p-6, 0x1.7e8p-8},
-  {0x1.878p+11, 0x1.464p+10},
-  {0x1.c9p+12, 0x1.56cp+12},
-  {0x1.3e8p-12, 0x1.7ap-16},
-  {0x1.7e8p-10, 0x1.b28p-12},
-  {0x1.28p+10, 0x1.59p+7},
-  {0x1.c2p-11, 0x1.be4p-11},
-  {0x1.d4p+1, 0x1.314p+1},
-  {0x1.ab8p-12, 0x1.69p-15},
-  {0x1.e9p+5, 0x1.978p+4},
-  {0x1.3f8p-4, 0x1.df4p-5},
-  {0x1.c2p+6, 0x1.26p+2},
-  {0x1.5a8p-7, 0x1.3c4p-8},
-  {0x1.f2cp-3, 0x1.fap-4},
-  {0x1.aa4p-11, 0x1.74p-11},
-  {0x1.89cp-10, 0x1.4ap-10},
-  {0x1.928p+7, 0x1.a04p+6},
-  {0x1.878p-11, 0x1.464p-12},
-  {0x1.0b8p+14, 0x1.914p+13},
-  {0x1.f2cp-1, 0x1.fap-2},
-  {0x1.fep+7, 0x1.6a8p+6},
-  {0x1.c08p+10, 0x1.298p+8},
-  {0x1.2a8p+13, 0x1.bfcp+12},
-  {0x1.d5p+10, 0x1.5fcp+10},
-  {0x1.96p+3, 0x1.b3p+0},
-  {0x1.f44p-7, 0x1.d4p-9},
-  {0x1.efp+3, 0x1.814p+3},
-  {0x1.bfp-5, 0x1.4f4p-5},
-  {0x1.4c8p+0, 0x1.9c8p-2},
-  {0x1.de8p+11, 0x1.0bcp+10},
-  {0x1.59p-8, 0x1.83p-11},
-  {0x1.028p-5, 0x1.83cp-6},
-  {0x1.f8p-10, 0x1.158p-11},
-  {0x1.b3p+11, 0x1.464p+11},
-  {0x1.1b8p+7, 0x1.a94p+6},
-  {0x1.13p+14, 0x1.47cp+13},
-  {0x1.e78p+11, 0x1.658p+9},
-  {0x1.098p+15, 0x1.ba8p+13},
-  {0x1.878p+13, 0x1.464p+12},
-  {0x1.4dp+1, 0x1.24p-4},
-  {0x1.ab8p+12, 0x1.644p+11},
-  {0x1.968p-3, 0x1.52cp-4},
-  {0x1.de8p+10, 0x1.0bcp+9},
-  {0x1.adp-10, 0x1.a04p-10},
-  {0x1.7cp-3, 0x1.734p-3},
-  {0x1.b3p-9, 0x1.878p-11},
-  {0x1.d18p+9, 0x1.20cp+8},
-  {0x1.1b8p-12, 0x1.5fp-15},
-  {0x1.81p+12, 0x1.c5cp+11},
-  {0x1.13p-8, 0x1.47cp-9},
-  {0x1.7e8p+5, 0x1.188p+3},
-  {0x1.d9p-5, 0x1.554p-5},
-  {0x1.d5p+0, 0x1.5fcp+0},
-  {0x1.f7cp-4, 0x1.efp-4},
-  {0x1.cdp+1, 0x1.59cp+1},
-  {0x1.abp+0, 0x1.f74p-1},
-  {0x1.81p-5, 0x1.638p-7},
-  {0x1.d8cp+2, 0x1.59p+2},
-  {0x1.cep+7, 0x1.75cp+7},
-  {0x1.9dp+12, 0x1.35cp+12},
-  {0x1.22p-6, 0x1.7b8p-8},
-  {0x1.83p+0, 0x1.7d4p+0},
-  {0x1.3e8p-11, 0x1.ddcp-12},
-  {0x1.a28p+1, 0x1.5ccp+0},
-  {0x1.848p-5, 0x1.43cp-6},
-  {0x1.f7cp-7, 0x1.efp-7},
-  {0x1.d7p+13, 0x1.12cp+12},
-  {0x1.d3p+5, 0x1.5e4p+5},
-  {0x1.efp-9, 0x1.848p-10},
-  {0x1.848p+2, 0x1.43cp+1},
-  {0x1.e3p+0, 0x1.928p-1},
-  {0x1.098p-8, 0x1.ba8p-10},
-  {0x1.d34p-7, 0x1.bdp-7},
-  {0x1.3f8p-12, 0x1.0a4p-13},
-  {0x1.e3p+7, 0x1.19cp+6},
-  {0x1.02p+8, 0x1.3e4p+7},
-  {0x1.d9p-9, 0x1.62cp-9},
-  {0x1.a28p-7, 0x1.ddcp-8},
-  {0x1.c98p+9, 0x1.7d4p+8},
-  {0x1.1dp+5, 0x1.008p+3},
-  {0x1.9ap+0, 0x1.8fcp-1},
-  {0x1.9ep-11, 0x1.1ap-15},
-  {0x1.81p-4, 0x1.5a8p-6},
-  {0x1.218p+13, 0x1.e28p+11},
-  {0x1.608p+6, 0x1.474p+5},
-  {0x1.49p+2, 0x1.83cp+1},
-  {0x1.258p+1, 0x1.b84p+0},
-  {0x1.e14p-8, 0x1.b9p-8},
-  {0x1.7f4p-9, 0x1.6dp-9},
-  {0x1.76p-9, 0x1.e48p-11},
-  {0x1.56p-9, 0x1.428p-11},
-  {0x1.57p-12, 0x1.944p-13},
-  {0x1.ae8p-9, 0x1.4cp-14},
-  {0x1.4dp-10, 0x1.24p-15},
-  {0x1.668p+3, 0x1.2acp+2},
-  {0x1.238p-11, 0x1.b54p-12},
-  {0x1.9dp-11, 0x1.35cp-11},
-  {0x1.368p-12, 0x1.d1cp-13},
-  {0x1.c5p+10, 0x1.53cp+10},
-  {0x1.3bp-7, 0x1.1cp-12},
-  {0x1.338p+2, 0x1.cd4p+1},
-  {0x1.e3p+13, 0x1.6a4p+13},
-  {0x1.cep-2, 0x1.efp-5},
-  {0x1.848p+9, 0x1.43cp+8},
-  {0x1.998p+14, 0x1.75cp+13},
-  {0x1.9f8p-2, 0x1.5a4p-3},
-  {0x1.c3p+5, 0x1.2b4p+5},
-  {0x1.8fp-2, 0x1.7bcp-3},
-  {0x1.3c8p-3, 0x1.07cp-4},
-  {0x1.83p+6, 0x1.7d4p+6},
-  {0x1.81p+10, 0x1.c5cp+9},
-  {0x1.05p+3, 0x1.c7p+0},
-  {0x1.098p+14, 0x1.ba8p+12},
-  {0x1.28p-11, 0x1.59p-14},
-  {0x1.e84p+2, 0x1.d1p+2},
-  {0x1.9c8p+14, 0x1.a7p+11},
-  {0x1.4e8p+6, 0x1.f5cp+5},
-  {0x1.358p-12, 0x1.d04p-13},
-  {0x1.158p+9, 0x1.d5p+6},
-  {0x1.e78p-6, 0x1.02cp-7},
-  {0x1.a1p-9, 0x1.e68p-11},
-  {0x1.458p+9, 0x1.e84p+8},
-  {0x1.ae8p+9, 0x1.4cp+4},
-  {0x1.518p-9, 0x1.194p-10},
-  {0x1.79p-12, 0x1.d1cp-13},
-  {0x1.068p-3, 0x1.22p-7},
-  {0x1.b7p-1, 0x1.494p-1},
-  {0x1.fep-5, 0x1.6a8p-6},
-  {0x1.b5p+6, 0x1.47cp+6},
-  {0x1.de8p-8, 0x1.0bcp-9},
-  {0x1.6d8p+4, 0x1.5a8p+2},
-  {0x1.878p+14, 0x1.83cp+13},
-  {0x1.ba8p-8, 0x1.70cp-9},
-  {0x1.bcp-3, 0x1.d38p-5},
-  {0x1.a28p+6, 0x1.e8cp+5},
-  {0x1.cbp+12, 0x1.464p+11},
-  {0x1.13p-11, 0x1.5ccp-12},
-  {0x1.1dp+6, 0x1.4c8p+4},
-  {0x1.74cp+7, 0x1.63p+7},
-  {0x1.eap-13, 0x1.068p-15},
-  {0x1.068p+5, 0x1.aa4p+4},
-  {0x1.8bp-9, 0x1.638p-11},
-  {0x1.e3p-5, 0x1.f38p-6},
-  {0x1.abcp+10, 0x1.4ap+10},
-  {0x1.9c8p-6, 0x1.3bp-9},
-  {0x1.c28p+6, 0x1.9d4p+5},
-  {0x1.57p+12, 0x1.944p+11},
-  {0x1.34p+1, 0x1.d88p-1},
-  {0x1.0ap-13, 0x1.1dp-16},
-  {0x1.3e8p+9, 0x1.ddcp+8},
-  {0x1.e3p+1, 0x1.19cp+0},
-  {0x1.c2p-7, 0x1.8ecp-7},
-  {0x1.2dp+12, 0x1.62cp+11},
-  {0x1.028p+12, 0x1.af4p+11},
-  {0x1.e9p+1, 0x1.1d4p+0},
-  {0x1.578p-6, 0x1.1e4p-7},
-  {0x1.c28p-13, 0x1.9d4p-14},
-  {0x1.188p+7, 0x1.d38p+5},
-  {0x1.908p+10, 0x1.4dcp+9},
-  {0x1.338p-3, 0x1.cd4p-4},
-  {0x1.1d8p+0, 0x1.ac4p-1},
-  {0x1.a1p-8, 0x1.e68p-10},
-  {0x1.f2cp-9, 0x1.a2p-9},
-  {0x1.218p+7, 0x1.e28p+5},
-  {0x1.c2p-10, 0x1.964p-10},
-  {0x1.f4p+7, 0x1.e78p+6},
-  {0x1.cc8p+12, 0x1.7fcp+11},
-  {0x1.9dp-3, 0x1.e6cp-4},
-  {0x1.4c8p-4, 0x1.e48p-6},
-  {0x1.f8p-5, 0x1.324p-5},
-  {0x1.cep-2, 0x1.2b4p-3},
-  {0x1.838p+12, 0x1.80cp+11},
-  {0x1.45p-2, 0x1.248p-4},
-  {0x1.ccp-14, 0x1.0bcp-14},
-  {0x1.4ap+8, 0x1.ffp+5},
-  {0x1.8d8p-5, 0x1.238p-7},
-  {0x1.648p+6, 0x1.20cp+5},
-  {0x1.b48p-13, 0x1.6bcp-14},
-  {0x1.0ep+4, 0x1.fep+0},
-  {0x1.458p-7, 0x1.e84p-8},
-  {0x1.2b8p+15, 0x1.c14p+14},
-  {0x1.4b8p+15, 0x1.e14p+14},
-  {0x1.3a8p+0, 0x1.aap-4},
-  {0x1.77p-7, 0x1.b58p-9},
-  {0x1.83p+14, 0x1.c38p+12},
-  {0x1.2a8p-12, 0x1.bfcp-13},
-  {0x1.ed8p+8, 0x1.bdp+5},
-  {0x1.d58p-10, 0x1.874p-11},
-  {0x1.e78p-7, 0x1.e98p-9},
-  {0x1.a98p+3, 0x1.758p+1},
-  {0x1.038p-10, 0x1.b08p-12},
-  {0x1.4c8p-8, 0x1.c8cp-9},
-  {0x1.5a8p-2, 0x1.634p-3},
-  {0x1.9c8p-11, 0x1.57cp-12},
-  {0x1.6a8p-11, 0x1.9ecp-12},
-  {0x1.70cp+4, 0x1.65p+4},
-  {0x1.a98p+10, 0x1.758p+8},
-  {0x1.d28p+15, 0x1.84cp+14},
-  {0x1.d64p+4, 0x1.11p+4},
-  {0x1.848p+6, 0x1.43cp+5},
-  {0x1.c3p-3, 0x1.fep-7},
-  {0x1.8fp-6, 0x1.5ecp-6},
-  {0x1.ab8p+3, 0x1.69p+0},
-  {0x1.028p-2, 0x1.af4p-3},
-  {0x1.ccp-2, 0x1.0bcp-2},
-  {0x1.c98p-5, 0x1.7d4p-6},
-  {0x1.8fp+1, 0x1.d18p-1},
-  {0x1.be4p+12, 0x1.76p+12},
-  {0x1.a58p-9, 0x1.5f4p-10},
-  {0x1.f2cp+6, 0x1.56p+5},
-  {0x1.86p+6, 0x1.82cp+6},
-  {0x1.458p+7, 0x1.93p+4},
-  {0x1.3bp+0, 0x1.644p-1},
-  {0x1.9bp+6, 0x1.df8p+4},
-  {0x1.b58p+2, 0x1.3ecp+1},
-  {0x1.788p+6, 0x1.39cp+5},
-  {0x1.068p+5, 0x1.b58p+3},
-  {0x1.bcp+9, 0x1.d38p+7},
-  {0x1.e14p-13, 0x1.b9p-13},
-  {0x1.e6p+5, 0x1.b6cp+5},
-  {0x1.cep+13, 0x1.2b4p+12},
-  {0x1.908p+1, 0x1.4dcp+0},
-  {0x1.e5p-8, 0x1.b48p-10},
-  {0x1.d34p+9, 0x1.bdp+9},
-  {0x1.4b8p+3, 0x1.e14p+2},
-  {0x1.3c8p+2, 0x1.dacp+1},
-  {0x1.4dp-5, 0x1.848p-7},
-  {0x1.49p-1, 0x1.644p-2},
-  {0x1.efp+6, 0x1.fb8p+5},
-  {0x1.288p-5, 0x1.bccp-6},
-  {0x1.9c8p+2, 0x1.57cp+1},
-  {0x1.81p-6, 0x1.c5cp-7},
-  {0x1.57p+2, 0x1.944p+1},
-  {0x1.4ap-12, 0x1.ffp-15},
-  {0x1.1dp-1, 0x1.4c8p-3},
-  {0x1.a2p+13, 0x1.89cp+13},
-  {0x1.218p-12, 0x1.b24p-13},
-  {0x1.3f8p-5, 0x1.0a4p-6},
-  {0x1.9ap+15, 0x1.44p+10},
-  {0x1.a9p-11, 0x1.7e8p-13},
-  {0x1.23p-3, 0x1.538p-5},
-  {0x1.59p-10, 0x1.928p-12},
-  {0x1.89cp-5, 0x1.77p-5},
-  {0x1.c2p-4, 0x1.8ecp-4},
-  {0x1.218p-7, 0x1.b24p-8},
-  {0x1.ed8p-2, 0x1.bdp-5},
-  {0x1.fep-8, 0x1.298p-9},
-  {0x1.e78p-2, 0x1.32p-6},
-  {0x1.3f8p-2, 0x1.0a4p-3},
-  {0x1.bacp-5, 0x1.65p-5},
-  {0x1.308p-5, 0x1.e3cp-6},
-  {0x1.d1p-12, 0x1.a4cp-13},
-  {0x1.368p+1, 0x1.02cp+0},
-  {0x1.2d8p-11, 0x1.f68p-13},
-  {0x1.9ecp+2, 0x1.8bp+2},
-  {0x1.338p+8, 0x1.cd4p+7},
-  {0x1.8bp-7, 0x1.638p-9},
-  {0x1.d88p+5, 0x1.5a8p+3},
-  {0x1.4ap-6, 0x1.ffp-9},
-  {0x1.e9p+7, 0x1.978p+6},
-  {0x1.128p+1, 0x1.9bcp+0},
-  {0x1.56p+8, 0x1.43p+5},
-  {0x1.298p+11, 0x1.4acp+10},
-  {0x1.368p-10, 0x1.5acp-11},
-  {0x1.3a8p-12, 0x1.aap-16},
-  {0x1.77p-1, 0x1.b58p-3},
-  {0x1.6f8p-10, 0x1.774p-11},
-  {0x1.928p+13, 0x1.a04p+12},
-  {0x1.f2cp+6, 0x1.dbp+6},
-  {0x1.5a8p+7, 0x1.adp+4},
-  {0x1.b2p-7, 0x1.d1p-10},
-  {0x1.e3cp+9, 0x1.02p+9},
-  {0x1.35p-8, 0x1.688p-10},
-  {0x1.9dp-4, 0x1.35cp-4},
-  {0x1.a4p+14, 0x1.ce8p+12},
-  {0x1.d18p+11, 0x1.de8p+9},
-  {0x1.318p+6, 0x1.ca4p+5},
-  {0x1.298p-3, 0x1.be4p-4},
-  {0x1.2cp+0, 0x1.36p-4},
-  {0x1.2dp+9, 0x1.0a4p+8},
-  {0x1.c08p+12, 0x1.b9p+9},
-  {0x1.f7p-1, 0x1.794p-1},
-  {0x1.ce8p-4, 0x1.1acp-5},
-  {0x1.76p+15, 0x1.e48p+13},
-  {0x1.31p+2, 0x1.128p+0},
-  {0x1.338p-2, 0x1.868p-4},
-  {0x1.e3cp-10, 0x1.2dp-10},
-  {0x1.e78p-10, 0x1.02cp-11},
-  {0x1.d7p-1, 0x1.12cp-2},
-  {0x1.81p-2, 0x1.5a8p-4},
-  {0x1.ffp-5, 0x1.7f4p-5},
-  {0x1.6f8p-7, 0x1.c7p-10},
-  {0x1.f7cp-11, 0x1.98p-11},
-  {0x1.b3p+12, 0x1.fb8p+10},
-  {0x1.4b8p+12, 0x1.224p+11},
-  {0x1.8d8p-13, 0x1.dd4p-14},
-  {0x1.e14p+0, 0x1.c2p-1},
-  {0x1.248p-2, 0x1.524p-3},
-  {0x1.a3p+12, 0x1.3a4p+12},
-  {0x1.bdp-11, 0x1.4dcp-11},
-  {0x1.418p+0, 0x1.e24p-1},
-  {0x1.fep-9, 0x1.6a8p-10},
-  {0x1.a98p-8, 0x1.758p-10},
-  {0x1.1dp+11, 0x1.0f4p+10},
-  {0x1.5a8p+0, 0x1.20cp-1},
-  {0x1.f2cp-3, 0x1.0ap-3},
-  {0x1.7e8p+15, 0x1.188p+13},
+    {0x1.3b8p-5, 0x1.d94p-6},   {0x1.068p-7, 0x1.1ccp-8},
+    {0x1.1dp-3, 0x1.4c8p-5},    {0x1.c38p-2, 0x1.784p-3},
+    {0x1.e3cp-3, 0x1.02p-3},    {0x1.04p-8, 0x1.b3p-11},
+    {0x1.e3p+5, 0x1.928p+4},    {0x1.8bp+4, 0x1.638p+2},
+    {0x1.4fp+1, 0x1.2d8p-1},    {0x1.458p+3, 0x1.0f4p+2},
+    {0x1.c08p+1, 0x1.75cp+0},   {0x1.1fp-13, 0x1.524p-14},
+    {0x1.36p-3, 0x1.2e4p-4},    {0x1.b58p-9, 0x1.3ecp-10},
+    {0x1.d74p+6, 0x1.a7p+6},    {0x1.dc4p-6, 0x1.fcp-7},
+    {0x1.6f8p-3, 0x1.324p-4},   {0x1.86p+13, 0x1.7c4p+12},
+    {0x1.9c8p+4, 0x1.57cp+3},   {0x1.81p+7, 0x1.638p+5},
+    {0x1.488p+9, 0x1.11cp+8},   {0x1.0a8p+12, 0x1.f68p+10},
+    {0x1.008p-8, 0x1.bcp-13},   {0x1.818p-8, 0x1.414p-9},
+    {0x1.efp+1, 0x1.814p+1},    {0x1.b6cp+6, 0x1.11p+6},
+    {0x1.458p+10, 0x1.93p+7},   {0x1.058p+13, 0x1.884p+12},
+    {0x1.ae8p+7, 0x1.0a8p+5},   {0x1.9c8p+7, 0x1.60cp+6},
+    {0x1.2cp+2, 0x1.14cp+1},    {0x1.9bp+13, 0x1.df8p+11},
+    {0x1.b2p+14, 0x1.d1p+11},   {0x1.f8p-10, 0x1.d1cp-10},
+    {0x1.22p-13, 0x1.7b8p-15},  {0x1.cep-13, 0x1.104p-13},
+    {0x1.2e8p+5, 0x1.cep+1},    {0x1.edp-10, 0x1.71cp-10},
+    {0x1.6f8p+12, 0x1.96p+8},   {0x1.e78p+7, 0x1.32p+3},
+    {0x1.2dp-1, 0x1.62cp-2},    {0x1.ab8p-4, 0x1.72p-8},
+    {0x1.ab8p+7, 0x1.398p+5},   {0x1.97p-10, 0x1.1b8p-12},
+    {0x1.eap+5, 0x1.068p+3},    {0x1.fdp+11, 0x1.7dcp+11},
+    {0x1.fbp-14, 0x1.b04p-14},  {0x1.3bp+14, 0x1.6f8p+12},
+    {0x1.4c8p+5, 0x1.c8cp+4},   {0x1.848p-3, 0x1.e1p-6},
+    {0x1.72p+4, 0x1.68cp+3},    {0x1.2a8p-10, 0x1.bfcp-11},
+    {0x1.d8cp+9, 0x1.59p+9},    {0x1.e3p+12, 0x1.a2cp+12},
+    {0x1.81p-8, 0x1.5a8p-10},   {0x1.b48p+3, 0x1.6bcp+2},
+    {0x1.14p+8, 0x1.bbcp+7},    {0x1.72p-1, 0x1.cep-5},
+    {0x1.068p-3, 0x1.aa4p-4},   {0x1.7b8p+5, 0x1.e8cp+4},
+    {0x1.14p-9, 0x1.998p-11},   {0x1.878p+1, 0x1.83cp+0},
+    {0x1.068p+5, 0x1.41cp+4},   {0x1.0bp+14, 0x1.378p+12},
+    {0x1.2dp-2, 0x1.0a4p-3},    {0x1.ed8p+10, 0x1.bdp+7},
+    {0x1.f8p+5, 0x1.158p+4},    {0x1.44p-2, 0x1.62cp-3},
+    {0x1.a4p+11, 0x1.ce8p+9},   {0x1.fbp+5, 0x1.45p+2},
+    {0x1.1dp+4, 0x1.4c8p+2},    {0x1.2a8p-1, 0x1.f18p-3},
+    {0x1.2dp-11, 0x1.0a4p-12},  {0x1.c2p-8, 0x1.b6cp-9},
+    {0x1.adp+12, 0x1.41cp+12},  {0x1.9fp+4, 0x1.758p+2},
+    {0x1.42p-7, 0x1.59p-10},    {0x1.198p-8, 0x1.a64p-9},
+    {0x1.f2cp-2, 0x1.56p-3},    {0x1.e14p-2, 0x1.b9p-2},
+    {0x1.158p+7, 0x1.d5p+4},    {0x1.1f8p+7, 0x1.af4p+6},
+    {0x1.d88p-6, 0x1.8fp-9},    {0x1.38p-8, 0x1.f1p-11},
+    {0x1.3bp-8, 0x1.1cp-13},    {0x1.4a8p-4, 0x1.efcp-5},
+    {0x1.efp-2, 0x1.848p-3},    {0x1.cep-1, 0x1.75cp-1},
+    {0x1.098p+12, 0x1.ba8p+10}, {0x1.1fp+13, 0x1.c08p+11},
+    {0x1.d9p-12, 0x1.5cp-17},   {0x1.89cp+8, 0x1.77p+8},
+    {0x1.158p+0, 0x1.97p-3},    {0x1.d7p+1, 0x1.614p+1},
+    {0x1.b3p+5, 0x1.878p+3},    {0x1.028p-4, 0x1.af4p-5},
+    {0x1.93p-6, 0x1.b3cp-7},    {0x1.4d8p+13, 0x1.f44p+12},
+    {0x1.d4cp+5, 0x1.f4p+4},    {0x1.efp-11, 0x1.59p-14},
+    {0x1.b6cp+11, 0x1.11p+11},  {0x1.328p+11, 0x1.cbcp+10},
+    {0x1.bap+0, 0x1.be4p-1},    {0x1.318p+11, 0x1.ca4p+10},
+    {0x1.74cp-13, 0x1.63p-13},  {0x1.3bp+11, 0x1.1b8p+9},
+    {0x1.278p-5, 0x1.bb4p-6},   {0x1.1f8p+7, 0x1.74cp+6},
+    {0x1.848p-12, 0x1.8bp-15},  {0x1.28p-5, 0x1.59p-8},
+    {0x1.9ep+11, 0x1.87p+8},    {0x1.d38p-10, 0x1.e78p-12},
+    {0x1.abp-8, 0x1.f74p-9},    {0x1.5fp+12, 0x1.c2p+8},
+    {0x1.dbp-13, 0x1.998p-14},  {0x1.0e8p-5, 0x1.95cp-6},
+    {0x1.98p+6, 0x1.8a4p+5},    {0x1.998p+0, 0x1.fbp-3},
+    {0x1.188p+2, 0x1.d38p+0},   {0x1.efp-5, 0x1.814p-5},
+    {0x1.dbp-10, 0x1.464p-10},  {0x1.1a8p-10, 0x1.a7cp-11},
+    {0x1.068p-12, 0x1.41cp-13}, {0x1.ba8p-4, 0x1.448p-6},
+    {0x1.658p+10, 0x1.89cp+9},  {0x1.9c8p+2, 0x1.2e8p+0},
+    {0x1.d88p-12, 0x1.89cp-13}, {0x1.508p+4, 0x1.f8cp+3},
+    {0x1.c2p-8, 0x1.be4p-8},    {0x1.d4cp+9, 0x1.f4p+8},
+    {0x1.198p+5, 0x1.a64p+4},   {0x1.9ap-5, 0x1.44p-10},
+    {0x1.d5p+5, 0x1.5fcp+5},    {0x1.dbp-3, 0x1.ab8p-5},
+    {0x1.efp-14, 0x1.3ecp-14},  {0x1.05p+0, 0x1.c7p-3},
+    {0x1.c7p+15, 0x1.998p+13},  {0x1.658p+7, 0x1.7b8p+5},
+    {0x1.c98p+11, 0x1.7d4p+10}, {0x1.c2p+2, 0x1.a9p-1},
+    {0x1.fdp-9, 0x1.7dcp-9},    {0x1.3bp-6, 0x1.6f8p-8},
+    {0x1.d18p+3, 0x1.de8p+1},   {0x1.2cp+1, 0x1.36p-3},
+    {0x1.458p-4, 0x1.e84p-5},   {0x1.3f8p+8, 0x1.df4p+7},
+    {0x1.c2p+1, 0x1.26p-3},     {0x1.e5p+9, 0x1.6bcp+9},
+    {0x1.e7p+4, 0x1.6d4p+4},    {0x1.318p-12, 0x1.7f4p-13},
+    {0x1.cbp-2, 0x1.0bcp-3},    {0x1.068p-3, 0x1.41cp-4},
+    {0x1.55p+10, 0x1.e78p+8},   {0x1.c5cp+14, 0x1.8cp+14},
+    {0x1.a28p-1, 0x1.ddcp-2},   {0x1.848p-7, 0x1.43cp-8},
+    {0x1.9ecp-6, 0x1.8bp-6},    {0x1.3bp-2, 0x1.364p-3},
+    {0x1.c2p+13, 0x1.26p+9},    {0x1.1b8p-13, 0x1.a94p-14},
+    {0x1.dbp+11, 0x1.ab8p+9},   {0x1.f3p-13, 0x1.764p-13},
+    {0x1.32p+7, 0x1.ae8p+5},    {0x1.2dp-4, 0x1.0a4p-5},
+    {0x1.d8cp+7, 0x1.59p+7},    {0x1.05p+1, 0x1.308p-1},
+    {0x1.d64p+7, 0x1.11p+7},    {0x1.6f8p+7, 0x1.324p+6},
+    {0x1.d88p+8, 0x1.248p+6},   {0x1.008p+5, 0x1.ab8p+3},
+    {0x1.248p+4, 0x1.f2cp+3},   {0x1.e5p-11, 0x1.b48p-13},
+    {0x1.c2p+7, 0x1.964p+7},    {0x1.fa4p+0, 0x1.3bp+0},
+    {0x1.058p-12, 0x1.884p-13}, {0x1.f2p-13, 0x1.228p-14},
+    {0x1.c5cp-14, 0x1.8cp-14},  {0x1.cep+4, 0x1.75cp+4},
+    {0x1.71p+15, 0x1.81p+12},   {0x1.3bp+12, 0x1.644p+11},
+    {0x1.188p-8, 0x1.0cp-13},   {0x1.2fp+9, 0x1.618p+7},
+    {0x1.088p+11, 0x1.8ccp+10}, {0x1.c3p+9, 0x1.524p+9},
+    {0x1.f2cp+8, 0x1.44p+8},    {0x1.11p-7, 0x1.34cp-8},
+    {0x1.efp+9, 0x1.848p+8},    {0x1.fa4p+11, 0x1.0ep+11},
+    {0x1.3e8p-7, 0x1.ddcp-8},   {0x1.288p-13, 0x1.bccp-14},
+    {0x1.518p-8, 0x1.fa4p-9},   {0x1.c7p-3, 0x1.944p-4},
+    {0x1.338p+3, 0x1.c3p+0},    {0x1.1b8p+14, 0x1.d88p+12},
+    {0x1.d7p-5, 0x1.614p-5},    {0x1.9ep+6, 0x1.87p+3},
+    {0x1.e9p+13, 0x1.6ecp+13},  {0x1.9dp-3, 0x1.35cp-3},
+    {0x1.318p+13, 0x1.ca4p+12}, {0x1.11p+1, 0x1.cd4p+0},
+    {0x1.26p-10, 0x1.3bp-13},   {0x1.adp+14, 0x1.13p+11},
+    {0x1.9bcp-7, 0x1.76p-7},    {0x1.e6p-10, 0x1.cbp-13},
+    {0x1.dbp-2, 0x1.86p-6},     {0x1.f2cp+3, 0x1.dbp+3},
+    {0x1.2a8p+3, 0x1.bfcp+2},   {0x1.f2cp+14, 0x1.0ap+14},
+    {0x1.5cp+13, 0x1.b6cp+12},  {0x1.3d8p+3, 0x1.dc4p+2},
+    {0x1.0b8p-10, 0x1.914p-11}, {0x1.5cp+3, 0x1.6dcp+2},
+    {0x1.ba8p+0, 0x1.70cp-1},   {0x1.45p-2, 0x1.20cp-3},
+    {0x1.ab8p+5, 0x1.72p+1},    {0x1.dbp-13, 0x1.86p-17},
+    {0x1.aep-9, 0x1.6a4p-9},    {0x1.298p-13, 0x1.14p-18},
+    {0x1.0f8p-10, 0x1.974p-11}, {0x1.ddp+1, 0x1.65cp+1},
+    {0x1.d88p-6, 0x1.5a8p-8},   {0x1.08p-4, 0x1.04p-9},
+    {0x1.318p-1, 0x1.ca4p-2},   {0x1.45p-8, 0x1.248p-10},
+    {0x1.068p+14, 0x1.1ccp+13}, {0x1.468p+13, 0x1.e9cp+12},
+    {0x1.aa4p-9, 0x1.74p-9},    {0x1.02p+3, 0x1.3e4p+2},
+    {0x1.6bp-11, 0x1.a78p-13},  {0x1.158p-5, 0x1.d5p-8},
+    {0x1.0f8p-4, 0x1.974p-5},   {0x1.1ep-1, 0x1.728p-3},
+    {0x1.a9p+8, 0x1.7e8p+6},    {0x1.86p+13, 0x1.3cp+8},
+    {0x1.c2p+6, 0x1.8ecp+6},    {0x1.238p-4, 0x1.b54p-5},
+    {0x1.3bp-13, 0x1.734p-14},  {0x1.aep-3, 0x1.f2p-7},
+    {0x1.2cp+7, 0x1.36p+3},     {0x1.70cp+13, 0x1.65p+13},
+    {0x1.ed8p-9, 0x1.bdp-12},   {0x1.188p+15, 0x1.248p+13},
+    {0x1.5ep+15, 0x1.77p+12},   {0x1.bd8p-8, 0x1.6f8p-10},
+    {0x1.e78p+8, 0x1.32p+4},    {0x1.c38p-8, 0x1.784p-9},
+    {0x1.008p+5, 0x1.658p+3},   {0x1.6f8p-9, 0x1.0d8p-11},
+    {0x1.9c8p-13, 0x1.2e8p-15}, {0x1.4f8p+15, 0x1.f74p+14},
+    {0x1.158p+11, 0x1.d5p+8},   {0x1.9c8p-3, 0x1.57cp-4},
+    {0x1.0c8p+15, 0x1.bf8p+13}, {0x1.5a8p-3, 0x1.518p-5},
+    {0x1.e84p+7, 0x1.d1p+7},    {0x1.abp-12, 0x1.f74p-13},
+    {0x1.1ep+13, 0x1.728p+11},  {0x1.8cp-3, 0x1.e14p-4},
+    {0x1.6d8p+7, 0x1.5a8p+5},   {0x1.e9p-13, 0x1.6ecp-13},
+    {0x1.7e8p+10, 0x1.188p+8},  {0x1.17p+10, 0x1.f7cp+9},
+    {0x1.dfp-8, 0x1.674p-8},    {0x1.d34p+5, 0x1.bdp+5},
+    {0x1.018p-2, 0x1.824p-3},   {0x1.6f8p-13, 0x1.c7p-16},
+    {0x1.a58p+11, 0x1.5f4p+10}, {0x1.e3cp+3, 0x1.02p+3},
+    {0x1.cbp-5, 0x1.584p-5},    {0x1.5a8p+9, 0x1.3c4p+8},
+    {0x1.528p-8, 0x1.fbcp-9},   {0x1.1b8p+9, 0x1.a94p+8},
+    {0x1.788p-7, 0x1.39cp-8},   {0x1.f2cp+4, 0x1.56p+3},
+    {0x1.f2cp+2, 0x1.fap+1},    {0x1.218p+5, 0x1.b24p+4},
+    {0x1.fbp+4, 0x1.7c4p+4},    {0x1.45p-3, 0x1.20cp-4},
+    {0x1.368p+12, 0x1.338p+10}, {0x1.1ep-3, 0x1.20cp-4},
+    {0x1.c5p+6, 0x1.084p+5},    {0x1.afp+12, 0x1.434p+12},
+    {0x1.bfp-3, 0x1.4f4p-3},    {0x1.d4p+8, 0x1.d88p+7},
+    {0x1.e3cp-5, 0x1.02p-5},    {0x1.adp+9, 0x1.6dcp+9},
+    {0x1.b8p+3, 0x1.f44p+2},    {0x1.ddcp+7, 0x1.c7p+7},
+    {0x1.248p-10, 0x1.e78p-12}, {0x1.efp+13, 0x1.9c8p+12},
+    {0x1.a2p+5, 0x1.89cp+5},    {0x1.298p+8, 0x1.be4p+7},
+    {0x1.0f8p-12, 0x1.974p-13}, {0x1.dcp-8, 0x1.cep-12},
+    {0x1.c38p+0, 0x1.784p-1},   {0x1.038p+11, 0x1.854p+10},
+    {0x1.b3cp+11, 0x1.9fp+11},  {0x1.5fp-4, 0x1.c2p-8},
+    {0x1.c7p+2, 0x1.554p+2},    {0x1.c38p-12, 0x1.178p-14},
+    {0x1.f14p+2, 0x1.cep+2},    {0x1.3e8p-13, 0x1.ddcp-14},
+    {0x1.188p+12, 0x1.248p+10}, {0x1.b04p-13, 0x1.1dp-13},
+    {0x1.c5cp-7, 0x1.8cp-7},    {0x1.22p-11, 0x1.7b8p-13},
+    {0x1.338p+0, 0x1.868p-2},   {0x1.f44p+2, 0x1.d4p+0},
+    {0x1.0d8p+1, 0x1.944p+0},   {0x1.a88p-9, 0x1.61cp-10},
+    {0x1.178p+14, 0x1.254p+13}, {0x1.2cp+15, 0x1.36p+11},
+    {0x1.7ap-1, 0x1.95p-4},     {0x1.adp+14, 0x1.f48p+12},
+    {0x1.c2p-2, 0x1.964p-2},    {0x1.a1p-6, 0x1.38cp-6},
+    {0x1.518p+6, 0x1.efp+3},    {0x1.32p+1, 0x1.fa4p+0},
+    {0x1.ccp-11, 0x1.0bcp-11},  {0x1.96p+14, 0x1.b3p+11},
+    {0x1.308p+14, 0x1.fb8p+12}, {0x1.02p-11, 0x1.3e4p-12},
+    {0x1.be4p+1, 0x1.76p+1},    {0x1.c08p-3, 0x1.b9p-6},
+    {0x1.e3p-13, 0x1.928p-14},  {0x1.218p-2, 0x1.b24p-3},
+    {0x1.22p+5, 0x1.1acp+4},    {0x1.bfp+14, 0x1.4f4p+14},
+    {0x1.78p-5, 0x1.284p-6},    {0x1.ae8p-4, 0x1.4cp-9},
+    {0x1.c2p-12, 0x1.be4p-12},  {0x1.458p+6, 0x1.e84p+5},
+    {0x1.efp-14, 0x1.fb8p-15},  {0x1.cd4p-1, 0x1.1fp-1},
+    {0x1.71p+12, 0x1.81p+9},    {0x1.cbp+4, 0x1.584p+4},
+    {0x1.3d8p-1, 0x1.dc4p-2},   {0x1.c2p+9, 0x1.68cp+9},
+    {0x1.128p+1, 0x1.c98p-1},   {0x1.068p-4, 0x1.7e8p-6},
+    {0x1.178p-6, 0x1.a34p-7},   {0x1.c38p+7, 0x1.784p+6},
+    {0x1.158p+6, 0x1.ce8p+4},   {0x1.e78p-12, 0x1.658p-14},
+    {0x1.83p-7, 0x1.7d4p-7},    {0x1.658p-3, 0x1.7b8p-5},
+    {0x1.bd8p+3, 0x1.734p+2},   {0x1.408p+3, 0x1.e0cp+2},
+    {0x1.d1p+5, 0x1.0f4p+4},    {0x1.848p-9, 0x1.43cp-10},
+    {0x1.ccp-8, 0x1.554p-9},    {0x1.45p+4, 0x1.248p+2},
+    {0x1.a5p-10, 0x1.3bcp-10},  {0x1.65p-4, 0x1.a08p-6},
+    {0x1.408p-9, 0x1.e0cp-10},  {0x1.c38p+3, 0x1.54p-2},
+    {0x1.518p+12, 0x1.194p+11}, {0x1.c2p-11, 0x1.8ecp-11},
+    {0x1.d88p-1, 0x1.8fp-4},    {0x1.268p+6, 0x1.b9cp+5},
+    {0x1.74p+11, 0x1.4fcp+10},  {0x1.188p-2, 0x1.0cp-7},
+    {0x1.c7p+8, 0x1.998p+6},    {0x1.3fp+13, 0x1.11cp+12},
+    {0x1.608p-5, 0x1.474p-6},   {0x1.4ap+4, 0x1.ffp+1},
+    {0x1.3bp-13, 0x1.a34p-14},  {0x1.5f8p+3, 0x1.2cp-2},
+    {0x1.58p-5, 0x1.9c8p-7},    {0x1.f2cp+14, 0x1.56p+13},
+    {0x1.988p+3, 0x1.95p+0},    {0x1.f2cp+13, 0x1.fap+12},
+    {0x1.e14p+6, 0x1.a4p+6},    {0x1.efp-7, 0x1.64p-12},
+    {0x1.fbp-8, 0x1.7c4p-8},    {0x1.95p-4, 0x1.6c8p-6},
+    {0x1.68p+9, 0x1.f48p+7},    {0x1.668p+5, 0x1.2acp+4},
+    {0x1.608p+15, 0x1.028p+13}, {0x1.13p+8, 0x1.47cp+7},
+    {0x1.518p-13, 0x1.c38p-15}, {0x1.5a8p+0, 0x1.adp-3},
+    {0x1.f5p-10, 0x1.77cp-10},  {0x1.05p-5, 0x1.c7p-8},
+    {0x1.b3cp-10, 0x1.9fp-10},  {0x1.488p-13, 0x1.11cp-14},
+    {0x1.e3p+2, 0x1.a2cp+2},    {0x1.8ecp+2, 0x1.5cp+2},
+    {0x1.abp-4, 0x1.404p-4},    {0x1.398p-11, 0x1.71p-14},
+    {0x1.c2p-7, 0x1.a9p-10},    {0x1.d8cp+1, 0x1.59p+1},
+    {0x1.848p-2, 0x1.8bp-5},    {0x1.0ep-5, 0x1.b38p-7},
+    {0x1.d9p+14, 0x1.554p+14},  {0x1.aep+2, 0x1.a34p+1},
+    {0x1.d64p+14, 0x1.81p+14},  {0x1.8a8p+0, 0x1.48cp-1},
+    {0x1.308p+3, 0x1.79p+0},    {0x1.6f8p+3, 0x1.774p+2},
+    {0x1.428p+1, 0x1.d9p-2},    {0x1.108p-5, 0x1.98cp-6},
+    {0x1.b9p+11, 0x1.014p+10},  {0x1.de8p+5, 0x1.0bcp+4},
+    {0x1.b6cp-1, 0x1.b5p-1},    {0x1.cep-6, 0x1.75cp-6},
+    {0x1.0f8p+9, 0x1.974p+8},   {0x1.ee8p+10, 0x1.0bp+7},
+    {0x1.2cp+15, 0x1.14cp+14},  {0x1.5f8p-11, 0x1.2cp-16},
+    {0x1.f7cp-13, 0x1.efp-13},  {0x1.2fp+12, 0x1.618p+10},
+    {0x1.0e8p-3, 0x1.95cp-4},   {0x1.a1p+11, 0x1.38cp+11},
+    {0x1.86p-11, 0x1.7c4p-12},  {0x1.028p+7, 0x1.83cp+6},
+    {0x1.f74p+5, 0x1.49p+5},    {0x1.65p+3, 0x1.c64p+2},
+    {0x1.8fp-9, 0x1.7bcp-10},   {0x1.f14p-5, 0x1.52p-5},
+    {0x1.e48p+15, 0x1.214p+14}, {0x1.fbp+5, 0x1.7c4p+5},
+    {0x1.1fp-3, 0x1.c08p-5},    {0x1.248p+6, 0x1.838p+4},
+    {0x1.65p+10, 0x1.fb8p+8},   {0x1.4c8p-5, 0x1.b6p-9},
+    {0x1.a88p+11, 0x1.61cp+10}, {0x1.458p+5, 0x1.93p+2},
+    {0x1.d18p+1, 0x1.de8p-1},   {0x1.6dp+1, 0x1.488p-1},
+    {0x1.698p-5, 0x1.2d4p-6},   {0x1.3f8p-2, 0x1.df4p-3},
+    {0x1.b3p-7, 0x1.878p-9},    {0x1.1b8p-5, 0x1.02cp-6},
+    {0x1.518p-3, 0x1.1dp-6},    {0x1.198p+2, 0x1.a64p+1},
+    {0x1.098p-7, 0x1.ba8p-9},   {0x1.b3p-8, 0x1.4acp-9},
+    {0x1.a28p+4, 0x1.e8cp+3},   {0x1.41p+13, 0x1.768p+11},
+    {0x1.cfp-14, 0x1.5b4p-14},  {0x1.31p-4, 0x1.128p-6},
+    {0x1.83p-2, 0x1.148p-4},    {0x1.498p+15, 0x1.ee4p+14},
+    {0x1.b6cp-3, 0x1.5ep-3},    {0x1.2a8p+7, 0x1.bfcp+6},
+    {0x1.268p-5, 0x1.e3p-8},    {0x1.7cp-4, 0x1.068p-6},
+    {0x1.8fp-4, 0x1.7bcp-5},    {0x1.95p-9, 0x1.ed8p-11},
+    {0x1.29p+2, 0x1.2dcp+1},    {0x1.dbp-9, 0x1.998p-10},
+    {0x1.b1p-10, 0x1.44cp-10},  {0x1.57p-9, 0x1.944p-10},
+    {0x1.138p-9, 0x1.9d4p-10},  {0x1.d64p-8, 0x1.11p-8},
+    {0x1.928p+6, 0x1.bd8p+4},   {0x1.2a8p+7, 0x1.f18p+5},
+    {0x1.95p-6, 0x1.ed8p-8},    {0x1.998p-9, 0x1.75cp-10},
+    {0x1.57p+9, 0x1.944p+8},    {0x1.998p+11, 0x1.fbp+8},
+    {0x1.e3p-7, 0x1.a2cp-7},    {0x1.efp+8, 0x1.bd8p+6},
+    {0x1.d74p+1, 0x1.a7p+1},    {0x1.f68p-13, 0x1.708p-15},
+    {0x1.398p-8, 0x1.93cp-9},   {0x1.3d8p+1, 0x1.dc4p+0},
+    {0x1.efp-1, 0x1.64p-6},     {0x1.02p-3, 0x1.3e4p-4},
+    {0x1.a4p+5, 0x1.ce8p+3},    {0x1.83p-5, 0x1.148p-7},
+    {0x1.adp-9, 0x1.93cp-10},   {0x1.7e8p-13, 0x1.188p-15},
+    {0x1.248p+1, 0x1.838p-1},   {0x1.adp-10, 0x1.f48p-12},
+    {0x1.ecp-2, 0x1.378p-4},    {0x1.998p-13, 0x1.fbp-16},
+    {0x1.dbp-7, 0x1.86p-11},    {0x1.e3cp-10, 0x1.02p-10},
+    {0x1.bfp+2, 0x1.4f4p+2},    {0x1.adp+7, 0x1.f48p+5},
+    {0x1.6f8p+10, 0x1.0d8p+8},  {0x1.f4p+13, 0x1.e78p+12},
+    {0x1.0d8p-9, 0x1.944p-10},  {0x1.3bp+8, 0x1.1cp+3},
+    {0x1.c98p+10, 0x1.4f8p+8},  {0x1.9fp-10, 0x1.758p-12},
+    {0x1.9c8p-4, 0x1.2e8p-6},   {0x1.d9p-1, 0x1.5cp-6},
+    {0x1.ddp+11, 0x1.8d8p+10},  {0x1.308p-1, 0x1.79p-4},
+    {0x1.9bp+12, 0x1.344p+12},  {0x1.d7p+12, 0x1.12cp+11},
+    {0x1.e7p-13, 0x1.6d4p-13},  {0x1.518p+11, 0x1.bacp+10},
+    {0x1.fep+11, 0x1.cbp+9},    {0x1.e3cp+2, 0x1.02p+2},
+    {0x1.098p+0, 0x1.8e4p-1},   {0x1.538p-10, 0x1.fd4p-11},
+    {0x1.858p-3, 0x1.dap-7},    {0x1.71p-12, 0x1.ae8p-14},
+    {0x1.e3p-9, 0x1.34cp-9},    {0x1.ab8p+13, 0x1.69p+10},
+    {0x1.1b8p+3, 0x1.a94p+2},   {0x1.f14p-12, 0x1.52p-12},
+    {0x1.988p+13, 0x1.95p+10},  {0x1.998p+7, 0x1.e6p+3},
+    {0x1.f68p+8, 0x1.708p+6},   {0x1.81p+15, 0x1.e84p+14},
+    {0x1.ae8p+8, 0x1.0a8p+6},   {0x1.29p+10, 0x1.2dcp+9},
+    {0x1.118p-8, 0x1.9a4p-9},   {0x1.59p+1, 0x1.368p-1},
+    {0x1.efp+1, 0x1.9c8p+0},    {0x1.d7p-9, 0x1.614p-9},
+    {0x1.4b8p-5, 0x1.6dp-8},    {0x1.4c8p-12, 0x1.9c8p-14},
+    {0x1.f8p-13, 0x1.158p-14},  {0x1.41p+10, 0x1.768p+8},
+    {0x1.29p-3, 0x1.2dcp-4},    {0x1.c08p-8, 0x1.75cp-9},
+    {0x1.538p-7, 0x1.fd4p-8},   {0x1.518p-4, 0x1.fa4p-5},
+    {0x1.2dp+4, 0x1.62cp+3},    {0x1.49p-9, 0x1.83cp-10},
+    {0x1.6bp+3, 0x1.fap-1},     {0x1.efp+3, 0x1.734p+3},
+    {0x1.038p-5, 0x1.b08p-7},   {0x1.f3p-3, 0x1.764p-3},
+    {0x1.65p-7, 0x1.93cp-8},    {0x1.73p+13, 0x1.fa4p+12},
+    {0x1.a1p+5, 0x1.38cp+5},    {0x1.9bp-10, 0x1.344p-10},
+    {0x1.068p+13, 0x1.1ccp+12}, {0x1.d38p+15, 0x1.65p+12},
+    {0x1.0ep+15, 0x1.074p+14},  {0x1.b2p+7, 0x1.d1p+4},
+    {0x1.0a8p+4, 0x1.f68p+2},   {0x1.fccp+2, 0x1.bcp+2},
+    {0x1.998p-10, 0x1.e6p-14},  {0x1.83p+10, 0x1.148p+8},
+    {0x1.488p+5, 0x1.eccp+4},   {0x1.e3p-3, 0x1.a2cp-3},
+    {0x1.1fp-4, 0x1.524p-5},    {0x1.428p-3, 0x1.da8p-5},
+    {0x1.34p-6, 0x1.d88p-8},    {0x1.a28p+8, 0x1.e8cp+7},
+    {0x1.348p+6, 0x1.cecp+5},   {0x1.65p+14, 0x1.734p+13},
+    {0x1.59p-5, 0x1.928p-7},    {0x1.068p-11, 0x1.81p-14},
+    {0x1.cep+14, 0x1.2b4p+13},  {0x1.188p+0, 0x1.248p-2},
+    {0x1.8bp+9, 0x1.638p+7},    {0x1.4ap+12, 0x1.bacp+11},
+    {0x1.e78p+12, 0x1.e98p+10}, {0x1.3bp+3, 0x1.1b8p+1},
+    {0x1.268p-9, 0x1.e3p-12},   {0x1.28p-13, 0x1.59p-16},
+    {0x1.efp+12, 0x1.814p+12},  {0x1.7e8p+2, 0x1.3ecp+1},
+    {0x1.e1p+15, 0x1.4dcp+14},  {0x1.1e8p+14, 0x1.dd8p+12},
+    {0x1.83p-4, 0x1.7d4p-4},    {0x1.65p+9, 0x1.734p+8},
+    {0x1.72p+11, 0x1.68cp+10},  {0x1.848p-4, 0x1.43cp-5},
+    {0x1.908p+13, 0x1.4dcp+12}, {0x1.f7cp-9, 0x1.98p-9},
+    {0x1.efp+8, 0x1.814p+8},    {0x1.cf8p+3, 0x1.824p+2},
+    {0x1.7cp-12, 0x1.068p-14},  {0x1.adp-11, 0x1.f48p-13},
+    {0x1.a4p+9, 0x1.b2p+5},     {0x1.178p+12, 0x1.254p+11},
+    {0x1.d1p+11, 0x1.a4cp+10},  {0x1.7b8p+10, 0x1.e8cp+9},
+    {0x1.b3p+13, 0x1.464p+13},  {0x1.a28p+8, 0x1.5ccp+7},
+    {0x1.288p+7, 0x1.bccp+6},   {0x1.bfp+3, 0x1.4f4p+3},
+    {0x1.d1p+13, 0x1.a4cp+12},  {0x1.038p+1, 0x1.b08p-1},
+    {0x1.bd8p+7, 0x1.c8cp+6},   {0x1.bdp+10, 0x1.4dcp+10},
+    {0x1.bap-12, 0x1.be4p-13},  {0x1.efp+4, 0x1.59p+1},
+    {0x1.3bp+9, 0x1.1b8p+7},    {0x1.c7p-10, 0x1.944p-11},
+    {0x1.86p+14, 0x1.3cp+9},    {0x1.26p-11, 0x1.3bp-14},
+    {0x1.a9p+2, 0x1.158p+0},    {0x1.3bp-5, 0x1.734p-6},
+    {0x1.6cp+13, 0x1.308p+11},  {0x1.83p-6, 0x1.7d4p-6},
+    {0x1.008p-13, 0x1.658p-15}, {0x1.b18p+3, 0x1.694p+2},
+    {0x1.11p+10, 0x1.41cp+9},   {0x1.9dp-8, 0x1.e6cp-9},
+    {0x1.2dp+3, 0x1.0a4p+2},    {0x1.5f8p-7, 0x1.2cp-12},
+    {0x1.248p-7, 0x1.368p-9},   {0x1.d7cp+6, 0x1.95p+6},
+    {0x1.fep-12, 0x1.4dp-14},   {0x1.158p-5, 0x1.a04p-6},
+    {0x1.378p-10, 0x1.d34p-11}, {0x1.e7p+10, 0x1.6d4p+10},
+    {0x1.208p-9, 0x1.b0cp-10},  {0x1.c7p-14, 0x1.554p-14},
+    {0x1.38p-13, 0x1.f1p-16},   {0x1.278p+1, 0x1.ec8p-1},
+    {0x1.7e8p+13, 0x1.5ep+9},   {0x1.95p+7, 0x1.6c8p+5},
+    {0x1.c2p+11, 0x1.b6cp+10},  {0x1.fdp-7, 0x1.7dcp-7},
+    {0x1.428p+4, 0x1.d9p+1},    {0x1.ddcp-3, 0x1.dcp-4},
+    {0x1.adp+13, 0x1.93cp+12},  {0x1.e14p-5, 0x1.c2p-6},
+    {0x1.608p+5, 0x1.028p+3},   {0x1.518p+11, 0x1.1dp+8},
+    {0x1.f2cp-12, 0x1.dbp-12},  {0x1.ab8p+9, 0x1.644p+8},
+    {0x1.e6p+7, 0x1.cbp+4},     {0x1.e84p+9, 0x1.d1p+9},
+    {0x1.458p-10, 0x1.93p-13},  {0x1.068p-10, 0x1.81p-13},
+    {0x1.59p+0, 0x1.e14p-1},    {0x1.2e8p+15, 0x1.c5cp+14},
+    {0x1.a1p+9, 0x1.38cp+9},    {0x1.d64p-11, 0x1.11p-11},
+    {0x1.488p+0, 0x1.11cp-1},   {0x1.7ap-13, 0x1.65p-16},
+    {0x1.96p-4, 0x1.b3p-7},     {0x1.8ecp+11, 0x1.5cp+11},
+    {0x1.3fp-11, 0x1.11cp-12},  {0x1.3bp-13, 0x1.ecp-18},
+    {0x1.ce8p-8, 0x1.1acp-9},   {0x1.a28p-13, 0x1.ddcp-14},
+    {0x1.488p+4, 0x1.11cp+3},   {0x1.228p+9, 0x1.b3cp+8},
+    {0x1.298p+15, 0x1.14p+10},  {0x1.ccp+10, 0x1.0bcp+10},
+    {0x1.efp+6, 0x1.814p+6},    {0x1.8d8p+3, 0x1.4b4p+2},
+    {0x1.0ep+1, 0x1.6a4p+0},    {0x1.8f8p+0, 0x1.074p-1},
+    {0x1.368p+12, 0x1.02cp+11}, {0x1.59p-4, 0x1.83p-7},
+    {0x1.efp+7, 0x1.848p+6},    {0x1.998p-5, 0x1.554p-6},
+    {0x1.65p+0, 0x1.c64p-1},    {0x1.29p+8, 0x1.9ep+4},
+    {0x1.9ap+3, 0x1.404p+3},    {0x1.368p-10, 0x1.338p-12},
+    {0x1.e3p+0, 0x1.a2cp+0},    {0x1.8fp+6, 0x1.d64p+5},
+    {0x1.5a8p+12, 0x1.3c4p+11}, {0x1.e48p-7, 0x1.214p-8},
+    {0x1.378p-5, 0x1.d34p-6},   {0x1.ebp-8, 0x1.704p-8},
+    {0x1.5a8p+5, 0x1.634p+4},   {0x1.e3p-9, 0x1.928p-10},
+    {0x1.258p+7, 0x1.b84p+6},   {0x1.5a8p-4, 0x1.20cp-5},
+    {0x1.08p-9, 0x1.04p-14},    {0x1.188p-3, 0x1.0cp-8},
+    {0x1.fep-10, 0x1.4dp-12},   {0x1.4c8p-6, 0x1.f2cp-7},
+    {0x1.aep-11, 0x1.a34p-12},  {0x1.3a8p-7, 0x1.d7cp-8},
+    {0x1.fd4p-3, 0x1.e5p-3},    {0x1.068p+14, 0x1.22p+10},
+    {0x1.71p+7, 0x1.81p+4},     {0x1.1c8p-12, 0x1.aacp-13},
+    {0x1.c5p+7, 0x1.084p+6},    {0x1.dcp-4, 0x1.89cp-4},
+    {0x1.7e8p-7, 0x1.b28p-9},   {0x1.fep+7, 0x1.4dp+5},
+    {0x1.068p+9, 0x1.7e8p+7},   {0x1.59p+7, 0x1.e14p+6},
+    {0x1.7ap+12, 0x1.65p+9},    {0x1.158p-11, 0x1.ce8p-13},
+    {0x1.adp+8, 0x1.6dcp+8},    {0x1.008p+2, 0x1.80cp+1},
+    {0x1.4d8p+9, 0x1.3ecp+8},   {0x1.4b8p+6, 0x1.144p+5},
+    {0x1.59p-6, 0x1.e14p-7},    {0x1.1b8p-9, 0x1.8fcp-10},
+    {0x1.b9p+14, 0x1.4acp+14},  {0x1.378p-13, 0x1.d34p-14},
+    {0x1.f2cp+1, 0x1.dcp-1},    {0x1.be8p-6, 0x1.7e8p-8},
+    {0x1.878p+11, 0x1.464p+10}, {0x1.c9p+12, 0x1.56cp+12},
+    {0x1.3e8p-12, 0x1.7ap-16},  {0x1.7e8p-10, 0x1.b28p-12},
+    {0x1.28p+10, 0x1.59p+7},    {0x1.c2p-11, 0x1.be4p-11},
+    {0x1.d4p+1, 0x1.314p+1},    {0x1.ab8p-12, 0x1.69p-15},
+    {0x1.e9p+5, 0x1.978p+4},    {0x1.3f8p-4, 0x1.df4p-5},
+    {0x1.c2p+6, 0x1.26p+2},     {0x1.5a8p-7, 0x1.3c4p-8},
+    {0x1.f2cp-3, 0x1.fap-4},    {0x1.aa4p-11, 0x1.74p-11},
+    {0x1.89cp-10, 0x1.4ap-10},  {0x1.928p+7, 0x1.a04p+6},
+    {0x1.878p-11, 0x1.464p-12}, {0x1.0b8p+14, 0x1.914p+13},
+    {0x1.f2cp-1, 0x1.fap-2},    {0x1.fep+7, 0x1.6a8p+6},
+    {0x1.c08p+10, 0x1.298p+8},  {0x1.2a8p+13, 0x1.bfcp+12},
+    {0x1.d5p+10, 0x1.5fcp+10},  {0x1.96p+3, 0x1.b3p+0},
+    {0x1.f44p-7, 0x1.d4p-9},    {0x1.efp+3, 0x1.814p+3},
+    {0x1.bfp-5, 0x1.4f4p-5},    {0x1.4c8p+0, 0x1.9c8p-2},
+    {0x1.de8p+11, 0x1.0bcp+10}, {0x1.59p-8, 0x1.83p-11},
+    {0x1.028p-5, 0x1.83cp-6},   {0x1.f8p-10, 0x1.158p-11},
+    {0x1.b3p+11, 0x1.464p+11},  {0x1.1b8p+7, 0x1.a94p+6},
+    {0x1.13p+14, 0x1.47cp+13},  {0x1.e78p+11, 0x1.658p+9},
+    {0x1.098p+15, 0x1.ba8p+13}, {0x1.878p+13, 0x1.464p+12},
+    {0x1.4dp+1, 0x1.24p-4},     {0x1.ab8p+12, 0x1.644p+11},
+    {0x1.968p-3, 0x1.52cp-4},   {0x1.de8p+10, 0x1.0bcp+9},
+    {0x1.adp-10, 0x1.a04p-10},  {0x1.7cp-3, 0x1.734p-3},
+    {0x1.b3p-9, 0x1.878p-11},   {0x1.d18p+9, 0x1.20cp+8},
+    {0x1.1b8p-12, 0x1.5fp-15},  {0x1.81p+12, 0x1.c5cp+11},
+    {0x1.13p-8, 0x1.47cp-9},    {0x1.7e8p+5, 0x1.188p+3},
+    {0x1.d9p-5, 0x1.554p-5},    {0x1.d5p+0, 0x1.5fcp+0},
+    {0x1.f7cp-4, 0x1.efp-4},    {0x1.cdp+1, 0x1.59cp+1},
+    {0x1.abp+0, 0x1.f74p-1},    {0x1.81p-5, 0x1.638p-7},
+    {0x1.d8cp+2, 0x1.59p+2},    {0x1.cep+7, 0x1.75cp+7},
+    {0x1.9dp+12, 0x1.35cp+12},  {0x1.22p-6, 0x1.7b8p-8},
+    {0x1.83p+0, 0x1.7d4p+0},    {0x1.3e8p-11, 0x1.ddcp-12},
+    {0x1.a28p+1, 0x1.5ccp+0},   {0x1.848p-5, 0x1.43cp-6},
+    {0x1.f7cp-7, 0x1.efp-7},    {0x1.d7p+13, 0x1.12cp+12},
+    {0x1.d3p+5, 0x1.5e4p+5},    {0x1.efp-9, 0x1.848p-10},
+    {0x1.848p+2, 0x1.43cp+1},   {0x1.e3p+0, 0x1.928p-1},
+    {0x1.098p-8, 0x1.ba8p-10},  {0x1.d34p-7, 0x1.bdp-7},
+    {0x1.3f8p-12, 0x1.0a4p-13}, {0x1.e3p+7, 0x1.19cp+6},
+    {0x1.02p+8, 0x1.3e4p+7},    {0x1.d9p-9, 0x1.62cp-9},
+    {0x1.a28p-7, 0x1.ddcp-8},   {0x1.c98p+9, 0x1.7d4p+8},
+    {0x1.1dp+5, 0x1.008p+3},    {0x1.9ap+0, 0x1.8fcp-1},
+    {0x1.9ep-11, 0x1.1ap-15},   {0x1.81p-4, 0x1.5a8p-6},
+    {0x1.218p+13, 0x1.e28p+11}, {0x1.608p+6, 0x1.474p+5},
+    {0x1.49p+2, 0x1.83cp+1},    {0x1.258p+1, 0x1.b84p+0},
+    {0x1.e14p-8, 0x1.b9p-8},    {0x1.7f4p-9, 0x1.6dp-9},
+    {0x1.76p-9, 0x1.e48p-11},   {0x1.56p-9, 0x1.428p-11},
+    {0x1.57p-12, 0x1.944p-13},  {0x1.ae8p-9, 0x1.4cp-14},
+    {0x1.4dp-10, 0x1.24p-15},   {0x1.668p+3, 0x1.2acp+2},
+    {0x1.238p-11, 0x1.b54p-12}, {0x1.9dp-11, 0x1.35cp-11},
+    {0x1.368p-12, 0x1.d1cp-13}, {0x1.c5p+10, 0x1.53cp+10},
+    {0x1.3bp-7, 0x1.1cp-12},    {0x1.338p+2, 0x1.cd4p+1},
+    {0x1.e3p+13, 0x1.6a4p+13},  {0x1.cep-2, 0x1.efp-5},
+    {0x1.848p+9, 0x1.43cp+8},   {0x1.998p+14, 0x1.75cp+13},
+    {0x1.9f8p-2, 0x1.5a4p-3},   {0x1.c3p+5, 0x1.2b4p+5},
+    {0x1.8fp-2, 0x1.7bcp-3},    {0x1.3c8p-3, 0x1.07cp-4},
+    {0x1.83p+6, 0x1.7d4p+6},    {0x1.81p+10, 0x1.c5cp+9},
+    {0x1.05p+3, 0x1.c7p+0},     {0x1.098p+14, 0x1.ba8p+12},
+    {0x1.28p-11, 0x1.59p-14},   {0x1.e84p+2, 0x1.d1p+2},
+    {0x1.9c8p+14, 0x1.a7p+11},  {0x1.4e8p+6, 0x1.f5cp+5},
+    {0x1.358p-12, 0x1.d04p-13}, {0x1.158p+9, 0x1.d5p+6},
+    {0x1.e78p-6, 0x1.02cp-7},   {0x1.a1p-9, 0x1.e68p-11},
+    {0x1.458p+9, 0x1.e84p+8},   {0x1.ae8p+9, 0x1.4cp+4},
+    {0x1.518p-9, 0x1.194p-10},  {0x1.79p-12, 0x1.d1cp-13},
+    {0x1.068p-3, 0x1.22p-7},    {0x1.b7p-1, 0x1.494p-1},
+    {0x1.fep-5, 0x1.6a8p-6},    {0x1.b5p+6, 0x1.47cp+6},
+    {0x1.de8p-8, 0x1.0bcp-9},   {0x1.6d8p+4, 0x1.5a8p+2},
+    {0x1.878p+14, 0x1.83cp+13}, {0x1.ba8p-8, 0x1.70cp-9},
+    {0x1.bcp-3, 0x1.d38p-5},    {0x1.a28p+6, 0x1.e8cp+5},
+    {0x1.cbp+12, 0x1.464p+11},  {0x1.13p-11, 0x1.5ccp-12},
+    {0x1.1dp+6, 0x1.4c8p+4},    {0x1.74cp+7, 0x1.63p+7},
+    {0x1.eap-13, 0x1.068p-15},  {0x1.068p+5, 0x1.aa4p+4},
+    {0x1.8bp-9, 0x1.638p-11},   {0x1.e3p-5, 0x1.f38p-6},
+    {0x1.abcp+10, 0x1.4ap+10},  {0x1.9c8p-6, 0x1.3bp-9},
+    {0x1.c28p+6, 0x1.9d4p+5},   {0x1.57p+12, 0x1.944p+11},
+    {0x1.34p+1, 0x1.d88p-1},    {0x1.0ap-13, 0x1.1dp-16},
+    {0x1.3e8p+9, 0x1.ddcp+8},   {0x1.e3p+1, 0x1.19cp+0},
+    {0x1.c2p-7, 0x1.8ecp-7},    {0x1.2dp+12, 0x1.62cp+11},
+    {0x1.028p+12, 0x1.af4p+11}, {0x1.e9p+1, 0x1.1d4p+0},
+    {0x1.578p-6, 0x1.1e4p-7},   {0x1.c28p-13, 0x1.9d4p-14},
+    {0x1.188p+7, 0x1.d38p+5},   {0x1.908p+10, 0x1.4dcp+9},
+    {0x1.338p-3, 0x1.cd4p-4},   {0x1.1d8p+0, 0x1.ac4p-1},
+    {0x1.a1p-8, 0x1.e68p-10},   {0x1.f2cp-9, 0x1.a2p-9},
+    {0x1.218p+7, 0x1.e28p+5},   {0x1.c2p-10, 0x1.964p-10},
+    {0x1.f4p+7, 0x1.e78p+6},    {0x1.cc8p+12, 0x1.7fcp+11},
+    {0x1.9dp-3, 0x1.e6cp-4},    {0x1.4c8p-4, 0x1.e48p-6},
+    {0x1.f8p-5, 0x1.324p-5},    {0x1.cep-2, 0x1.2b4p-3},
+    {0x1.838p+12, 0x1.80cp+11}, {0x1.45p-2, 0x1.248p-4},
+    {0x1.ccp-14, 0x1.0bcp-14},  {0x1.4ap+8, 0x1.ffp+5},
+    {0x1.8d8p-5, 0x1.238p-7},   {0x1.648p+6, 0x1.20cp+5},
+    {0x1.b48p-13, 0x1.6bcp-14}, {0x1.0ep+4, 0x1.fep+0},
+    {0x1.458p-7, 0x1.e84p-8},   {0x1.2b8p+15, 0x1.c14p+14},
+    {0x1.4b8p+15, 0x1.e14p+14}, {0x1.3a8p+0, 0x1.aap-4},
+    {0x1.77p-7, 0x1.b58p-9},    {0x1.83p+14, 0x1.c38p+12},
+    {0x1.2a8p-12, 0x1.bfcp-13}, {0x1.ed8p+8, 0x1.bdp+5},
+    {0x1.d58p-10, 0x1.874p-11}, {0x1.e78p-7, 0x1.e98p-9},
+    {0x1.a98p+3, 0x1.758p+1},   {0x1.038p-10, 0x1.b08p-12},
+    {0x1.4c8p-8, 0x1.c8cp-9},   {0x1.5a8p-2, 0x1.634p-3},
+    {0x1.9c8p-11, 0x1.57cp-12}, {0x1.6a8p-11, 0x1.9ecp-12},
+    {0x1.70cp+4, 0x1.65p+4},    {0x1.a98p+10, 0x1.758p+8},
+    {0x1.d28p+15, 0x1.84cp+14}, {0x1.d64p+4, 0x1.11p+4},
+    {0x1.848p+6, 0x1.43cp+5},   {0x1.c3p-3, 0x1.fep-7},
+    {0x1.8fp-6, 0x1.5ecp-6},    {0x1.ab8p+3, 0x1.69p+0},
+    {0x1.028p-2, 0x1.af4p-3},   {0x1.ccp-2, 0x1.0bcp-2},
+    {0x1.c98p-5, 0x1.7d4p-6},   {0x1.8fp+1, 0x1.d18p-1},
+    {0x1.be4p+12, 0x1.76p+12},  {0x1.a58p-9, 0x1.5f4p-10},
+    {0x1.f2cp+6, 0x1.56p+5},    {0x1.86p+6, 0x1.82cp+6},
+    {0x1.458p+7, 0x1.93p+4},    {0x1.3bp+0, 0x1.644p-1},
+    {0x1.9bp+6, 0x1.df8p+4},    {0x1.b58p+2, 0x1.3ecp+1},
+    {0x1.788p+6, 0x1.39cp+5},   {0x1.068p+5, 0x1.b58p+3},
+    {0x1.bcp+9, 0x1.d38p+7},    {0x1.e14p-13, 0x1.b9p-13},
+    {0x1.e6p+5, 0x1.b6cp+5},    {0x1.cep+13, 0x1.2b4p+12},
+    {0x1.908p+1, 0x1.4dcp+0},   {0x1.e5p-8, 0x1.b48p-10},
+    {0x1.d34p+9, 0x1.bdp+9},    {0x1.4b8p+3, 0x1.e14p+2},
+    {0x1.3c8p+2, 0x1.dacp+1},   {0x1.4dp-5, 0x1.848p-7},
+    {0x1.49p-1, 0x1.644p-2},    {0x1.efp+6, 0x1.fb8p+5},
+    {0x1.288p-5, 0x1.bccp-6},   {0x1.9c8p+2, 0x1.57cp+1},
+    {0x1.81p-6, 0x1.c5cp-7},    {0x1.57p+2, 0x1.944p+1},
+    {0x1.4ap-12, 0x1.ffp-15},   {0x1.1dp-1, 0x1.4c8p-3},
+    {0x1.a2p+13, 0x1.89cp+13},  {0x1.218p-12, 0x1.b24p-13},
+    {0x1.3f8p-5, 0x1.0a4p-6},   {0x1.9ap+15, 0x1.44p+10},
+    {0x1.a9p-11, 0x1.7e8p-13},  {0x1.23p-3, 0x1.538p-5},
+    {0x1.59p-10, 0x1.928p-12},  {0x1.89cp-5, 0x1.77p-5},
+    {0x1.c2p-4, 0x1.8ecp-4},    {0x1.218p-7, 0x1.b24p-8},
+    {0x1.ed8p-2, 0x1.bdp-5},    {0x1.fep-8, 0x1.298p-9},
+    {0x1.e78p-2, 0x1.32p-6},    {0x1.3f8p-2, 0x1.0a4p-3},
+    {0x1.bacp-5, 0x1.65p-5},    {0x1.308p-5, 0x1.e3cp-6},
+    {0x1.d1p-12, 0x1.a4cp-13},  {0x1.368p+1, 0x1.02cp+0},
+    {0x1.2d8p-11, 0x1.f68p-13}, {0x1.9ecp+2, 0x1.8bp+2},
+    {0x1.338p+8, 0x1.cd4p+7},   {0x1.8bp-7, 0x1.638p-9},
+    {0x1.d88p+5, 0x1.5a8p+3},   {0x1.4ap-6, 0x1.ffp-9},
+    {0x1.e9p+7, 0x1.978p+6},    {0x1.128p+1, 0x1.9bcp+0},
+    {0x1.56p+8, 0x1.43p+5},     {0x1.298p+11, 0x1.4acp+10},
+    {0x1.368p-10, 0x1.5acp-11}, {0x1.3a8p-12, 0x1.aap-16},
+    {0x1.77p-1, 0x1.b58p-3},    {0x1.6f8p-10, 0x1.774p-11},
+    {0x1.928p+13, 0x1.a04p+12}, {0x1.f2cp+6, 0x1.dbp+6},
+    {0x1.5a8p+7, 0x1.adp+4},    {0x1.b2p-7, 0x1.d1p-10},
+    {0x1.e3cp+9, 0x1.02p+9},    {0x1.35p-8, 0x1.688p-10},
+    {0x1.9dp-4, 0x1.35cp-4},    {0x1.a4p+14, 0x1.ce8p+12},
+    {0x1.d18p+11, 0x1.de8p+9},  {0x1.318p+6, 0x1.ca4p+5},
+    {0x1.298p-3, 0x1.be4p-4},   {0x1.2cp+0, 0x1.36p-4},
+    {0x1.2dp+9, 0x1.0a4p+8},    {0x1.c08p+12, 0x1.b9p+9},
+    {0x1.f7p-1, 0x1.794p-1},    {0x1.ce8p-4, 0x1.1acp-5},
+    {0x1.76p+15, 0x1.e48p+13},  {0x1.31p+2, 0x1.128p+0},
+    {0x1.338p-2, 0x1.868p-4},   {0x1.e3cp-10, 0x1.2dp-10},
+    {0x1.e78p-10, 0x1.02cp-11}, {0x1.d7p-1, 0x1.12cp-2},
+    {0x1.81p-2, 0x1.5a8p-4},    {0x1.ffp-5, 0x1.7f4p-5},
+    {0x1.6f8p-7, 0x1.c7p-10},   {0x1.f7cp-11, 0x1.98p-11},
+    {0x1.b3p+12, 0x1.fb8p+10},  {0x1.4b8p+12, 0x1.224p+11},
+    {0x1.8d8p-13, 0x1.dd4p-14}, {0x1.e14p+0, 0x1.c2p-1},
+    {0x1.248p-2, 0x1.524p-3},   {0x1.a3p+12, 0x1.3a4p+12},
+    {0x1.bdp-11, 0x1.4dcp-11},  {0x1.418p+0, 0x1.e24p-1},
+    {0x1.fep-9, 0x1.6a8p-10},   {0x1.a98p-8, 0x1.758p-10},
+    {0x1.1dp+11, 0x1.0f4p+10},  {0x1.5a8p+0, 0x1.20cp-1},
+    {0x1.f2cp-3, 0x1.0ap-3},    {0x1.7e8p+15, 0x1.188p+13},
 };
 
 #endif // LLVM_LIBC_TEST_SRC_MATH_HYPOTTEST_HARD_TO_ROUND_H
diff --git a/libc/test/src/math/smoke/CMakeLists.txt b/libc/test/src/math/smoke/CMakeLists.txt
index 639fe9590ef39..09474d5df27db 100644
--- a/libc/test/src/math/smoke/CMakeLists.txt
+++ b/libc/test/src/math/smoke/CMakeLists.txt
@@ -3132,7 +3132,6 @@ add_fp_unittest(
   DEPENDS
     libc.src.math.hypotf16
     libc.src.__support.FPUtil.fp_bits
-    libc.src.__support.macros.properties.architectures
 )
 
 add_fp_unittest(

>From 862e069cdcadb51a1daf8c3a546c01ac4813fe2c Mon Sep 17 00:00:00 2001
From: meltq <alissxlace at proton.me>
Date: Wed, 26 Mar 2025 14:05:31 +0530
Subject: [PATCH 9/9] Added increment, cleanup

---
 libc/src/math/generic/hypotf16.cpp              | 11 ++++++-----
 libc/test/src/math/exhaustive/hypotf16_test.cpp |  2 +-
 2 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/libc/src/math/generic/hypotf16.cpp b/libc/src/math/generic/hypotf16.cpp
index b7255bc4420db..a7814418f75be 100644
--- a/libc/src/math/generic/hypotf16.cpp
+++ b/libc/src/math/generic/hypotf16.cpp
@@ -51,12 +51,12 @@ LLVM_LIBC_FUNCTION(float16, hypotf16, (float16 x, float16 y)) {
                                           << FPBits::FRACTION_LEN)))
     return x_abs.get_val() + y_abs.get_val();
 
-  float ad = fputil::cast<float>(a_bits.get_val());
-  float bd = fputil::cast<float>(b_bits.get_val());
+  float af = fputil::cast<float>(a_bits.get_val());
+  float bf = fputil::cast<float>(b_bits.get_val());
 
   // These squares are exact.
-  float a_sq = ad * ad;
-  float sum_sq = fputil::multiply_add(bd, bd, a_sq);
+  float a_sq = af * af;
+  float sum_sq = fputil::multiply_add(bf, bf, a_sq);
 
   FloatBits result(fputil::sqrt<float>(sum_sq));
   uint32_t r_u = result.uintval();
@@ -67,7 +67,7 @@ LLVM_LIBC_FUNCTION(float16, hypotf16, (float16 x, float16 y)) {
     float r_d = result.get_val();
 
     // Perform rounding correction.
-    float sum_sq_lo = fputil::multiply_add(bd, bd, a_sq - sum_sq);
+    float sum_sq_lo = fputil::multiply_add(bf, bf, a_sq - sum_sq);
     float err = sum_sq_lo - fputil::multiply_add(r_d, r_d, -sum_sq);
 
     if (err > 0) {
@@ -83,4 +83,5 @@ LLVM_LIBC_FUNCTION(float16, hypotf16, (float16 x, float16 y)) {
 
   return fputil::cast<float16>(result.get_val());
 }
+
 } // namespace LIBC_NAMESPACE_DECL
diff --git a/libc/test/src/math/exhaustive/hypotf16_test.cpp b/libc/test/src/math/exhaustive/hypotf16_test.cpp
index 3ba752bd81f24..bbd900a45031b 100644
--- a/libc/test/src/math/exhaustive/hypotf16_test.cpp
+++ b/libc/test/src/math/exhaustive/hypotf16_test.cpp
@@ -51,7 +51,7 @@ struct Hypotf16Checker : public virtual LIBC_NAMESPACE::testing::Test {
 };
 
 using LlvmLibcHypotf16ExhaustiveTest =
-    LlvmLibcExhaustiveMathTest<Hypotf16Checker>;
+    LlvmLibcExhaustiveMathTest<Hypotf16Checker, 1 << 2>;
 
 TEST_F(LlvmLibcHypotf16ExhaustiveTest, PositiveRange) {
   test_full_range_all_roundings(START, STOP);



More information about the libc-commits mailing list