Revert grisu commits.
authorfloitschV8@gmail.com <floitschV8@gmail.com@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Wed, 10 Mar 2010 21:26:32 +0000 (21:26 +0000)
committerfloitschV8@gmail.com <floitschV8@gmail.com@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Wed, 10 Mar 2010 21:26:32 +0000 (21:26 +0000)
Review URL: http://codereview.chromium.org/804005

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@4092 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

17 files changed:
src/SConscript
src/cached_powers.h [deleted file]
src/checks.h
src/conversions.cc
src/diy_fp.h [deleted file]
src/double.h [deleted file]
src/globals.h
src/grisu3.cc [deleted file]
src/grisu3.h [deleted file]
src/powers_ten.h [deleted file]
test/cctest/SConscript
test/cctest/test-diy_fp.cc [deleted file]
test/cctest/test-double.cc [deleted file]
test/cctest/test-dtoa.h [deleted file]
test/cctest/test-grisu3.cc [deleted file]
tools/generate-ten-powers.scm [deleted file]
tools/gyp/v8.gyp

index 44b6b5b4f5cdad22fa0eac5927891d0e86db8956..d61da3e07898af6bf8d3a3ea44df2ed9e3de52f8 100755 (executable)
@@ -63,7 +63,6 @@ SOURCES = {
     full-codegen.cc
     func-name-inferrer.cc
     global-handles.cc
-    grisu3.cc
     handles.cc
     hashmap.cc
     heap-profiler.cc
diff --git a/src/cached_powers.h b/src/cached_powers.h
deleted file mode 100644 (file)
index 15153c5..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-// Copyright 2010 the V8 project authors. All rights reserved.
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-//       notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-//       copyright notice, this list of conditions and the following
-//       disclaimer in the documentation and/or other materials provided
-//       with the distribution.
-//     * Neither the name of Google Inc. nor the names of its
-//       contributors may be used to endorse or promote products derived
-//       from this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#ifndef V8_CACHED_POWERS_H_
-#define V8_CACHED_POWERS_H_
-
-#include "diy_fp.h"
-
-namespace v8 {
-namespace internal {
-
-struct CachedPower {
-  uint64_t significand;
-  int16_t binary_exponent;
-  int16_t decimal_exponent;
-};
-
-// The following defines implement the interface between this file and the
-// generated 'powers_ten.h'.
-// GRISU_CACHE_NAME(1) contains all possible cached powers.
-// GRISU_CACHE_NAME(i) contains GRISU_CACHE_NAME(1) where only every 'i'th
-// element is kept. More formally GRISU_CACHE_NAME(i) contains the elements j*i
-// with 0 <= j < k with k such that j*k < the size of GRISU_CACHE_NAME(1).
-// The higher 'i' is the fewer elements we use.
-// Given that there are less elements, the exponent-distance between two
-// elements in the cache grows. The variable GRISU_CACHE_MAX_DISTANCE(i) stores
-// the maximum distance between two elements.
-#define GRISU_CACHE_STRUCT CachedPower
-#define GRISU_CACHE_NAME(i) kCachedPowers##i
-#define GRISU_CACHE_MAX_DISTANCE(i) kCachedPowersMaxDistance##i
-#define GRISU_CACHE_OFFSET kCachedPowerOffset
-#define GRISU_UINT64_C V8_2PART_UINT64_C
-// The following include imports the precompiled cached powers.
-#include "powers_ten.h"  // NOLINT
-
-static const double kD_1_LOG2_10 = 0.30102999566398114;  //  1 / lg(10)
-
-// We can't use a function since we reference variables depending on the 'i'.
-// This way the compiler is able to see at compile time that only one
-// cache-array variable is used and thus can remove all the others.
-#define COMPUTE_FOR_CACHE(i) \
-  if (!found && (gamma - alpha + 1 >= GRISU_CACHE_MAX_DISTANCE(i))) {   \
-    int kQ = DiyFp::kSignificandSize;                                   \
-    int k = ceiling((alpha - e + kQ - 1) * kD_1_LOG2_10);               \
-    int index = (GRISU_CACHE_OFFSET + k - 1) / i + 1;                   \
-    cached_power = GRISU_CACHE_NAME(i)[index];                          \
-    found = true;                                                       \
-  }                                                                     \
-
-static void GetCachedPower(int e, int alpha, int gamma, int* mk, DiyFp* c_mk) {
-  // The following if statement should be optimized by the compiler so that only
-  // one array is referenced and the others are not included in the object file.
-  bool found = false;
-  CachedPower cached_power;
-  COMPUTE_FOR_CACHE(20);
-  COMPUTE_FOR_CACHE(19);
-  COMPUTE_FOR_CACHE(18);
-  COMPUTE_FOR_CACHE(17);
-  COMPUTE_FOR_CACHE(16);
-  COMPUTE_FOR_CACHE(15);
-  COMPUTE_FOR_CACHE(14);
-  COMPUTE_FOR_CACHE(13);
-  COMPUTE_FOR_CACHE(12);
-  COMPUTE_FOR_CACHE(11);
-  COMPUTE_FOR_CACHE(10);
-  COMPUTE_FOR_CACHE(9);
-  COMPUTE_FOR_CACHE(8);
-  COMPUTE_FOR_CACHE(7);
-  COMPUTE_FOR_CACHE(6);
-  COMPUTE_FOR_CACHE(5);
-  COMPUTE_FOR_CACHE(4);
-  COMPUTE_FOR_CACHE(3);
-  COMPUTE_FOR_CACHE(2);
-  COMPUTE_FOR_CACHE(1);
-  if (!found) {
-    UNIMPLEMENTED();
-    // Silence compiler warnings.
-    cached_power.significand = 0;
-    cached_power.binary_exponent = 0;
-    cached_power.decimal_exponent = 0;
-  }
-  *c_mk = DiyFp(cached_power.significand, cached_power.binary_exponent);
-  *mk = cached_power.decimal_exponent;
-  ASSERT((alpha <= c_mk->e() + e) && (c_mk->e() + e <= gamma));
-}
-#undef GRISU_REDUCTION
-#undef GRISU_CACHE_STRUCT
-#undef GRISU_CACHE_NAME
-#undef GRISU_CACHE_MAX_DISTANCE
-#undef GRISU_CACHE_OFFSET
-#undef GRISU_UINT64_C
-
-} }  // namespace v8::internal
-
-#endif  // V8_CACHED_POWERS_H_
index cdcd18ad224401c37b63ddc21ff2e6d8505d4cf4..eeb748b4a80d875e16234a4a20b14575b33a7be9 100644 (file)
@@ -80,7 +80,6 @@ static inline void CheckEqualsHelper(const char* file, int line,
   }
 }
 
-
 // Helper function used by the CHECK_EQ function when given int64_t
 // arguments.  Should not be called directly.
 static inline void CheckEqualsHelper(const char* file, int line,
@@ -203,27 +202,6 @@ static inline void CheckEqualsHelper(const char* file,
 }
 
 
-static inline void CheckNonEqualsHelper(const char* file,
-                                     int line,
-                                     const char* expected_source,
-                                     double expected,
-                                     const char* value_source,
-                                     double value) {
-  // Force values to 64 bit memory to truncate 80 bit precision on IA32.
-  volatile double* exp = new double[1];
-  *exp = expected;
-  volatile double* val = new double[1];
-  *val = value;
-  if (*exp == *val) {
-    V8_Fatal(file, line,
-             "CHECK_NE(%s, %s) failed\n#   Value: %f",
-             expected_source, value_source, *val);
-  }
-  delete[] exp;
-  delete[] val;
-}
-
-
 namespace v8 {
   class Value;
   template <class T> class Handle;
index 864b6259c016eb413d4c846f8e89c1e36ba25e36..fd6d38d84d3b80fcef8aaae47e6b0936f4e7632e 100644 (file)
@@ -31,7 +31,6 @@
 
 #include "conversions-inl.h"
 #include "factory.h"
-#include "grisu3.h"
 #include "scanner.h"
 
 namespace v8 {
@@ -383,17 +382,8 @@ const char* DoubleToCString(double v, Vector<char> buffer) {
       int decimal_point;
       int sign;
 
-      char* decimal_rep;
-      bool used_dtoa = false;
-      char grisu_buffer[kGrisu3MaximalLength + 1];
-      int length;
-      if (grisu3(v, grisu_buffer, &sign, &length, &decimal_point)) {
-        decimal_rep = grisu_buffer;
-      } else {
-        decimal_rep = dtoa(v, 0, 0, &decimal_point, &sign, NULL);
-        used_dtoa = true;
-        length = StrLength(decimal_rep);
-      }
+      char* decimal_rep = dtoa(v, 0, 0, &decimal_point, &sign, NULL);
+      int length = StrLength(decimal_rep);
 
       if (sign) builder.AddCharacter('-');
 
@@ -428,7 +418,7 @@ const char* DoubleToCString(double v, Vector<char> buffer) {
         builder.AddFormatted("%d", exponent);
       }
 
-      if (used_dtoa) freedtoa(decimal_rep);
+      freedtoa(decimal_rep);
     }
   }
   return builder.Finalize();
diff --git a/src/diy_fp.h b/src/diy_fp.h
deleted file mode 100644 (file)
index 9cd7003..0000000
+++ /dev/null
@@ -1,136 +0,0 @@
-// Copyright 2010 the V8 project authors. All rights reserved.
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-//       notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-//       copyright notice, this list of conditions and the following
-//       disclaimer in the documentation and/or other materials provided
-//       with the distribution.
-//     * Neither the name of Google Inc. nor the names of its
-//       contributors may be used to endorse or promote products derived
-//       from this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#ifndef V8_DIY_FP_H_
-#define V8_DIY_FP_H_
-
-namespace v8 {
-namespace internal {
-
-// This "Do It Yourself Floating Point" class implements a floating-point number
-// with a uint64 significand and an int exponent. Normalized DiyFp numbers will
-// have the most significant bit of the significand set.
-// Multiplication and Subtraction do not normalize their results.
-// DiyFp are not designed to contain special doubles (NaN and Infinity).
-class DiyFp {
- public:
-  static const int kSignificandSize = 64;
-
-  DiyFp() : f_(0), e_(0) {}
-  DiyFp(uint64_t f, int e) : f_(f), e_(e) {}
-
-  // this = this - other.
-  // The exponents of both numbers must be the same and the significand of this
-  // must be bigger than the significand of other.
-  // The result will not be normalized.
-  void Subtract(const DiyFp& other) {
-    ASSERT(e_ == other.e_);
-    ASSERT(f_ >= other.f_);
-    f_ -= other.f_;
-  }
-
-  // Returns a - b.
-  // The exponents of both numbers must be the same and this must be bigger
-  // than other. The result will not be normalized.
-  static DiyFp Minus(const DiyFp& a, const DiyFp& b) {
-    DiyFp result = a;
-    result.Subtract(b);
-    return result;
-  }
-
-
-  // this = this * other.
-  void Multiply(const DiyFp& other) {
-    // Simply "emulates" a 128 bit multiplication.
-    // However: the resulting number only contains 64 bits. The least
-    // significant 64 bits are only used for rounding the most significant 64
-    // bits.
-    const uint64_t kM32 = 0xFFFFFFFFu;
-    uint64_t a = f_ >> 32;
-    uint64_t b = f_ & kM32;
-    uint64_t c = other.f_ >> 32;
-    uint64_t d = other.f_ & kM32;
-    uint64_t ac = a * c;
-    uint64_t bc = b * c;
-    uint64_t ad = a * d;
-    uint64_t bd = b * d;
-    uint64_t tmp = (bd >> 32) + (ad & kM32) + (bc & kM32);
-    tmp += 1U << 31;  // round
-    uint64_t result_f = ac + (ad >> 32) + (bc >> 32) + (tmp >> 32);
-    e_ += other.e_ + 64;
-    f_ = result_f;
-  }
-
-  // returns a * b;
-  static DiyFp Times(const DiyFp& a, const DiyFp& b) {
-    DiyFp result = a;
-    result.Multiply(b);
-    return result;
-  }
-
-  void Normalize() {
-    ASSERT(f_ != 0);
-    uint64_t f = f_;
-    int e = e_;
-
-    // This method is mainly called for normalizing boundaries. In general
-    // boundaries need to be shifted by 10 bits. We thus optimize for this case.
-    const uint64_t k10MSBits = V8_2PART_UINT64_C(0xFFC00000, 00000000);
-    while ((f & k10MSBits) == 0) {
-      f <<= 10;
-      e -= 10;
-    }
-    while ((f & kUint64MSB) == 0) {
-      f <<= 1;
-      e--;
-    }
-    f_ = f;
-    e_ = e;
-  }
-
-  static DiyFp Normalize(const DiyFp& a) {
-    DiyFp result = a;
-    result.Normalize();
-    return result;
-  }
-
-  uint64_t f() const { return f_; }
-  int e() const { return e_; }
-
-  void set_f(uint64_t new_value) { f_ = new_value; }
-  void set_e(int new_value) { e_ = new_value; }
-
- private:
-  static const uint64_t kUint64MSB = V8_2PART_UINT64_C(0x80000000, 00000000);
-
-  uint64_t f_;
-  int e_;
-};
-
-} }  // namespace v8::internal
-
-#endif  // V8_DIY_FP_H_
diff --git a/src/double.h b/src/double.h
deleted file mode 100644 (file)
index cef0f60..0000000
+++ /dev/null
@@ -1,169 +0,0 @@
-// Copyright 2010 the V8 project authors. All rights reserved.
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-//       notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-//       copyright notice, this list of conditions and the following
-//       disclaimer in the documentation and/or other materials provided
-//       with the distribution.
-//     * Neither the name of Google Inc. nor the names of its
-//       contributors may be used to endorse or promote products derived
-//       from this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#ifndef V8_DOUBLE_H_
-#define V8_DOUBLE_H_
-
-#include "diy_fp.h"
-
-namespace v8 {
-namespace internal {
-
-// We assume that doubles and uint64_t have the same endianness.
-static uint64_t double_to_uint64(double d) { return bit_cast<uint64_t>(d); }
-static double uint64_to_double(uint64_t d64) { return bit_cast<double>(d64); }
-
-// Helper functions for doubles.
-class Double {
- public:
-  static const uint64_t kSignMask = V8_2PART_UINT64_C(0x80000000, 00000000);
-  static const uint64_t kExponentMask = V8_2PART_UINT64_C(0x7FF00000, 00000000);
-  static const uint64_t kSignificandMask =
-      V8_2PART_UINT64_C(0x000FFFFF, FFFFFFFF);
-  static const uint64_t kHiddenBit = V8_2PART_UINT64_C(0x00100000, 00000000);
-
-  Double() : d64_(0.0) {}
-  explicit Double(double d) : d64_(double_to_uint64(d)) {}
-  explicit Double(uint64_t d64) : d64_(d64) {}
-
-  DiyFp AsDiyFp() const {
-    ASSERT(!IsSpecial());
-    return DiyFp(Significand(), Exponent());
-  }
-
-  // this->Significand() must not be 0.
-  DiyFp AsNormalizedDiyFp() const {
-    uint64_t f = Significand();
-    int e = Exponent();
-
-    ASSERT(f != 0);
-
-    // The current double could be a denormal.
-    while ((f & kHiddenBit) == 0) {
-      f <<= 1;
-      e--;
-    }
-    // Do the final shifts in one go. Don't forget the hidden bit (the '-1').
-    f <<= DiyFp::kSignificandSize - kSignificandSize - 1;
-    e -= DiyFp::kSignificandSize - kSignificandSize - 1;
-    return DiyFp(f, e);
-  }
-
-  // Returns the double's bit as uint64.
-  uint64_t AsUint64() const {
-    return d64_;
-  }
-
-  int Exponent() const {
-    if (IsDenormal()) return kDenormalExponent;
-
-    uint64_t d64 = AsUint64();
-    int biased_e = (d64 & kExponentMask) >> kSignificandSize;
-    return biased_e - kExponentBias;
-  }
-
-  uint64_t Significand() const {
-    uint64_t d64 = AsUint64();
-    uint64_t significand = d64 & kSignificandMask;
-    if (!IsDenormal()) {
-      return significand + kHiddenBit;
-    } else {
-      return significand;
-    }
-  }
-
-  // Returns true if the double is a denormal.
-  bool IsDenormal() const {
-    uint64_t d64 = AsUint64();
-    return (d64 & kExponentMask) == 0;
-  }
-
-  // We consider denormals not to be special.
-  // Hence only Infinity and NaN are special.
-  bool IsSpecial() const {
-    uint64_t d64 = AsUint64();
-    return (d64 & kExponentMask) == kExponentMask;
-  }
-
-  bool IsNan() const {
-    uint64_t d64 = AsUint64();
-    return ((d64 & kExponentMask) == kExponentMask) &&
-        ((d64 & kSignificandMask) != 0);
-  }
-
-
-  bool IsInfinite() const {
-    uint64_t d64 = AsUint64();
-    return ((d64 & kExponentMask) == kExponentMask) &&
-        ((d64 & kSignificandMask) == 0);
-  }
-
-
-  int Sign() const {
-    uint64_t d64 = AsUint64();
-    return (d64 & kSignMask) == 0? 1: -1;
-  }
-
-
-  // Returns the two boundaries of this.
-  // The bigger boundary (m_plus) is normalized. The lower boundary has the same
-  // exponent as m_plus.
-  void NormalizedBoundaries(DiyFp* out_m_minus, DiyFp* out_m_plus) const {
-    DiyFp v = this->AsDiyFp();
-    bool significand_is_zero = (v.f() == kHiddenBit);
-    DiyFp m_plus = DiyFp::Normalize(DiyFp((v.f() << 1) + 1, v.e() - 1));
-    DiyFp m_minus;
-    if (significand_is_zero && v.e() != kDenormalExponent) {
-      // The boundary is closer. Think of v = 1000e10 and v- = 9999e9.
-      // Then the boundary (== (v - v-)/2) is not just at a distance of 1e9 but
-      // at a distance of 1e8.
-      // The only exception is for the smallest normal: the largest denormal is
-      // at the same distance as its successor.
-      // Note: denormals have the same exponent as the smallest normals.
-      m_minus = DiyFp((v.f() << 2) - 1, v.e() - 2);
-    } else {
-      m_minus = DiyFp((v.f() << 1) - 1, v.e() - 1);
-    }
-    m_minus.set_f(m_minus.f() << (m_minus.e() - m_plus.e()));
-    m_minus.set_e(m_plus.e());
-    *out_m_plus = m_plus;
-    *out_m_minus = m_minus;
-  }
-
-  double value() const { return uint64_to_double(d64_); }
-
- private:
-  static const int kSignificandSize = 52;  // Excludes the hidden bit.
-  static const int kExponentBias = 0x3FF + kSignificandSize;
-  static const int kDenormalExponent = -kExponentBias + 1;
-
-  uint64_t d64_;
-};
-
-} }  // namespace v8::internal
-
-#endif  // V8_DOUBLE_H_
index 7be6211aa42f957c15f763b6f55cc50caed2792d..3840feef4319925cbcd0ed445bb077f09ac6094e 100644 (file)
@@ -98,11 +98,6 @@ typedef byte* Address;
 #define V8_PTR_PREFIX ""
 #endif  // V8_HOST_ARCH_64_BIT
 
-// The following macro works on both 32 and 64-bit platforms.
-// Usage: instead of writing 0x1234567890123456
-//      write V8_2PART_UINT64_C(0x12345678,90123456);
-#define V8_2PART_UINT64_C(a, b) (((static_cast<uint64_t>(a) << 32) + 0x##b##u))
-
 #define V8PRIxPTR V8_PTR_PREFIX "x"
 #define V8PRIdPTR V8_PTR_PREFIX "d"
 
diff --git a/src/grisu3.cc b/src/grisu3.cc
deleted file mode 100644 (file)
index de83942..0000000
+++ /dev/null
@@ -1,477 +0,0 @@
-// Copyright 2010 the V8 project authors. All rights reserved.
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-//       notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-//       copyright notice, this list of conditions and the following
-//       disclaimer in the documentation and/or other materials provided
-//       with the distribution.
-//     * Neither the name of Google Inc. nor the names of its
-//       contributors may be used to endorse or promote products derived
-//       from this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#include "v8.h"
-
-#include "grisu3.h"
-
-#include "cached_powers.h"
-#include "diy_fp.h"
-#include "double.h"
-
-namespace v8 {
-namespace internal {
-
-template <int alpha = -60, int gamma = -32>
-class Grisu3 {
- public:
-  // Provides a decimal representation of v.
-  // Returns true if it succeeds, otherwise the result can not be trusted.
-  // There will be *length digits inside the buffer (not null-terminated).
-  // If the function returns true then
-  //        v == (double) (buffer * 10^decimal_exponent).
-  // The digits in the buffer are the shortest representation possible: no
-  // 0.099999999999 instead of 0.1.
-  // The last digit will be closest to the actual v. That is, even if several
-  // digits might correctly yield 'v' when read again, the closest will be
-  // computed.
-  static bool grisu3(double v,
-                     char* buffer, int* length, int* decimal_exponent);
-
- private:
-  // Rounds the buffer according to the rest.
-  // If there is too much imprecision to round then false is returned.
-  // Similarily false is returned when the buffer is not within Delta.
-  static bool RoundWeed(char* buffer, int len, uint64_t wp_W, uint64_t Delta,
-                        uint64_t rest, uint64_t ten_kappa, uint64_t ulp);
-  // Dispatches to the a specialized digit-generation routine. The chosen
-  // routine depends on w.e (which in turn depends on alpha and gamma).
-  // Currently there is only one digit-generation routine, but it would be easy
-  // to add others.
-  static bool DigitGen(DiyFp low, DiyFp w, DiyFp high,
-                       char* buffer, int* len, int* kappa);
-  // Generates w's digits. The result is the shortest in the interval low-high.
-  // All DiyFp are assumed to be imprecise and this function takes this
-  // imprecision into account. If the function cannot compute the best
-  // representation (due to the imprecision) then false is returned.
-  static bool DigitGen_m60_m32(DiyFp low, DiyFp w, DiyFp high,
-                               char* buffer, int* length, int* kappa);
-};
-
-
-template<int alpha, int gamma>
-bool Grisu3<alpha, gamma>::grisu3(
-    double v, char* buffer, int* length, int* decimal_exponent) {
-  DiyFp w = Double(v).AsNormalizedDiyFp();
-  // boundary_minus and boundary_plus are the boundaries between v and its
-  // neighbors. Any number strictly between boundary_minus and boundary_plus
-  // will round to v when read as double.
-  // Grisu3 will never output representations that lie exactly on a boundary.
-  DiyFp boundary_minus, boundary_plus;
-  Double(v).NormalizedBoundaries(&boundary_minus, &boundary_plus);
-  ASSERT(boundary_plus.e() == w.e());
-  DiyFp ten_mk;  // Cached power of ten: 10^-k
-  int mk;        // -k
-  GetCachedPower(w.e() + DiyFp::kSignificandSize, alpha, gamma, &mk, &ten_mk);
-  ASSERT(alpha <= w.e() + ten_mk.e() + DiyFp::kSignificandSize &&
-         gamma >= w.e() + ten_mk.e() + DiyFp::kSignificandSize);
-  // Note that ten_mk is only an approximation of 10^-k. A DiyFp only contains a
-  // 64 bit significand and ten_mk is thus only precise up to 64 bits.
-
-  // The DiyFp::Times procedure rounds its result, and ten_mk is approximated
-  // too. The variable scaled_w (as well as scaled_boundary_minus/plus) are now
-  // off by a small amount.
-  // In fact: scaled_w - w*10^k < 1ulp (unit in the last place) of scaled_w.
-  // In other words: let f = scaled_w.f() and e = scaled_w.e(), then
-  //           (f-1) * 2^e < w*10^k < (f+1) * 2^e
-  DiyFp scaled_w = DiyFp::Times(w, ten_mk);
-  ASSERT(scaled_w.e() ==
-         boundary_plus.e() + ten_mk.e() + DiyFp::kSignificandSize);
-  // In theory it would be possible to avoid some recomputations by computing
-  // the difference between w and boundary_minus/plus (a power of 2) and to
-  // compute scaled_boundary_minus/plus by subtracting/adding from
-  // scaled_w. However the code becomes much less readable and the speed
-  // enhancements are not terriffic.
-  DiyFp scaled_boundary_minus = DiyFp::Times(boundary_minus, ten_mk);
-  DiyFp scaled_boundary_plus  = DiyFp::Times(boundary_plus,  ten_mk);
-
-  // DigitGen will generate the digits of scaled_w. Therefore we have
-  // v == (double) (scaled_w * 10^-mk).
-  // Set decimal_exponent == -mk and pass it to DigitGen. If scaled_w is not an
-  // integer than it will be updated. For instance if scaled_w == 1.23 then
-  // the buffer will be filled with "123" und the decimal_exponent will be
-  // decreased by 2.
-  int kappa;
-  bool result = DigitGen(scaled_boundary_minus, scaled_w, scaled_boundary_plus,
-                         buffer, length, &kappa);
-  *decimal_exponent = -mk + kappa;
-  return result;
-}
-
-// Generates the digits of input number w.
-// w is a floating-point number (DiyFp), consisting of a significand and an
-// exponent. Its exponent is bounded by alpha and gamma. Typically alpha >= -63
-// and gamma <= 3.
-// Returns false if it fails, in which case the generated digits in the buffer
-// should not be used.
-// Preconditions:
-//  * low, w and high are correct up to 1 ulp (unit in the last place). That
-//    is, their error must be less that a unit of their last digits.
-//  * low.e() == w.e() == high.e()
-//  * low < w < high, and taking into account their error: low~ <= high~
-//  * alpha <= w.e() <= gamma
-// Postconditions: returns false if procedure fails.
-//   otherwise:
-//     * buffer is not null-terminated, but len contains the number of digits.
-//     * buffer contains the shortest possible decimal digit-sequence
-//       such that LOW < buffer * 10^kappa < HIGH, where LOW and HIGH are the
-//       correct values of low and high (without their error).
-//     * if more than one decimal representation gives the minimal number of
-//       decimal digits then the one closest to W (where W is the correct value
-//       of w) is chosen.
-// Remark: this procedure takes into account the imprecision of its input
-//   numbers. If the precision is not enough to guarantee all the postconditions
-//   then false is returned. This usually happens rarely (~0.5%).
-template<int alpha, int gamma>
-bool Grisu3<alpha, gamma>::DigitGen(
-    DiyFp low, DiyFp w, DiyFp high, char* buffer, int* len, int* kappa) {
-  ASSERT(low.e() == w.e() && w.e() == high.e());
-  ASSERT(low.f() + 1 <= high.f() - 1);
-  ASSERT(alpha <= w.e() && w.e() <= gamma);
-  // The following tests use alpha and gamma to avoid unnecessary dynamic tests.
-  if ((alpha >= -60 && gamma <= -32) ||  // -60 <= w.e() <= -32
-      (alpha <= -32 && gamma >= -60 &&   // Alpha/gamma overlaps -60/-32 region.
-       -60 <= w.e() && w.e() <= -32)) {
-    return DigitGen_m60_m32(low, w, high, buffer, len, kappa);
-  } else {
-    // A simple adaption of the special case -60/-32 would allow greater ranges
-    // of alpha/gamma and thus reduce the number of precomputed cached powers of
-    // ten.
-    UNIMPLEMENTED();
-    return false;
-  }
-}
-
-static const uint32_t kTen4 = 10000;
-static const uint32_t kTen5 = 100000;
-static const uint32_t kTen6 = 1000000;
-static const uint32_t kTen7 = 10000000;
-static const uint32_t kTen8 = 100000000;
-static const uint32_t kTen9 = 1000000000;
-
-// Returns the biggest power of ten that is <= than the given number. We
-// furthermore receive the maximum number of bits 'number' has.
-// If number_bits == 0 then 0^-1 is returned
-// The number of bits must be <= 32.
-static void BiggestPowerTen(uint32_t number, int number_bits,
-                            uint32_t* power, int* exponent) {
-  switch (number_bits) {
-    case 32:
-    case 31:
-    case 30:
-      if (kTen9 <= number) {
-        *power = kTen9;
-        *exponent = 9;
-        break;
-      }  // else fallthrough
-    case 29:
-    case 28:
-    case 27:
-      if (kTen8 <= number) {
-        *power = kTen8;
-        *exponent = 8;
-        break;
-      }  // else fallthrough
-    case 26:
-    case 25:
-    case 24:
-      if (kTen7 <= number) {
-        *power = kTen7;
-        *exponent = 7;
-        break;
-      }  // else fallthrough
-    case 23:
-    case 22:
-    case 21:
-    case 20:
-      if (kTen6 <= number) {
-        *power = kTen6;
-        *exponent = 6;
-        break;
-      }  // else fallthrough
-    case 19:
-    case 18:
-    case 17:
-      if (kTen5 <= number) {
-        *power = kTen5;
-        *exponent = 5;
-        break;
-      }  // else fallthrough
-    case 16:
-    case 15:
-    case 14:
-      if (kTen4 <= number) {
-        *power = kTen4;
-        *exponent = 4;
-        break;
-      }  // else fallthrough
-    case 13:
-    case 12:
-    case 11:
-    case 10:
-      if (1000 <= number) {
-        *power = 1000;
-        *exponent = 3;
-        break;
-      }  // else fallthrough
-    case 9:
-    case 8:
-    case 7:
-      if (100 <= number) {
-        *power = 100;
-        *exponent = 2;
-        break;
-      }  // else fallthrough
-    case 6:
-    case 5:
-    case 4:
-      if (10 <= number) {
-        *power = 10;
-        *exponent = 1;
-        break;
-      }  // else fallthrough
-    case 3:
-    case 2:
-    case 1:
-      if (1 <= number) {
-        *power = 1;
-        *exponent = 0;
-        break;
-      }  // else fallthrough
-    case 0:
-      *power = 0;
-      *exponent = -1;
-      break;
-    default:
-      // Following assignments are here to silence compiler warnings.
-      *power = 0;
-      *exponent = 0;
-      UNREACHABLE();
-  }
-}
-
-
-// Same comments as for DigitGen but with additional precondition:
-//    -60 <= w.e() <= -32
-//
-// Say, for the sake of example, that
-//   w.e() == -48, and w.f() == 0x1234567890abcdef
-// w's value can be computed by w.f() * 2^w.e()
-// We can obtain w's integral digits by simply shifting w.f() by -w.e().
-//  -> w's integral part is 0x1234
-//  w's fractional part is therefore 0x567890abcdef.
-// Printing w's integral part is easy (simply print 0x1234 in decimal).
-// In order to print its fraction we repeatedly multiply the fraction by 10 and
-// get each digit. Example the first digit after the comma would be computed by
-//   (0x567890abcdef * 10) >> 48. -> 3
-// The whole thing becomes slightly more complicated because we want to stop
-// once we have enough digits. That is, once the digits inside the buffer
-// represent 'w' we can stop. Everything inside the interval low - high
-// represents w. However we have to pay attention to low, high and w's
-// imprecision.
-template<int alpha, int gamma>
-bool Grisu3<alpha, gamma>::DigitGen_m60_m32(
-    DiyFp low, DiyFp w, DiyFp high, char* buffer, int* length, int* kappa) {
-  // low, w and high are imprecise, but by less than one ulp (unit in the last
-  // place).
-  // If we remove (resp. add) 1 ulp from low (resp. high) we are certain that
-  // the new numbers are outside of the interval we want the final
-  // representation to lie in.
-  // Inversely adding (resp. removing) 1 ulp from low (resp. high) would yield
-  // numbers that are certain to lie in the interval. We will use this fact
-  // later on.
-  // We will now start by generating the digits within the uncertain
-  // interval. Later we will weed out representations that lie outside the safe
-  // interval and thus _might_ lie outside the correct interval.
-  uint64_t unit = 1;
-  DiyFp too_low = DiyFp(low.f() - unit, low.e());
-  DiyFp too_high = DiyFp(high.f() + unit, high.e());
-  // too_low and too_high are guaranteed to lie outside the interval we want the
-  // generated number in.
-  DiyFp unsafe_interval = DiyFp::Minus(too_high, too_low);
-  // We now cut the input number into two parts: the integral digits and the
-  // fractionals. We will not write any decimal separator though, but adapt
-  // kappa instead.
-  // Reminder: we are currently computing the digits (stored inside the buffer)
-  // such that:   too_low < buffer * 10^kappa < too_high
-  // We use too_high for the digit_generation and stop as soon as possible.
-  // If we stop early we effectively round down.
-  DiyFp one = DiyFp(static_cast<uint64_t>(1) << -w.e(), w.e());
-  uint32_t integrals = too_high.f() >> -one.e();        // Division by one.
-  uint64_t fractionals = too_high.f() & (one.f() - 1);  // Modulo by one.
-  uint32_t divider;
-  int divider_exponent;
-  BiggestPowerTen(integrals, DiyFp::kSignificandSize - (-one.e()),
-                  &divider, &divider_exponent);
-  *kappa = divider_exponent + 1;
-  *length = 0;
-  // Loop invariant: buffer = too_high / 10^kappa  (integer division)
-  // The invariant holds for the first iteration: kappa has been initialized
-  // with the divider exponent + 1. And the divider is the biggest power of ten
-  // that fits into the bits that had been reserved for the integrals.
-  while (*kappa > 0) {
-    int digit = integrals / divider;
-    buffer[*length] = '0' + digit;
-    (*length)++;
-    integrals %= divider;
-    (*kappa)--;
-    // Note that kappa now equals the exponent of the divider and that the
-    // invariant thus holds again.
-    uint64_t rest =
-        (static_cast<uint64_t>(integrals) << -one.e()) + fractionals;
-    // Invariant: too_high = buffer * 10^kappa + DiyFp(rest, one.e())
-    // Reminder: unsafe_interval.e() == one.e()
-    if (rest < unsafe_interval.f()) {
-      // Rounding down (by not emitting the remaining digits) yields a number
-      // that lies within the unsafe interval.
-      return RoundWeed(buffer, *length, DiyFp::Minus(too_high, w).f(),
-                       unsafe_interval.f(), rest,
-                       static_cast<uint64_t>(divider) << -one.e(), unit);
-    }
-    divider /= 10;
-  }
-
-  // The integrals have been generated. We are at the point of the decimal
-  // separator. In the following loop we simply multiply the remaining digits by
-  // 10 and divide by one. We just need to pay attention to multiply associated
-  // data (like the interval or 'unit'), too.
-  // Instead of multiplying by 10 we multiply by 5 (cheaper operation) and
-  // increase its (imaginary) exponent. At the same time we decrease the
-  // divider's (one's) exponent and shift its significand.
-  // Basically, if fractionals was a DiyFp (with fractionals.e == one.e):
-  //      fractionals.f *= 10;
-  //      fractionals.f >>= 1; fractionals.e++; // value remains unchanged.
-  //      one.f >>= 1; one.e++;                 // value remains unchanged.
-  //      and we have again fractionals.e == one.e which allows us to divide
-  //           fractionals.f() by one.f()
-  // We simply combine the *= 10 and the >>= 1.
-  while (true) {
-    fractionals *= 5;
-    unit *= 5;
-    unsafe_interval.set_f(unsafe_interval.f() * 5);
-    unsafe_interval.set_e(unsafe_interval.e() + 1);  // Will be optimized out.
-    one.set_f(one.f() >> 1);
-    one.set_e(one.e() + 1);
-    int digit = fractionals >> -one.e();  // Integer division by one.
-    buffer[*length] = '0' + digit;
-    (*length)++;
-    fractionals &= one.f() - 1;  // Modulo by one.
-    (*kappa)--;
-    if (fractionals < unsafe_interval.f()) {
-      return RoundWeed(buffer, *length, DiyFp::Minus(too_high, w).f() * unit,
-                       unsafe_interval.f(), fractionals, one.f(), unit);
-    }
-  }
-}
-
-
-// Rounds the given generated digits in the buffer and weeds out generated
-// digits that are not in the safe interval, or where we cannot find a rounded
-// representation.
-// Input: * buffer containing the digits of too_high / 10^kappa
-//        * the buffer's length
-//        * distance_too_high_w == (too_high - w).f() * unit
-//        * unsafe_interval == (too_high - too_low).f() * unit
-//        * rest = (too_high - buffer * 10^kappa).f() * unit
-//        * ten_kappa = 10^kappa * unit
-//        * unit = the common multiplier
-// Output: returns true on success.
-//    Modifies the generated digits in the buffer to approach (round towards) w.
-template<int alpha, int gamma>
-bool Grisu3<alpha, gamma>::RoundWeed(
-    char* buffer, int length, uint64_t distance_too_high_w,
-    uint64_t unsafe_interval, uint64_t rest, uint64_t ten_kappa,
-    uint64_t unit) {
-  uint64_t small_distance = distance_too_high_w - unit;
-  uint64_t big_distance = distance_too_high_w + unit;
-  // Let w- = too_high - big_distance, and
-  //     w+ = too_high - small_distance.
-  // Note: w- < w < w+
-  //
-  // The real w (* unit) must lie somewhere inside the interval
-  // ]w-; w+[ (often written as "(w-; w+)")
-
-  // Basically the buffer currently contains a number in the unsafe interval
-  // ]too_low; too_high[ with too_low < w < too_high
-  //
-  // By generating the digits of too_high we got the biggest last digit.
-  // In the case that w+ < buffer < too_high we try to decrement the buffer.
-  // This way the buffer approaches (rounds towards) w.
-  // There are 3 conditions that stop the decrementation process:
-  //   1) the buffer is already below w+
-  //   2) decrementing the buffer would make it leave the unsafe interval
-  //   3) decrementing the buffer would yield a number below w+ and farther away
-  //      than the current number. In other words:
-  //                       (buffer{-1} < w+) && w+ - buffer{-1} > buffer - w+
-  // Instead of using the buffer directly we use its distance to too_high.
-  // Conceptually rest ~= too_high - buffer
-  while (rest < small_distance &&  // Negated condition 1
-         unsafe_interval - rest >= ten_kappa &&  // Negated condition 2
-         (rest + ten_kappa < small_distance ||  // buffer{-1} > w+
-          small_distance - rest >= rest + ten_kappa - small_distance)) {
-    buffer[length - 1]--;
-    rest += ten_kappa;
-  }
-
-  // We have approached w+ as much as possible. We now test if approaching w-
-  // would require changing the buffer. If yes, then we have two possible
-  // representations close to w, but we cannot decide which one is closer.
-  if (rest < big_distance &&
-      unsafe_interval - rest >= ten_kappa &&
-      (rest + ten_kappa < big_distance ||
-       big_distance - rest > rest + ten_kappa - big_distance)) {
-    return false;
-  }
-
-  // Weeding test.
-  //   The safe interval is [too_low + 2 ulp; too_high - 2 ulp]
-  //   Since too_low = too_high - unsafe_interval this is equivalent too
-  //      [too_high - unsafe_interval + 4 ulp; too_high - 2 ulp]
-  //   Conceptually we have: rest ~= too_high - buffer
-  return (2 * unit <= rest) && (rest <= unsafe_interval - 4 * unit);
-}
-
-
-bool grisu3(double v,
-            char* buffer, int* sign, int* length, int* decimal_point) {
-  ASSERT(v != 0);
-  ASSERT(!Double(v).IsSpecial());
-
-  if (v < 0) {
-    v = -v;
-    *sign = 1;
-  } else {
-    *sign = 0;
-  }
-  int decimal_exponent;
-  bool result = Grisu3<-60, -32>::grisu3(v, buffer, length, &decimal_exponent);
-  *decimal_point = *length + decimal_exponent;
-  buffer[*length] = '\0';
-  return result;
-}
-
-} }  // namespace v8::internal
diff --git a/src/grisu3.h b/src/grisu3.h
deleted file mode 100644 (file)
index b41ca37..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright 2010 the V8 project authors. All rights reserved.
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-//       notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-//       copyright notice, this list of conditions and the following
-//       disclaimer in the documentation and/or other materials provided
-//       with the distribution.
-//     * Neither the name of Google Inc. nor the names of its
-//       contributors may be used to endorse or promote products derived
-//       from this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-#ifndef V8_GRISU3_H_
-#define V8_GRISU3_H_
-
-namespace v8 {
-namespace internal {
-
-// Grisu3 will produce at most kGrisu3MaximalLength digits. This does not
-// include the terminating '\0' character.
-static const int kGrisu3MaximalLength = 17;
-
-// Provides a decimal representation of v.
-//   v must satisfy v != 0 and it must not be Infinity or NaN.
-// Returns true if it succeeds, otherwise the result can not be trusted.
-// There will be *length digits inside the buffer followed by a null terminator.
-// If the function returns true then
-//   v == (double) (buffer * 10^(decimal-point - length)).
-// The digits in the buffer are the shortest representation possible: no
-// 0.099999999999 instead of 0.1.
-// The last digit will be closest to the actual v. That is, even if several
-// digits might correctly yield 'v' when read again, the buffer will contain the
-// one closest to v.
-// The variable 'sign' will be '0' if the given number is positive, and '1'
-//   otherwise.
-bool grisu3(double d, char* buffer, int* sign, int* length, int* decimal_point);
-
-} }  // namespace v8::internal
-
-#endif  // V8_GRISU3_H_
diff --git a/src/powers_ten.h b/src/powers_ten.h
deleted file mode 100644 (file)
index 3619ab1..0000000
+++ /dev/null
@@ -1,2460 +0,0 @@
-// ------------ GENERATED FILE ----------------
-// command used:
-//  tools/generate-ten-powers --from -308 --to 342 --mantissa-size 64 --round round -o src/powers_ten.h  // NOLINT
-
-// This file is intended to be included inside another .h or .cc files
-// with the following defines set:
-//  GRISU_CACHE_STRUCT: should expand to the name of a struct that will
-//   hold the cached powers of ten. Each entry will hold a 64-bit
-//   significand, a 16-bit signed binary exponent, and a 16-bit
-//   signed decimal exponent. Each entry will be constructed as follows:
-//      { significand, binary_exponent, decimal_exponent }.
-//  GRISU_CACHE_NAME(i): generates the name for the different caches.
-//   The parameter i will be a number in the range 1-20. A cache will
-//   hold every i'th element of a full cache. GRISU_CACHE_NAME(1) will
-//   thus hold all elements. The higher i the fewer elements it has.
-//   Ideally the user should only reference one cache and let the
-//   compiler remove the unused ones.
-//  GRISU_CACHE_MAX_DISTANCE(i): generates the name for the maximum
-//   binary exponent distance between all elements of a given cache.
-//  GRISU_CACHE_OFFSET: is used as variable name for the decimal
-//   exponent offset. It is equal to -cache[0].decimal_exponent.
-//  GRISU_UINT64_C: used to construct 64-bit values in a platform
-//   independent way. In order to encode 0x123456789ABCDEF0 the macro
-//   will be invoked as follows: GRISU_UINT64_C(0x12345678,9ABCDEF0).
-
-
-static const GRISU_CACHE_STRUCT GRISU_CACHE_NAME(1)[] = {
-  {GRISU_UINT64_C(0xe61acf03, 3d1a45df), -1087, -308},
-  {GRISU_UINT64_C(0x8fd0c162, 06306bac), -1083, -307},
-  {GRISU_UINT64_C(0xb3c4f1ba, 87bc8697), -1080, -306},
-  {GRISU_UINT64_C(0xe0b62e29, 29aba83c), -1077, -305},
-  {GRISU_UINT64_C(0x8c71dcd9, ba0b4926), -1073, -304},
-  {GRISU_UINT64_C(0xaf8e5410, 288e1b6f), -1070, -303},
-  {GRISU_UINT64_C(0xdb71e914, 32b1a24b), -1067, -302},
-  {GRISU_UINT64_C(0x892731ac, 9faf056f), -1063, -301},
-  {GRISU_UINT64_C(0xab70fe17, c79ac6ca), -1060, -300},
-  {GRISU_UINT64_C(0xd64d3d9d, b981787d), -1057, -299},
-  {GRISU_UINT64_C(0x85f04682, 93f0eb4e), -1053, -298},
-  {GRISU_UINT64_C(0xa76c5823, 38ed2622), -1050, -297},
-  {GRISU_UINT64_C(0xd1476e2c, 07286faa), -1047, -296},
-  {GRISU_UINT64_C(0x82cca4db, 847945ca), -1043, -295},
-  {GRISU_UINT64_C(0xa37fce12, 6597973d), -1040, -294},
-  {GRISU_UINT64_C(0xcc5fc196, fefd7d0c), -1037, -293},
-  {GRISU_UINT64_C(0xff77b1fc, bebcdc4f), -1034, -292},
-  {GRISU_UINT64_C(0x9faacf3d, f73609b1), -1030, -291},
-  {GRISU_UINT64_C(0xc795830d, 75038c1e), -1027, -290},
-  {GRISU_UINT64_C(0xf97ae3d0, d2446f25), -1024, -289},
-  {GRISU_UINT64_C(0x9becce62, 836ac577), -1020, -288},
-  {GRISU_UINT64_C(0xc2e801fb, 244576d5), -1017, -287},
-  {GRISU_UINT64_C(0xf3a20279, ed56d48a), -1014, -286},
-  {GRISU_UINT64_C(0x9845418c, 345644d7), -1010, -285},
-  {GRISU_UINT64_C(0xbe5691ef, 416bd60c), -1007, -284},
-  {GRISU_UINT64_C(0xedec366b, 11c6cb8f), -1004, -283},
-  {GRISU_UINT64_C(0x94b3a202, eb1c3f39), -1000, -282},
-  {GRISU_UINT64_C(0xb9e08a83, a5e34f08), -997, -281},
-  {GRISU_UINT64_C(0xe858ad24, 8f5c22ca), -994, -280},
-  {GRISU_UINT64_C(0x91376c36, d99995be), -990, -279},
-  {GRISU_UINT64_C(0xb5854744, 8ffffb2e), -987, -278},
-  {GRISU_UINT64_C(0xe2e69915, b3fff9f9), -984, -277},
-  {GRISU_UINT64_C(0x8dd01fad, 907ffc3c), -980, -276},
-  {GRISU_UINT64_C(0xb1442798, f49ffb4b), -977, -275},
-  {GRISU_UINT64_C(0xdd95317f, 31c7fa1d), -974, -274},
-  {GRISU_UINT64_C(0x8a7d3eef, 7f1cfc52), -970, -273},
-  {GRISU_UINT64_C(0xad1c8eab, 5ee43b67), -967, -272},
-  {GRISU_UINT64_C(0xd863b256, 369d4a41), -964, -271},
-  {GRISU_UINT64_C(0x873e4f75, e2224e68), -960, -270},
-  {GRISU_UINT64_C(0xa90de353, 5aaae202), -957, -269},
-  {GRISU_UINT64_C(0xd3515c28, 31559a83), -954, -268},
-  {GRISU_UINT64_C(0x8412d999, 1ed58092), -950, -267},
-  {GRISU_UINT64_C(0xa5178fff, 668ae0b6), -947, -266},
-  {GRISU_UINT64_C(0xce5d73ff, 402d98e4), -944, -265},
-  {GRISU_UINT64_C(0x80fa687f, 881c7f8e), -940, -264},
-  {GRISU_UINT64_C(0xa139029f, 6a239f72), -937, -263},
-  {GRISU_UINT64_C(0xc9874347, 44ac874f), -934, -262},
-  {GRISU_UINT64_C(0xfbe91419, 15d7a922), -931, -261},
-  {GRISU_UINT64_C(0x9d71ac8f, ada6c9b5), -927, -260},
-  {GRISU_UINT64_C(0xc4ce17b3, 99107c23), -924, -259},
-  {GRISU_UINT64_C(0xf6019da0, 7f549b2b), -921, -258},
-  {GRISU_UINT64_C(0x99c10284, 4f94e0fb), -917, -257},
-  {GRISU_UINT64_C(0xc0314325, 637a193a), -914, -256},
-  {GRISU_UINT64_C(0xf03d93ee, bc589f88), -911, -255},
-  {GRISU_UINT64_C(0x96267c75, 35b763b5), -907, -254},
-  {GRISU_UINT64_C(0xbbb01b92, 83253ca3), -904, -253},
-  {GRISU_UINT64_C(0xea9c2277, 23ee8bcb), -901, -252},
-  {GRISU_UINT64_C(0x92a1958a, 7675175f), -897, -251},
-  {GRISU_UINT64_C(0xb749faed, 14125d37), -894, -250},
-  {GRISU_UINT64_C(0xe51c79a8, 5916f485), -891, -249},
-  {GRISU_UINT64_C(0x8f31cc09, 37ae58d3), -887, -248},
-  {GRISU_UINT64_C(0xb2fe3f0b, 8599ef08), -884, -247},
-  {GRISU_UINT64_C(0xdfbdcece, 67006ac9), -881, -246},
-  {GRISU_UINT64_C(0x8bd6a141, 006042be), -877, -245},
-  {GRISU_UINT64_C(0xaecc4991, 4078536d), -874, -244},
-  {GRISU_UINT64_C(0xda7f5bf5, 90966849), -871, -243},
-  {GRISU_UINT64_C(0x888f9979, 7a5e012d), -867, -242},
-  {GRISU_UINT64_C(0xaab37fd7, d8f58179), -864, -241},
-  {GRISU_UINT64_C(0xd5605fcd, cf32e1d7), -861, -240},
-  {GRISU_UINT64_C(0x855c3be0, a17fcd26), -857, -239},
-  {GRISU_UINT64_C(0xa6b34ad8, c9dfc070), -854, -238},
-  {GRISU_UINT64_C(0xd0601d8e, fc57b08c), -851, -237},
-  {GRISU_UINT64_C(0x823c1279, 5db6ce57), -847, -236},
-  {GRISU_UINT64_C(0xa2cb1717, b52481ed), -844, -235},
-  {GRISU_UINT64_C(0xcb7ddcdd, a26da269), -841, -234},
-  {GRISU_UINT64_C(0xfe5d5415, 0b090b03), -838, -233},
-  {GRISU_UINT64_C(0x9efa548d, 26e5a6e2), -834, -232},
-  {GRISU_UINT64_C(0xc6b8e9b0, 709f109a), -831, -231},
-  {GRISU_UINT64_C(0xf867241c, 8cc6d4c1), -828, -230},
-  {GRISU_UINT64_C(0x9b407691, d7fc44f8), -824, -229},
-  {GRISU_UINT64_C(0xc2109436, 4dfb5637), -821, -228},
-  {GRISU_UINT64_C(0xf294b943, e17a2bc4), -818, -227},
-  {GRISU_UINT64_C(0x979cf3ca, 6cec5b5b), -814, -226},
-  {GRISU_UINT64_C(0xbd8430bd, 08277231), -811, -225},
-  {GRISU_UINT64_C(0xece53cec, 4a314ebe), -808, -224},
-  {GRISU_UINT64_C(0x940f4613, ae5ed137), -804, -223},
-  {GRISU_UINT64_C(0xb9131798, 99f68584), -801, -222},
-  {GRISU_UINT64_C(0xe757dd7e, c07426e5), -798, -221},
-  {GRISU_UINT64_C(0x9096ea6f, 3848984f), -794, -220},
-  {GRISU_UINT64_C(0xb4bca50b, 065abe63), -791, -219},
-  {GRISU_UINT64_C(0xe1ebce4d, c7f16dfc), -788, -218},
-  {GRISU_UINT64_C(0x8d3360f0, 9cf6e4bd), -784, -217},
-  {GRISU_UINT64_C(0xb080392c, c4349ded), -781, -216},
-  {GRISU_UINT64_C(0xdca04777, f541c568), -778, -215},
-  {GRISU_UINT64_C(0x89e42caa, f9491b61), -774, -214},
-  {GRISU_UINT64_C(0xac5d37d5, b79b6239), -771, -213},
-  {GRISU_UINT64_C(0xd77485cb, 25823ac7), -768, -212},
-  {GRISU_UINT64_C(0x86a8d39e, f77164bd), -764, -211},
-  {GRISU_UINT64_C(0xa8530886, b54dbdec), -761, -210},
-  {GRISU_UINT64_C(0xd267caa8, 62a12d67), -758, -209},
-  {GRISU_UINT64_C(0x8380dea9, 3da4bc60), -754, -208},
-  {GRISU_UINT64_C(0xa4611653, 8d0deb78), -751, -207},
-  {GRISU_UINT64_C(0xcd795be8, 70516656), -748, -206},
-  {GRISU_UINT64_C(0x806bd971, 4632dff6), -744, -205},
-  {GRISU_UINT64_C(0xa086cfcd, 97bf97f4), -741, -204},
-  {GRISU_UINT64_C(0xc8a883c0, fdaf7df0), -738, -203},
-  {GRISU_UINT64_C(0xfad2a4b1, 3d1b5d6c), -735, -202},
-  {GRISU_UINT64_C(0x9cc3a6ee, c6311a64), -731, -201},
-  {GRISU_UINT64_C(0xc3f490aa, 77bd60fd), -728, -200},
-  {GRISU_UINT64_C(0xf4f1b4d5, 15acb93c), -725, -199},
-  {GRISU_UINT64_C(0x99171105, 2d8bf3c5), -721, -198},
-  {GRISU_UINT64_C(0xbf5cd546, 78eef0b7), -718, -197},
-  {GRISU_UINT64_C(0xef340a98, 172aace5), -715, -196},
-  {GRISU_UINT64_C(0x9580869f, 0e7aac0f), -711, -195},
-  {GRISU_UINT64_C(0xbae0a846, d2195713), -708, -194},
-  {GRISU_UINT64_C(0xe998d258, 869facd7), -705, -193},
-  {GRISU_UINT64_C(0x91ff8377, 5423cc06), -701, -192},
-  {GRISU_UINT64_C(0xb67f6455, 292cbf08), -698, -191},
-  {GRISU_UINT64_C(0xe41f3d6a, 7377eeca), -695, -190},
-  {GRISU_UINT64_C(0x8e938662, 882af53e), -691, -189},
-  {GRISU_UINT64_C(0xb23867fb, 2a35b28e), -688, -188},
-  {GRISU_UINT64_C(0xdec681f9, f4c31f31), -685, -187},
-  {GRISU_UINT64_C(0x8b3c113c, 38f9f37f), -681, -186},
-  {GRISU_UINT64_C(0xae0b158b, 4738705f), -678, -185},
-  {GRISU_UINT64_C(0xd98ddaee, 19068c76), -675, -184},
-  {GRISU_UINT64_C(0x87f8a8d4, cfa417ca), -671, -183},
-  {GRISU_UINT64_C(0xa9f6d30a, 038d1dbc), -668, -182},
-  {GRISU_UINT64_C(0xd47487cc, 8470652b), -665, -181},
-  {GRISU_UINT64_C(0x84c8d4df, d2c63f3b), -661, -180},
-  {GRISU_UINT64_C(0xa5fb0a17, c777cf0a), -658, -179},
-  {GRISU_UINT64_C(0xcf79cc9d, b955c2cc), -655, -178},
-  {GRISU_UINT64_C(0x81ac1fe2, 93d599c0), -651, -177},
-  {GRISU_UINT64_C(0xa21727db, 38cb0030), -648, -176},
-  {GRISU_UINT64_C(0xca9cf1d2, 06fdc03c), -645, -175},
-  {GRISU_UINT64_C(0xfd442e46, 88bd304b), -642, -174},
-  {GRISU_UINT64_C(0x9e4a9cec, 15763e2f), -638, -173},
-  {GRISU_UINT64_C(0xc5dd4427, 1ad3cdba), -635, -172},
-  {GRISU_UINT64_C(0xf7549530, e188c129), -632, -171},
-  {GRISU_UINT64_C(0x9a94dd3e, 8cf578ba), -628, -170},
-  {GRISU_UINT64_C(0xc13a148e, 3032d6e8), -625, -169},
-  {GRISU_UINT64_C(0xf18899b1, bc3f8ca2), -622, -168},
-  {GRISU_UINT64_C(0x96f5600f, 15a7b7e5), -618, -167},
-  {GRISU_UINT64_C(0xbcb2b812, db11a5de), -615, -166},
-  {GRISU_UINT64_C(0xebdf6617, 91d60f56), -612, -165},
-  {GRISU_UINT64_C(0x936b9fce, bb25c996), -608, -164},
-  {GRISU_UINT64_C(0xb84687c2, 69ef3bfb), -605, -163},
-  {GRISU_UINT64_C(0xe65829b3, 046b0afa), -602, -162},
-  {GRISU_UINT64_C(0x8ff71a0f, e2c2e6dc), -598, -161},
-  {GRISU_UINT64_C(0xb3f4e093, db73a093), -595, -160},
-  {GRISU_UINT64_C(0xe0f218b8, d25088b8), -592, -159},
-  {GRISU_UINT64_C(0x8c974f73, 83725573), -588, -158},
-  {GRISU_UINT64_C(0xafbd2350, 644eead0), -585, -157},
-  {GRISU_UINT64_C(0xdbac6c24, 7d62a584), -582, -156},
-  {GRISU_UINT64_C(0x894bc396, ce5da772), -578, -155},
-  {GRISU_UINT64_C(0xab9eb47c, 81f5114f), -575, -154},
-  {GRISU_UINT64_C(0xd686619b, a27255a3), -572, -153},
-  {GRISU_UINT64_C(0x8613fd01, 45877586), -568, -152},
-  {GRISU_UINT64_C(0xa798fc41, 96e952e7), -565, -151},
-  {GRISU_UINT64_C(0xd17f3b51, fca3a7a1), -562, -150},
-  {GRISU_UINT64_C(0x82ef8513, 3de648c5), -558, -149},
-  {GRISU_UINT64_C(0xa3ab6658, 0d5fdaf6), -555, -148},
-  {GRISU_UINT64_C(0xcc963fee, 10b7d1b3), -552, -147},
-  {GRISU_UINT64_C(0xffbbcfe9, 94e5c620), -549, -146},
-  {GRISU_UINT64_C(0x9fd561f1, fd0f9bd4), -545, -145},
-  {GRISU_UINT64_C(0xc7caba6e, 7c5382c9), -542, -144},
-  {GRISU_UINT64_C(0xf9bd690a, 1b68637b), -539, -143},
-  {GRISU_UINT64_C(0x9c1661a6, 51213e2d), -535, -142},
-  {GRISU_UINT64_C(0xc31bfa0f, e5698db8), -532, -141},
-  {GRISU_UINT64_C(0xf3e2f893, dec3f126), -529, -140},
-  {GRISU_UINT64_C(0x986ddb5c, 6b3a76b8), -525, -139},
-  {GRISU_UINT64_C(0xbe895233, 86091466), -522, -138},
-  {GRISU_UINT64_C(0xee2ba6c0, 678b597f), -519, -137},
-  {GRISU_UINT64_C(0x94db4838, 40b717f0), -515, -136},
-  {GRISU_UINT64_C(0xba121a46, 50e4ddec), -512, -135},
-  {GRISU_UINT64_C(0xe896a0d7, e51e1566), -509, -134},
-  {GRISU_UINT64_C(0x915e2486, ef32cd60), -505, -133},
-  {GRISU_UINT64_C(0xb5b5ada8, aaff80b8), -502, -132},
-  {GRISU_UINT64_C(0xe3231912, d5bf60e6), -499, -131},
-  {GRISU_UINT64_C(0x8df5efab, c5979c90), -495, -130},
-  {GRISU_UINT64_C(0xb1736b96, b6fd83b4), -492, -129},
-  {GRISU_UINT64_C(0xddd0467c, 64bce4a1), -489, -128},
-  {GRISU_UINT64_C(0x8aa22c0d, bef60ee4), -485, -127},
-  {GRISU_UINT64_C(0xad4ab711, 2eb3929e), -482, -126},
-  {GRISU_UINT64_C(0xd89d64d5, 7a607745), -479, -125},
-  {GRISU_UINT64_C(0x87625f05, 6c7c4a8b), -475, -124},
-  {GRISU_UINT64_C(0xa93af6c6, c79b5d2e), -472, -123},
-  {GRISU_UINT64_C(0xd389b478, 79823479), -469, -122},
-  {GRISU_UINT64_C(0x843610cb, 4bf160cc), -465, -121},
-  {GRISU_UINT64_C(0xa54394fe, 1eedb8ff), -462, -120},
-  {GRISU_UINT64_C(0xce947a3d, a6a9273e), -459, -119},
-  {GRISU_UINT64_C(0x811ccc66, 8829b887), -455, -118},
-  {GRISU_UINT64_C(0xa163ff80, 2a3426a9), -452, -117},
-  {GRISU_UINT64_C(0xc9bcff60, 34c13053), -449, -116},
-  {GRISU_UINT64_C(0xfc2c3f38, 41f17c68), -446, -115},
-  {GRISU_UINT64_C(0x9d9ba783, 2936edc1), -442, -114},
-  {GRISU_UINT64_C(0xc5029163, f384a931), -439, -113},
-  {GRISU_UINT64_C(0xf64335bc, f065d37d), -436, -112},
-  {GRISU_UINT64_C(0x99ea0196, 163fa42e), -432, -111},
-  {GRISU_UINT64_C(0xc06481fb, 9bcf8d3a), -429, -110},
-  {GRISU_UINT64_C(0xf07da27a, 82c37088), -426, -109},
-  {GRISU_UINT64_C(0x964e858c, 91ba2655), -422, -108},
-  {GRISU_UINT64_C(0xbbe226ef, b628afeb), -419, -107},
-  {GRISU_UINT64_C(0xeadab0ab, a3b2dbe5), -416, -106},
-  {GRISU_UINT64_C(0x92c8ae6b, 464fc96f), -412, -105},
-  {GRISU_UINT64_C(0xb77ada06, 17e3bbcb), -409, -104},
-  {GRISU_UINT64_C(0xe5599087, 9ddcaabe), -406, -103},
-  {GRISU_UINT64_C(0x8f57fa54, c2a9eab7), -402, -102},
-  {GRISU_UINT64_C(0xb32df8e9, f3546564), -399, -101},
-  {GRISU_UINT64_C(0xdff97724, 70297ebd), -396, -100},
-  {GRISU_UINT64_C(0x8bfbea76, c619ef36), -392, -99},
-  {GRISU_UINT64_C(0xaefae514, 77a06b04), -389, -98},
-  {GRISU_UINT64_C(0xdab99e59, 958885c5), -386, -97},
-  {GRISU_UINT64_C(0x88b402f7, fd75539b), -382, -96},
-  {GRISU_UINT64_C(0xaae103b5, fcd2a882), -379, -95},
-  {GRISU_UINT64_C(0xd59944a3, 7c0752a2), -376, -94},
-  {GRISU_UINT64_C(0x857fcae6, 2d8493a5), -372, -93},
-  {GRISU_UINT64_C(0xa6dfbd9f, b8e5b88f), -369, -92},
-  {GRISU_UINT64_C(0xd097ad07, a71f26b2), -366, -91},
-  {GRISU_UINT64_C(0x825ecc24, c8737830), -362, -90},
-  {GRISU_UINT64_C(0xa2f67f2d, fa90563b), -359, -89},
-  {GRISU_UINT64_C(0xcbb41ef9, 79346bca), -356, -88},
-  {GRISU_UINT64_C(0xfea126b7, d78186bd), -353, -87},
-  {GRISU_UINT64_C(0x9f24b832, e6b0f436), -349, -86},
-  {GRISU_UINT64_C(0xc6ede63f, a05d3144), -346, -85},
-  {GRISU_UINT64_C(0xf8a95fcf, 88747d94), -343, -84},
-  {GRISU_UINT64_C(0x9b69dbe1, b548ce7d), -339, -83},
-  {GRISU_UINT64_C(0xc24452da, 229b021c), -336, -82},
-  {GRISU_UINT64_C(0xf2d56790, ab41c2a3), -333, -81},
-  {GRISU_UINT64_C(0x97c560ba, 6b0919a6), -329, -80},
-  {GRISU_UINT64_C(0xbdb6b8e9, 05cb600f), -326, -79},
-  {GRISU_UINT64_C(0xed246723, 473e3813), -323, -78},
-  {GRISU_UINT64_C(0x9436c076, 0c86e30c), -319, -77},
-  {GRISU_UINT64_C(0xb9447093, 8fa89bcf), -316, -76},
-  {GRISU_UINT64_C(0xe7958cb8, 7392c2c3), -313, -75},
-  {GRISU_UINT64_C(0x90bd77f3, 483bb9ba), -309, -74},
-  {GRISU_UINT64_C(0xb4ecd5f0, 1a4aa828), -306, -73},
-  {GRISU_UINT64_C(0xe2280b6c, 20dd5232), -303, -72},
-  {GRISU_UINT64_C(0x8d590723, 948a535f), -299, -71},
-  {GRISU_UINT64_C(0xb0af48ec, 79ace837), -296, -70},
-  {GRISU_UINT64_C(0xdcdb1b27, 98182245), -293, -69},
-  {GRISU_UINT64_C(0x8a08f0f8, bf0f156b), -289, -68},
-  {GRISU_UINT64_C(0xac8b2d36, eed2dac6), -286, -67},
-  {GRISU_UINT64_C(0xd7adf884, aa879177), -283, -66},
-  {GRISU_UINT64_C(0x86ccbb52, ea94baeb), -279, -65},
-  {GRISU_UINT64_C(0xa87fea27, a539e9a5), -276, -64},
-  {GRISU_UINT64_C(0xd29fe4b1, 8e88640f), -273, -63},
-  {GRISU_UINT64_C(0x83a3eeee, f9153e89), -269, -62},
-  {GRISU_UINT64_C(0xa48ceaaa, b75a8e2b), -266, -61},
-  {GRISU_UINT64_C(0xcdb02555, 653131b6), -263, -60},
-  {GRISU_UINT64_C(0x808e1755, 5f3ebf12), -259, -59},
-  {GRISU_UINT64_C(0xa0b19d2a, b70e6ed6), -256, -58},
-  {GRISU_UINT64_C(0xc8de0475, 64d20a8c), -253, -57},
-  {GRISU_UINT64_C(0xfb158592, be068d2f), -250, -56},
-  {GRISU_UINT64_C(0x9ced737b, b6c4183d), -246, -55},
-  {GRISU_UINT64_C(0xc428d05a, a4751e4d), -243, -54},
-  {GRISU_UINT64_C(0xf5330471, 4d9265e0), -240, -53},
-  {GRISU_UINT64_C(0x993fe2c6, d07b7fac), -236, -52},
-  {GRISU_UINT64_C(0xbf8fdb78, 849a5f97), -233, -51},
-  {GRISU_UINT64_C(0xef73d256, a5c0f77d), -230, -50},
-  {GRISU_UINT64_C(0x95a86376, 27989aae), -226, -49},
-  {GRISU_UINT64_C(0xbb127c53, b17ec159), -223, -48},
-  {GRISU_UINT64_C(0xe9d71b68, 9dde71b0), -220, -47},
-  {GRISU_UINT64_C(0x92267121, 62ab070e), -216, -46},
-  {GRISU_UINT64_C(0xb6b00d69, bb55c8d1), -213, -45},
-  {GRISU_UINT64_C(0xe45c10c4, 2a2b3b06), -210, -44},
-  {GRISU_UINT64_C(0x8eb98a7a, 9a5b04e3), -206, -43},
-  {GRISU_UINT64_C(0xb267ed19, 40f1c61c), -203, -42},
-  {GRISU_UINT64_C(0xdf01e85f, 912e37a3), -200, -41},
-  {GRISU_UINT64_C(0x8b61313b, babce2c6), -196, -40},
-  {GRISU_UINT64_C(0xae397d8a, a96c1b78), -193, -39},
-  {GRISU_UINT64_C(0xd9c7dced, 53c72256), -190, -38},
-  {GRISU_UINT64_C(0x881cea14, 545c7575), -186, -37},
-  {GRISU_UINT64_C(0xaa242499, 697392d3), -183, -36},
-  {GRISU_UINT64_C(0xd4ad2dbf, c3d07788), -180, -35},
-  {GRISU_UINT64_C(0x84ec3c97, da624ab5), -176, -34},
-  {GRISU_UINT64_C(0xa6274bbd, d0fadd62), -173, -33},
-  {GRISU_UINT64_C(0xcfb11ead, 453994ba), -170, -32},
-  {GRISU_UINT64_C(0x81ceb32c, 4b43fcf5), -166, -31},
-  {GRISU_UINT64_C(0xa2425ff7, 5e14fc32), -163, -30},
-  {GRISU_UINT64_C(0xcad2f7f5, 359a3b3e), -160, -29},
-  {GRISU_UINT64_C(0xfd87b5f2, 8300ca0e), -157, -28},
-  {GRISU_UINT64_C(0x9e74d1b7, 91e07e48), -153, -27},
-  {GRISU_UINT64_C(0xc6120625, 76589ddb), -150, -26},
-  {GRISU_UINT64_C(0xf79687ae, d3eec551), -147, -25},
-  {GRISU_UINT64_C(0x9abe14cd, 44753b53), -143, -24},
-  {GRISU_UINT64_C(0xc16d9a00, 95928a27), -140, -23},
-  {GRISU_UINT64_C(0xf1c90080, baf72cb1), -137, -22},
-  {GRISU_UINT64_C(0x971da050, 74da7bef), -133, -21},
-  {GRISU_UINT64_C(0xbce50864, 92111aeb), -130, -20},
-  {GRISU_UINT64_C(0xec1e4a7d, b69561a5), -127, -19},
-  {GRISU_UINT64_C(0x9392ee8e, 921d5d07), -123, -18},
-  {GRISU_UINT64_C(0xb877aa32, 36a4b449), -120, -17},
-  {GRISU_UINT64_C(0xe69594be, c44de15b), -117, -16},
-  {GRISU_UINT64_C(0x901d7cf7, 3ab0acd9), -113, -15},
-  {GRISU_UINT64_C(0xb424dc35, 095cd80f), -110, -14},
-  {GRISU_UINT64_C(0xe12e1342, 4bb40e13), -107, -13},
-  {GRISU_UINT64_C(0x8cbccc09, 6f5088cc), -103, -12},
-  {GRISU_UINT64_C(0xafebff0b, cb24aaff), -100, -11},
-  {GRISU_UINT64_C(0xdbe6fece, bdedd5bf), -97, -10},
-  {GRISU_UINT64_C(0x89705f41, 36b4a597), -93, -9},
-  {GRISU_UINT64_C(0xabcc7711, 8461cefd), -90, -8},
-  {GRISU_UINT64_C(0xd6bf94d5, e57a42bc), -87, -7},
-  {GRISU_UINT64_C(0x8637bd05, af6c69b6), -83, -6},
-  {GRISU_UINT64_C(0xa7c5ac47, 1b478423), -80, -5},
-  {GRISU_UINT64_C(0xd1b71758, e219652c), -77, -4},
-  {GRISU_UINT64_C(0x83126e97, 8d4fdf3b), -73, -3},
-  {GRISU_UINT64_C(0xa3d70a3d, 70a3d70a), -70, -2},
-  {GRISU_UINT64_C(0xcccccccc, cccccccd), -67, -1},
-  {GRISU_UINT64_C(0x80000000, 00000000), -63, 0},
-  {GRISU_UINT64_C(0xa0000000, 00000000), -60, 1},
-  {GRISU_UINT64_C(0xc8000000, 00000000), -57, 2},
-  {GRISU_UINT64_C(0xfa000000, 00000000), -54, 3},
-  {GRISU_UINT64_C(0x9c400000, 00000000), -50, 4},
-  {GRISU_UINT64_C(0xc3500000, 00000000), -47, 5},
-  {GRISU_UINT64_C(0xf4240000, 00000000), -44, 6},
-  {GRISU_UINT64_C(0x98968000, 00000000), -40, 7},
-  {GRISU_UINT64_C(0xbebc2000, 00000000), -37, 8},
-  {GRISU_UINT64_C(0xee6b2800, 00000000), -34, 9},
-  {GRISU_UINT64_C(0x9502f900, 00000000), -30, 10},
-  {GRISU_UINT64_C(0xba43b740, 00000000), -27, 11},
-  {GRISU_UINT64_C(0xe8d4a510, 00000000), -24, 12},
-  {GRISU_UINT64_C(0x9184e72a, 00000000), -20, 13},
-  {GRISU_UINT64_C(0xb5e620f4, 80000000), -17, 14},
-  {GRISU_UINT64_C(0xe35fa931, a0000000), -14, 15},
-  {GRISU_UINT64_C(0x8e1bc9bf, 04000000), -10, 16},
-  {GRISU_UINT64_C(0xb1a2bc2e, c5000000), -7, 17},
-  {GRISU_UINT64_C(0xde0b6b3a, 76400000), -4, 18},
-  {GRISU_UINT64_C(0x8ac72304, 89e80000), 0, 19},
-  {GRISU_UINT64_C(0xad78ebc5, ac620000), 3, 20},
-  {GRISU_UINT64_C(0xd8d726b7, 177a8000), 6, 21},
-  {GRISU_UINT64_C(0x87867832, 6eac9000), 10, 22},
-  {GRISU_UINT64_C(0xa968163f, 0a57b400), 13, 23},
-  {GRISU_UINT64_C(0xd3c21bce, cceda100), 16, 24},
-  {GRISU_UINT64_C(0x84595161, 401484a0), 20, 25},
-  {GRISU_UINT64_C(0xa56fa5b9, 9019a5c8), 23, 26},
-  {GRISU_UINT64_C(0xcecb8f27, f4200f3a), 26, 27},
-  {GRISU_UINT64_C(0x813f3978, f8940984), 30, 28},
-  {GRISU_UINT64_C(0xa18f07d7, 36b90be5), 33, 29},
-  {GRISU_UINT64_C(0xc9f2c9cd, 04674edf), 36, 30},
-  {GRISU_UINT64_C(0xfc6f7c40, 45812296), 39, 31},
-  {GRISU_UINT64_C(0x9dc5ada8, 2b70b59e), 43, 32},
-  {GRISU_UINT64_C(0xc5371912, 364ce305), 46, 33},
-  {GRISU_UINT64_C(0xf684df56, c3e01bc7), 49, 34},
-  {GRISU_UINT64_C(0x9a130b96, 3a6c115c), 53, 35},
-  {GRISU_UINT64_C(0xc097ce7b, c90715b3), 56, 36},
-  {GRISU_UINT64_C(0xf0bdc21a, bb48db20), 59, 37},
-  {GRISU_UINT64_C(0x96769950, b50d88f4), 63, 38},
-  {GRISU_UINT64_C(0xbc143fa4, e250eb31), 66, 39},
-  {GRISU_UINT64_C(0xeb194f8e, 1ae525fd), 69, 40},
-  {GRISU_UINT64_C(0x92efd1b8, d0cf37be), 73, 41},
-  {GRISU_UINT64_C(0xb7abc627, 050305ae), 76, 42},
-  {GRISU_UINT64_C(0xe596b7b0, c643c719), 79, 43},
-  {GRISU_UINT64_C(0x8f7e32ce, 7bea5c70), 83, 44},
-  {GRISU_UINT64_C(0xb35dbf82, 1ae4f38c), 86, 45},
-  {GRISU_UINT64_C(0xe0352f62, a19e306f), 89, 46},
-  {GRISU_UINT64_C(0x8c213d9d, a502de45), 93, 47},
-  {GRISU_UINT64_C(0xaf298d05, 0e4395d7), 96, 48},
-  {GRISU_UINT64_C(0xdaf3f046, 51d47b4c), 99, 49},
-  {GRISU_UINT64_C(0x88d8762b, f324cd10), 103, 50},
-  {GRISU_UINT64_C(0xab0e93b6, efee0054), 106, 51},
-  {GRISU_UINT64_C(0xd5d238a4, abe98068), 109, 52},
-  {GRISU_UINT64_C(0x85a36366, eb71f041), 113, 53},
-  {GRISU_UINT64_C(0xa70c3c40, a64e6c52), 116, 54},
-  {GRISU_UINT64_C(0xd0cf4b50, cfe20766), 119, 55},
-  {GRISU_UINT64_C(0x82818f12, 81ed44a0), 123, 56},
-  {GRISU_UINT64_C(0xa321f2d7, 226895c8), 126, 57},
-  {GRISU_UINT64_C(0xcbea6f8c, eb02bb3a), 129, 58},
-  {GRISU_UINT64_C(0xfee50b70, 25c36a08), 132, 59},
-  {GRISU_UINT64_C(0x9f4f2726, 179a2245), 136, 60},
-  {GRISU_UINT64_C(0xc722f0ef, 9d80aad6), 139, 61},
-  {GRISU_UINT64_C(0xf8ebad2b, 84e0d58c), 142, 62},
-  {GRISU_UINT64_C(0x9b934c3b, 330c8577), 146, 63},
-  {GRISU_UINT64_C(0xc2781f49, ffcfa6d5), 149, 64},
-  {GRISU_UINT64_C(0xf316271c, 7fc3908b), 152, 65},
-  {GRISU_UINT64_C(0x97edd871, cfda3a57), 156, 66},
-  {GRISU_UINT64_C(0xbde94e8e, 43d0c8ec), 159, 67},
-  {GRISU_UINT64_C(0xed63a231, d4c4fb27), 162, 68},
-  {GRISU_UINT64_C(0x945e455f, 24fb1cf9), 166, 69},
-  {GRISU_UINT64_C(0xb975d6b6, ee39e437), 169, 70},
-  {GRISU_UINT64_C(0xe7d34c64, a9c85d44), 172, 71},
-  {GRISU_UINT64_C(0x90e40fbe, ea1d3a4b), 176, 72},
-  {GRISU_UINT64_C(0xb51d13ae, a4a488dd), 179, 73},
-  {GRISU_UINT64_C(0xe264589a, 4dcdab15), 182, 74},
-  {GRISU_UINT64_C(0x8d7eb760, 70a08aed), 186, 75},
-  {GRISU_UINT64_C(0xb0de6538, 8cc8ada8), 189, 76},
-  {GRISU_UINT64_C(0xdd15fe86, affad912), 192, 77},
-  {GRISU_UINT64_C(0x8a2dbf14, 2dfcc7ab), 196, 78},
-  {GRISU_UINT64_C(0xacb92ed9, 397bf996), 199, 79},
-  {GRISU_UINT64_C(0xd7e77a8f, 87daf7fc), 202, 80},
-  {GRISU_UINT64_C(0x86f0ac99, b4e8dafd), 206, 81},
-  {GRISU_UINT64_C(0xa8acd7c0, 222311bd), 209, 82},
-  {GRISU_UINT64_C(0xd2d80db0, 2aabd62c), 212, 83},
-  {GRISU_UINT64_C(0x83c7088e, 1aab65db), 216, 84},
-  {GRISU_UINT64_C(0xa4b8cab1, a1563f52), 219, 85},
-  {GRISU_UINT64_C(0xcde6fd5e, 09abcf27), 222, 86},
-  {GRISU_UINT64_C(0x80b05e5a, c60b6178), 226, 87},
-  {GRISU_UINT64_C(0xa0dc75f1, 778e39d6), 229, 88},
-  {GRISU_UINT64_C(0xc913936d, d571c84c), 232, 89},
-  {GRISU_UINT64_C(0xfb587849, 4ace3a5f), 235, 90},
-  {GRISU_UINT64_C(0x9d174b2d, cec0e47b), 239, 91},
-  {GRISU_UINT64_C(0xc45d1df9, 42711d9a), 242, 92},
-  {GRISU_UINT64_C(0xf5746577, 930d6501), 245, 93},
-  {GRISU_UINT64_C(0x9968bf6a, bbe85f20), 249, 94},
-  {GRISU_UINT64_C(0xbfc2ef45, 6ae276e9), 252, 95},
-  {GRISU_UINT64_C(0xefb3ab16, c59b14a3), 255, 96},
-  {GRISU_UINT64_C(0x95d04aee, 3b80ece6), 259, 97},
-  {GRISU_UINT64_C(0xbb445da9, ca61281f), 262, 98},
-  {GRISU_UINT64_C(0xea157514, 3cf97227), 265, 99},
-  {GRISU_UINT64_C(0x924d692c, a61be758), 269, 100},
-  {GRISU_UINT64_C(0xb6e0c377, cfa2e12e), 272, 101},
-  {GRISU_UINT64_C(0xe498f455, c38b997a), 275, 102},
-  {GRISU_UINT64_C(0x8edf98b5, 9a373fec), 279, 103},
-  {GRISU_UINT64_C(0xb2977ee3, 00c50fe7), 282, 104},
-  {GRISU_UINT64_C(0xdf3d5e9b, c0f653e1), 285, 105},
-  {GRISU_UINT64_C(0x8b865b21, 5899f46d), 289, 106},
-  {GRISU_UINT64_C(0xae67f1e9, aec07188), 292, 107},
-  {GRISU_UINT64_C(0xda01ee64, 1a708dea), 295, 108},
-  {GRISU_UINT64_C(0x884134fe, 908658b2), 299, 109},
-  {GRISU_UINT64_C(0xaa51823e, 34a7eedf), 302, 110},
-  {GRISU_UINT64_C(0xd4e5e2cd, c1d1ea96), 305, 111},
-  {GRISU_UINT64_C(0x850fadc0, 9923329e), 309, 112},
-  {GRISU_UINT64_C(0xa6539930, bf6bff46), 312, 113},
-  {GRISU_UINT64_C(0xcfe87f7c, ef46ff17), 315, 114},
-  {GRISU_UINT64_C(0x81f14fae, 158c5f6e), 319, 115},
-  {GRISU_UINT64_C(0xa26da399, 9aef774a), 322, 116},
-  {GRISU_UINT64_C(0xcb090c80, 01ab551c), 325, 117},
-  {GRISU_UINT64_C(0xfdcb4fa0, 02162a63), 328, 118},
-  {GRISU_UINT64_C(0x9e9f11c4, 014dda7e), 332, 119},
-  {GRISU_UINT64_C(0xc646d635, 01a1511e), 335, 120},
-  {GRISU_UINT64_C(0xf7d88bc2, 4209a565), 338, 121},
-  {GRISU_UINT64_C(0x9ae75759, 6946075f), 342, 122},
-  {GRISU_UINT64_C(0xc1a12d2f, c3978937), 345, 123},
-  {GRISU_UINT64_C(0xf209787b, b47d6b85), 348, 124},
-  {GRISU_UINT64_C(0x9745eb4d, 50ce6333), 352, 125},
-  {GRISU_UINT64_C(0xbd176620, a501fc00), 355, 126},
-  {GRISU_UINT64_C(0xec5d3fa8, ce427b00), 358, 127},
-  {GRISU_UINT64_C(0x93ba47c9, 80e98ce0), 362, 128},
-  {GRISU_UINT64_C(0xb8a8d9bb, e123f018), 365, 129},
-  {GRISU_UINT64_C(0xe6d3102a, d96cec1e), 368, 130},
-  {GRISU_UINT64_C(0x9043ea1a, c7e41393), 372, 131},
-  {GRISU_UINT64_C(0xb454e4a1, 79dd1877), 375, 132},
-  {GRISU_UINT64_C(0xe16a1dc9, d8545e95), 378, 133},
-  {GRISU_UINT64_C(0x8ce2529e, 2734bb1d), 382, 134},
-  {GRISU_UINT64_C(0xb01ae745, b101e9e4), 385, 135},
-  {GRISU_UINT64_C(0xdc21a117, 1d42645d), 388, 136},
-  {GRISU_UINT64_C(0x899504ae, 72497eba), 392, 137},
-  {GRISU_UINT64_C(0xabfa45da, 0edbde69), 395, 138},
-  {GRISU_UINT64_C(0xd6f8d750, 9292d603), 398, 139},
-  {GRISU_UINT64_C(0x865b8692, 5b9bc5c2), 402, 140},
-  {GRISU_UINT64_C(0xa7f26836, f282b733), 405, 141},
-  {GRISU_UINT64_C(0xd1ef0244, af2364ff), 408, 142},
-  {GRISU_UINT64_C(0x8335616a, ed761f1f), 412, 143},
-  {GRISU_UINT64_C(0xa402b9c5, a8d3a6e7), 415, 144},
-  {GRISU_UINT64_C(0xcd036837, 130890a1), 418, 145},
-  {GRISU_UINT64_C(0x80222122, 6be55a65), 422, 146},
-  {GRISU_UINT64_C(0xa02aa96b, 06deb0fe), 425, 147},
-  {GRISU_UINT64_C(0xc83553c5, c8965d3d), 428, 148},
-  {GRISU_UINT64_C(0xfa42a8b7, 3abbf48d), 431, 149},
-  {GRISU_UINT64_C(0x9c69a972, 84b578d8), 435, 150},
-  {GRISU_UINT64_C(0xc38413cf, 25e2d70e), 438, 151},
-  {GRISU_UINT64_C(0xf46518c2, ef5b8cd1), 441, 152},
-  {GRISU_UINT64_C(0x98bf2f79, d5993803), 445, 153},
-  {GRISU_UINT64_C(0xbeeefb58, 4aff8604), 448, 154},
-  {GRISU_UINT64_C(0xeeaaba2e, 5dbf6785), 451, 155},
-  {GRISU_UINT64_C(0x952ab45c, fa97a0b3), 455, 156},
-  {GRISU_UINT64_C(0xba756174, 393d88e0), 458, 157},
-  {GRISU_UINT64_C(0xe912b9d1, 478ceb17), 461, 158},
-  {GRISU_UINT64_C(0x91abb422, ccb812ef), 465, 159},
-  {GRISU_UINT64_C(0xb616a12b, 7fe617aa), 468, 160},
-  {GRISU_UINT64_C(0xe39c4976, 5fdf9d95), 471, 161},
-  {GRISU_UINT64_C(0x8e41ade9, fbebc27d), 475, 162},
-  {GRISU_UINT64_C(0xb1d21964, 7ae6b31c), 478, 163},
-  {GRISU_UINT64_C(0xde469fbd, 99a05fe3), 481, 164},
-  {GRISU_UINT64_C(0x8aec23d6, 80043bee), 485, 165},
-  {GRISU_UINT64_C(0xada72ccc, 20054aea), 488, 166},
-  {GRISU_UINT64_C(0xd910f7ff, 28069da4), 491, 167},
-  {GRISU_UINT64_C(0x87aa9aff, 79042287), 495, 168},
-  {GRISU_UINT64_C(0xa99541bf, 57452b28), 498, 169},
-  {GRISU_UINT64_C(0xd3fa922f, 2d1675f2), 501, 170},
-  {GRISU_UINT64_C(0x847c9b5d, 7c2e09b7), 505, 171},
-  {GRISU_UINT64_C(0xa59bc234, db398c25), 508, 172},
-  {GRISU_UINT64_C(0xcf02b2c2, 1207ef2f), 511, 173},
-  {GRISU_UINT64_C(0x8161afb9, 4b44f57d), 515, 174},
-  {GRISU_UINT64_C(0xa1ba1ba7, 9e1632dc), 518, 175},
-  {GRISU_UINT64_C(0xca28a291, 859bbf93), 521, 176},
-  {GRISU_UINT64_C(0xfcb2cb35, e702af78), 524, 177},
-  {GRISU_UINT64_C(0x9defbf01, b061adab), 528, 178},
-  {GRISU_UINT64_C(0xc56baec2, 1c7a1916), 531, 179},
-  {GRISU_UINT64_C(0xf6c69a72, a3989f5c), 534, 180},
-  {GRISU_UINT64_C(0x9a3c2087, a63f6399), 538, 181},
-  {GRISU_UINT64_C(0xc0cb28a9, 8fcf3c80), 541, 182},
-  {GRISU_UINT64_C(0xf0fdf2d3, f3c30b9f), 544, 183},
-  {GRISU_UINT64_C(0x969eb7c4, 7859e744), 548, 184},
-  {GRISU_UINT64_C(0xbc4665b5, 96706115), 551, 185},
-  {GRISU_UINT64_C(0xeb57ff22, fc0c795a), 554, 186},
-  {GRISU_UINT64_C(0x9316ff75, dd87cbd8), 558, 187},
-  {GRISU_UINT64_C(0xb7dcbf53, 54e9bece), 561, 188},
-  {GRISU_UINT64_C(0xe5d3ef28, 2a242e82), 564, 189},
-  {GRISU_UINT64_C(0x8fa47579, 1a569d11), 568, 190},
-  {GRISU_UINT64_C(0xb38d92d7, 60ec4455), 571, 191},
-  {GRISU_UINT64_C(0xe070f78d, 3927556b), 574, 192},
-  {GRISU_UINT64_C(0x8c469ab8, 43b89563), 578, 193},
-  {GRISU_UINT64_C(0xaf584166, 54a6babb), 581, 194},
-  {GRISU_UINT64_C(0xdb2e51bf, e9d0696a), 584, 195},
-  {GRISU_UINT64_C(0x88fcf317, f22241e2), 588, 196},
-  {GRISU_UINT64_C(0xab3c2fdd, eeaad25b), 591, 197},
-  {GRISU_UINT64_C(0xd60b3bd5, 6a5586f2), 594, 198},
-  {GRISU_UINT64_C(0x85c70565, 62757457), 598, 199},
-  {GRISU_UINT64_C(0xa738c6be, bb12d16d), 601, 200},
-  {GRISU_UINT64_C(0xd106f86e, 69d785c8), 604, 201},
-  {GRISU_UINT64_C(0x82a45b45, 0226b39d), 608, 202},
-  {GRISU_UINT64_C(0xa34d7216, 42b06084), 611, 203},
-  {GRISU_UINT64_C(0xcc20ce9b, d35c78a5), 614, 204},
-  {GRISU_UINT64_C(0xff290242, c83396ce), 617, 205},
-  {GRISU_UINT64_C(0x9f79a169, bd203e41), 621, 206},
-  {GRISU_UINT64_C(0xc75809c4, 2c684dd1), 624, 207},
-  {GRISU_UINT64_C(0xf92e0c35, 37826146), 627, 208},
-  {GRISU_UINT64_C(0x9bbcc7a1, 42b17ccc), 631, 209},
-  {GRISU_UINT64_C(0xc2abf989, 935ddbfe), 634, 210},
-  {GRISU_UINT64_C(0xf356f7eb, f83552fe), 637, 211},
-  {GRISU_UINT64_C(0x98165af3, 7b2153df), 641, 212},
-  {GRISU_UINT64_C(0xbe1bf1b0, 59e9a8d6), 644, 213},
-  {GRISU_UINT64_C(0xeda2ee1c, 7064130c), 647, 214},
-  {GRISU_UINT64_C(0x9485d4d1, c63e8be8), 651, 215},
-  {GRISU_UINT64_C(0xb9a74a06, 37ce2ee1), 654, 216},
-  {GRISU_UINT64_C(0xe8111c87, c5c1ba9a), 657, 217},
-  {GRISU_UINT64_C(0x910ab1d4, db9914a0), 661, 218},
-  {GRISU_UINT64_C(0xb54d5e4a, 127f59c8), 664, 219},
-  {GRISU_UINT64_C(0xe2a0b5dc, 971f303a), 667, 220},
-  {GRISU_UINT64_C(0x8da471a9, de737e24), 671, 221},
-  {GRISU_UINT64_C(0xb10d8e14, 56105dad), 674, 222},
-  {GRISU_UINT64_C(0xdd50f199, 6b947519), 677, 223},
-  {GRISU_UINT64_C(0x8a5296ff, e33cc930), 681, 224},
-  {GRISU_UINT64_C(0xace73cbf, dc0bfb7b), 684, 225},
-  {GRISU_UINT64_C(0xd8210bef, d30efa5a), 687, 226},
-  {GRISU_UINT64_C(0x8714a775, e3e95c78), 691, 227},
-  {GRISU_UINT64_C(0xa8d9d153, 5ce3b396), 694, 228},
-  {GRISU_UINT64_C(0xd31045a8, 341ca07c), 697, 229},
-  {GRISU_UINT64_C(0x83ea2b89, 2091e44e), 701, 230},
-  {GRISU_UINT64_C(0xa4e4b66b, 68b65d61), 704, 231},
-  {GRISU_UINT64_C(0xce1de406, 42e3f4b9), 707, 232},
-  {GRISU_UINT64_C(0x80d2ae83, e9ce78f4), 711, 233},
-  {GRISU_UINT64_C(0xa1075a24, e4421731), 714, 234},
-  {GRISU_UINT64_C(0xc94930ae, 1d529cfd), 717, 235},
-  {GRISU_UINT64_C(0xfb9b7cd9, a4a7443c), 720, 236},
-  {GRISU_UINT64_C(0x9d412e08, 06e88aa6), 724, 237},
-  {GRISU_UINT64_C(0xc491798a, 08a2ad4f), 727, 238},
-  {GRISU_UINT64_C(0xf5b5d7ec, 8acb58a3), 730, 239},
-  {GRISU_UINT64_C(0x9991a6f3, d6bf1766), 734, 240},
-  {GRISU_UINT64_C(0xbff610b0, cc6edd3f), 737, 241},
-  {GRISU_UINT64_C(0xeff394dc, ff8a948f), 740, 242},
-  {GRISU_UINT64_C(0x95f83d0a, 1fb69cd9), 744, 243},
-  {GRISU_UINT64_C(0xbb764c4c, a7a44410), 747, 244},
-  {GRISU_UINT64_C(0xea53df5f, d18d5514), 750, 245},
-  {GRISU_UINT64_C(0x92746b9b, e2f8552c), 754, 246},
-  {GRISU_UINT64_C(0xb7118682, dbb66a77), 757, 247},
-  {GRISU_UINT64_C(0xe4d5e823, 92a40515), 760, 248},
-  {GRISU_UINT64_C(0x8f05b116, 3ba6832d), 764, 249},
-  {GRISU_UINT64_C(0xb2c71d5b, ca9023f8), 767, 250},
-  {GRISU_UINT64_C(0xdf78e4b2, bd342cf7), 770, 251},
-  {GRISU_UINT64_C(0x8bab8eef, b6409c1a), 774, 252},
-  {GRISU_UINT64_C(0xae9672ab, a3d0c321), 777, 253},
-  {GRISU_UINT64_C(0xda3c0f56, 8cc4f3e9), 780, 254},
-  {GRISU_UINT64_C(0x88658996, 17fb1871), 784, 255},
-  {GRISU_UINT64_C(0xaa7eebfb, 9df9de8e), 787, 256},
-  {GRISU_UINT64_C(0xd51ea6fa, 85785631), 790, 257},
-  {GRISU_UINT64_C(0x8533285c, 936b35df), 794, 258},
-  {GRISU_UINT64_C(0xa67ff273, b8460357), 797, 259},
-  {GRISU_UINT64_C(0xd01fef10, a657842c), 800, 260},
-  {GRISU_UINT64_C(0x8213f56a, 67f6b29c), 804, 261},
-  {GRISU_UINT64_C(0xa298f2c5, 01f45f43), 807, 262},
-  {GRISU_UINT64_C(0xcb3f2f76, 42717713), 810, 263},
-  {GRISU_UINT64_C(0xfe0efb53, d30dd4d8), 813, 264},
-  {GRISU_UINT64_C(0x9ec95d14, 63e8a507), 817, 265},
-  {GRISU_UINT64_C(0xc67bb459, 7ce2ce49), 820, 266},
-  {GRISU_UINT64_C(0xf81aa16f, dc1b81db), 823, 267},
-  {GRISU_UINT64_C(0x9b10a4e5, e9913129), 827, 268},
-  {GRISU_UINT64_C(0xc1d4ce1f, 63f57d73), 830, 269},
-  {GRISU_UINT64_C(0xf24a01a7, 3cf2dcd0), 833, 270},
-  {GRISU_UINT64_C(0x976e4108, 8617ca02), 837, 271},
-  {GRISU_UINT64_C(0xbd49d14a, a79dbc82), 840, 272},
-  {GRISU_UINT64_C(0xec9c459d, 51852ba3), 843, 273},
-  {GRISU_UINT64_C(0x93e1ab82, 52f33b46), 847, 274},
-  {GRISU_UINT64_C(0xb8da1662, e7b00a17), 850, 275},
-  {GRISU_UINT64_C(0xe7109bfb, a19c0c9d), 853, 276},
-  {GRISU_UINT64_C(0x906a617d, 450187e2), 857, 277},
-  {GRISU_UINT64_C(0xb484f9dc, 9641e9db), 860, 278},
-  {GRISU_UINT64_C(0xe1a63853, bbd26451), 863, 279},
-  {GRISU_UINT64_C(0x8d07e334, 55637eb3), 867, 280},
-  {GRISU_UINT64_C(0xb049dc01, 6abc5e60), 870, 281},
-  {GRISU_UINT64_C(0xdc5c5301, c56b75f7), 873, 282},
-  {GRISU_UINT64_C(0x89b9b3e1, 1b6329bb), 877, 283},
-  {GRISU_UINT64_C(0xac2820d9, 623bf429), 880, 284},
-  {GRISU_UINT64_C(0xd732290f, bacaf134), 883, 285},
-  {GRISU_UINT64_C(0x867f59a9, d4bed6c0), 887, 286},
-  {GRISU_UINT64_C(0xa81f3014, 49ee8c70), 890, 287},
-  {GRISU_UINT64_C(0xd226fc19, 5c6a2f8c), 893, 288},
-  {GRISU_UINT64_C(0x83585d8f, d9c25db8), 897, 289},
-  {GRISU_UINT64_C(0xa42e74f3, d032f526), 900, 290},
-  {GRISU_UINT64_C(0xcd3a1230, c43fb26f), 903, 291},
-  {GRISU_UINT64_C(0x80444b5e, 7aa7cf85), 907, 292},
-  {GRISU_UINT64_C(0xa0555e36, 1951c367), 910, 293},
-  {GRISU_UINT64_C(0xc86ab5c3, 9fa63441), 913, 294},
-  {GRISU_UINT64_C(0xfa856334, 878fc151), 916, 295},
-  {GRISU_UINT64_C(0x9c935e00, d4b9d8d2), 920, 296},
-  {GRISU_UINT64_C(0xc3b83581, 09e84f07), 923, 297},
-  {GRISU_UINT64_C(0xf4a642e1, 4c6262c9), 926, 298},
-  {GRISU_UINT64_C(0x98e7e9cc, cfbd7dbe), 930, 299},
-  {GRISU_UINT64_C(0xbf21e440, 03acdd2d), 933, 300},
-  {GRISU_UINT64_C(0xeeea5d50, 04981478), 936, 301},
-  {GRISU_UINT64_C(0x95527a52, 02df0ccb), 940, 302},
-  {GRISU_UINT64_C(0xbaa718e6, 8396cffe), 943, 303},
-  {GRISU_UINT64_C(0xe950df20, 247c83fd), 946, 304},
-  {GRISU_UINT64_C(0x91d28b74, 16cdd27e), 950, 305},
-  {GRISU_UINT64_C(0xb6472e51, 1c81471e), 953, 306},
-  {GRISU_UINT64_C(0xe3d8f9e5, 63a198e5), 956, 307},
-  {GRISU_UINT64_C(0x8e679c2f, 5e44ff8f), 960, 308},
-  {GRISU_UINT64_C(0xb201833b, 35d63f73), 963, 309},
-  {GRISU_UINT64_C(0xde81e40a, 034bcf50), 966, 310},
-  {GRISU_UINT64_C(0x8b112e86, 420f6192), 970, 311},
-  {GRISU_UINT64_C(0xadd57a27, d29339f6), 973, 312},
-  {GRISU_UINT64_C(0xd94ad8b1, c7380874), 976, 313},
-  {GRISU_UINT64_C(0x87cec76f, 1c830549), 980, 314},
-  {GRISU_UINT64_C(0xa9c2794a, e3a3c69b), 983, 315},
-  {GRISU_UINT64_C(0xd433179d, 9c8cb841), 986, 316},
-  {GRISU_UINT64_C(0x849feec2, 81d7f329), 990, 317},
-  {GRISU_UINT64_C(0xa5c7ea73, 224deff3), 993, 318},
-  {GRISU_UINT64_C(0xcf39e50f, eae16bf0), 996, 319},
-  {GRISU_UINT64_C(0x81842f29, f2cce376), 1000, 320},
-  {GRISU_UINT64_C(0xa1e53af4, 6f801c53), 1003, 321},
-  {GRISU_UINT64_C(0xca5e89b1, 8b602368), 1006, 322},
-  {GRISU_UINT64_C(0xfcf62c1d, ee382c42), 1009, 323},
-  {GRISU_UINT64_C(0x9e19db92, b4e31ba9), 1013, 324},
-  {GRISU_UINT64_C(0xc5a05277, 621be294), 1016, 325},
-  {GRISU_UINT64_C(0xf7086715, 3aa2db39), 1019, 326},
-  {GRISU_UINT64_C(0x9a65406d, 44a5c903), 1023, 327},
-  {GRISU_UINT64_C(0xc0fe9088, 95cf3b44), 1026, 328},
-  {GRISU_UINT64_C(0xf13e34aa, bb430a15), 1029, 329},
-  {GRISU_UINT64_C(0x96c6e0ea, b509e64d), 1033, 330},
-  {GRISU_UINT64_C(0xbc789925, 624c5fe1), 1036, 331},
-  {GRISU_UINT64_C(0xeb96bf6e, badf77d9), 1039, 332},
-  {GRISU_UINT64_C(0x933e37a5, 34cbaae8), 1043, 333},
-  {GRISU_UINT64_C(0xb80dc58e, 81fe95a1), 1046, 334},
-  {GRISU_UINT64_C(0xe61136f2, 227e3b0a), 1049, 335},
-  {GRISU_UINT64_C(0x8fcac257, 558ee4e6), 1053, 336},
-  {GRISU_UINT64_C(0xb3bd72ed, 2af29e20), 1056, 337},
-  {GRISU_UINT64_C(0xe0accfa8, 75af45a8), 1059, 338},
-  {GRISU_UINT64_C(0x8c6c01c9, 498d8b89), 1063, 339},
-  {GRISU_UINT64_C(0xaf87023b, 9bf0ee6b), 1066, 340},
-  {GRISU_UINT64_C(0xdb68c2ca, 82ed2a06), 1069, 341},
-  {GRISU_UINT64_C(0x892179be, 91d43a44), 1073, 342},
-  };
-static const int GRISU_CACHE_MAX_DISTANCE(1) = 4;
-// nb elements (1): 651
-static const GRISU_CACHE_STRUCT GRISU_CACHE_NAME(2)[] = {
-  {GRISU_UINT64_C(0xe61acf03, 3d1a45df), -1087, -308},
-  {GRISU_UINT64_C(0xb3c4f1ba, 87bc8697), -1080, -306},
-  {GRISU_UINT64_C(0x8c71dcd9, ba0b4926), -1073, -304},
-  {GRISU_UINT64_C(0xdb71e914, 32b1a24b), -1067, -302},
-  {GRISU_UINT64_C(0xab70fe17, c79ac6ca), -1060, -300},
-  {GRISU_UINT64_C(0x85f04682, 93f0eb4e), -1053, -298},
-  {GRISU_UINT64_C(0xd1476e2c, 07286faa), -1047, -296},
-  {GRISU_UINT64_C(0xa37fce12, 6597973d), -1040, -294},
-  {GRISU_UINT64_C(0xff77b1fc, bebcdc4f), -1034, -292},
-  {GRISU_UINT64_C(0xc795830d, 75038c1e), -1027, -290},
-  {GRISU_UINT64_C(0x9becce62, 836ac577), -1020, -288},
-  {GRISU_UINT64_C(0xf3a20279, ed56d48a), -1014, -286},
-  {GRISU_UINT64_C(0xbe5691ef, 416bd60c), -1007, -284},
-  {GRISU_UINT64_C(0x94b3a202, eb1c3f39), -1000, -282},
-  {GRISU_UINT64_C(0xe858ad24, 8f5c22ca), -994, -280},
-  {GRISU_UINT64_C(0xb5854744, 8ffffb2e), -987, -278},
-  {GRISU_UINT64_C(0x8dd01fad, 907ffc3c), -980, -276},
-  {GRISU_UINT64_C(0xdd95317f, 31c7fa1d), -974, -274},
-  {GRISU_UINT64_C(0xad1c8eab, 5ee43b67), -967, -272},
-  {GRISU_UINT64_C(0x873e4f75, e2224e68), -960, -270},
-  {GRISU_UINT64_C(0xd3515c28, 31559a83), -954, -268},
-  {GRISU_UINT64_C(0xa5178fff, 668ae0b6), -947, -266},
-  {GRISU_UINT64_C(0x80fa687f, 881c7f8e), -940, -264},
-  {GRISU_UINT64_C(0xc9874347, 44ac874f), -934, -262},
-  {GRISU_UINT64_C(0x9d71ac8f, ada6c9b5), -927, -260},
-  {GRISU_UINT64_C(0xf6019da0, 7f549b2b), -921, -258},
-  {GRISU_UINT64_C(0xc0314325, 637a193a), -914, -256},
-  {GRISU_UINT64_C(0x96267c75, 35b763b5), -907, -254},
-  {GRISU_UINT64_C(0xea9c2277, 23ee8bcb), -901, -252},
-  {GRISU_UINT64_C(0xb749faed, 14125d37), -894, -250},
-  {GRISU_UINT64_C(0x8f31cc09, 37ae58d3), -887, -248},
-  {GRISU_UINT64_C(0xdfbdcece, 67006ac9), -881, -246},
-  {GRISU_UINT64_C(0xaecc4991, 4078536d), -874, -244},
-  {GRISU_UINT64_C(0x888f9979, 7a5e012d), -867, -242},
-  {GRISU_UINT64_C(0xd5605fcd, cf32e1d7), -861, -240},
-  {GRISU_UINT64_C(0xa6b34ad8, c9dfc070), -854, -238},
-  {GRISU_UINT64_C(0x823c1279, 5db6ce57), -847, -236},
-  {GRISU_UINT64_C(0xcb7ddcdd, a26da269), -841, -234},
-  {GRISU_UINT64_C(0x9efa548d, 26e5a6e2), -834, -232},
-  {GRISU_UINT64_C(0xf867241c, 8cc6d4c1), -828, -230},
-  {GRISU_UINT64_C(0xc2109436, 4dfb5637), -821, -228},
-  {GRISU_UINT64_C(0x979cf3ca, 6cec5b5b), -814, -226},
-  {GRISU_UINT64_C(0xece53cec, 4a314ebe), -808, -224},
-  {GRISU_UINT64_C(0xb9131798, 99f68584), -801, -222},
-  {GRISU_UINT64_C(0x9096ea6f, 3848984f), -794, -220},
-  {GRISU_UINT64_C(0xe1ebce4d, c7f16dfc), -788, -218},
-  {GRISU_UINT64_C(0xb080392c, c4349ded), -781, -216},
-  {GRISU_UINT64_C(0x89e42caa, f9491b61), -774, -214},
-  {GRISU_UINT64_C(0xd77485cb, 25823ac7), -768, -212},
-  {GRISU_UINT64_C(0xa8530886, b54dbdec), -761, -210},
-  {GRISU_UINT64_C(0x8380dea9, 3da4bc60), -754, -208},
-  {GRISU_UINT64_C(0xcd795be8, 70516656), -748, -206},
-  {GRISU_UINT64_C(0xa086cfcd, 97bf97f4), -741, -204},
-  {GRISU_UINT64_C(0xfad2a4b1, 3d1b5d6c), -735, -202},
-  {GRISU_UINT64_C(0xc3f490aa, 77bd60fd), -728, -200},
-  {GRISU_UINT64_C(0x99171105, 2d8bf3c5), -721, -198},
-  {GRISU_UINT64_C(0xef340a98, 172aace5), -715, -196},
-  {GRISU_UINT64_C(0xbae0a846, d2195713), -708, -194},
-  {GRISU_UINT64_C(0x91ff8377, 5423cc06), -701, -192},
-  {GRISU_UINT64_C(0xe41f3d6a, 7377eeca), -695, -190},
-  {GRISU_UINT64_C(0xb23867fb, 2a35b28e), -688, -188},
-  {GRISU_UINT64_C(0x8b3c113c, 38f9f37f), -681, -186},
-  {GRISU_UINT64_C(0xd98ddaee, 19068c76), -675, -184},
-  {GRISU_UINT64_C(0xa9f6d30a, 038d1dbc), -668, -182},
-  {GRISU_UINT64_C(0x84c8d4df, d2c63f3b), -661, -180},
-  {GRISU_UINT64_C(0xcf79cc9d, b955c2cc), -655, -178},
-  {GRISU_UINT64_C(0xa21727db, 38cb0030), -648, -176},
-  {GRISU_UINT64_C(0xfd442e46, 88bd304b), -642, -174},
-  {GRISU_UINT64_C(0xc5dd4427, 1ad3cdba), -635, -172},
-  {GRISU_UINT64_C(0x9a94dd3e, 8cf578ba), -628, -170},
-  {GRISU_UINT64_C(0xf18899b1, bc3f8ca2), -622, -168},
-  {GRISU_UINT64_C(0xbcb2b812, db11a5de), -615, -166},
-  {GRISU_UINT64_C(0x936b9fce, bb25c996), -608, -164},
-  {GRISU_UINT64_C(0xe65829b3, 046b0afa), -602, -162},
-  {GRISU_UINT64_C(0xb3f4e093, db73a093), -595, -160},
-  {GRISU_UINT64_C(0x8c974f73, 83725573), -588, -158},
-  {GRISU_UINT64_C(0xdbac6c24, 7d62a584), -582, -156},
-  {GRISU_UINT64_C(0xab9eb47c, 81f5114f), -575, -154},
-  {GRISU_UINT64_C(0x8613fd01, 45877586), -568, -152},
-  {GRISU_UINT64_C(0xd17f3b51, fca3a7a1), -562, -150},
-  {GRISU_UINT64_C(0xa3ab6658, 0d5fdaf6), -555, -148},
-  {GRISU_UINT64_C(0xffbbcfe9, 94e5c620), -549, -146},
-  {GRISU_UINT64_C(0xc7caba6e, 7c5382c9), -542, -144},
-  {GRISU_UINT64_C(0x9c1661a6, 51213e2d), -535, -142},
-  {GRISU_UINT64_C(0xf3e2f893, dec3f126), -529, -140},
-  {GRISU_UINT64_C(0xbe895233, 86091466), -522, -138},
-  {GRISU_UINT64_C(0x94db4838, 40b717f0), -515, -136},
-  {GRISU_UINT64_C(0xe896a0d7, e51e1566), -509, -134},
-  {GRISU_UINT64_C(0xb5b5ada8, aaff80b8), -502, -132},
-  {GRISU_UINT64_C(0x8df5efab, c5979c90), -495, -130},
-  {GRISU_UINT64_C(0xddd0467c, 64bce4a1), -489, -128},
-  {GRISU_UINT64_C(0xad4ab711, 2eb3929e), -482, -126},
-  {GRISU_UINT64_C(0x87625f05, 6c7c4a8b), -475, -124},
-  {GRISU_UINT64_C(0xd389b478, 79823479), -469, -122},
-  {GRISU_UINT64_C(0xa54394fe, 1eedb8ff), -462, -120},
-  {GRISU_UINT64_C(0x811ccc66, 8829b887), -455, -118},
-  {GRISU_UINT64_C(0xc9bcff60, 34c13053), -449, -116},
-  {GRISU_UINT64_C(0x9d9ba783, 2936edc1), -442, -114},
-  {GRISU_UINT64_C(0xf64335bc, f065d37d), -436, -112},
-  {GRISU_UINT64_C(0xc06481fb, 9bcf8d3a), -429, -110},
-  {GRISU_UINT64_C(0x964e858c, 91ba2655), -422, -108},
-  {GRISU_UINT64_C(0xeadab0ab, a3b2dbe5), -416, -106},
-  {GRISU_UINT64_C(0xb77ada06, 17e3bbcb), -409, -104},
-  {GRISU_UINT64_C(0x8f57fa54, c2a9eab7), -402, -102},
-  {GRISU_UINT64_C(0xdff97724, 70297ebd), -396, -100},
-  {GRISU_UINT64_C(0xaefae514, 77a06b04), -389, -98},
-  {GRISU_UINT64_C(0x88b402f7, fd75539b), -382, -96},
-  {GRISU_UINT64_C(0xd59944a3, 7c0752a2), -376, -94},
-  {GRISU_UINT64_C(0xa6dfbd9f, b8e5b88f), -369, -92},
-  {GRISU_UINT64_C(0x825ecc24, c8737830), -362, -90},
-  {GRISU_UINT64_C(0xcbb41ef9, 79346bca), -356, -88},
-  {GRISU_UINT64_C(0x9f24b832, e6b0f436), -349, -86},
-  {GRISU_UINT64_C(0xf8a95fcf, 88747d94), -343, -84},
-  {GRISU_UINT64_C(0xc24452da, 229b021c), -336, -82},
-  {GRISU_UINT64_C(0x97c560ba, 6b0919a6), -329, -80},
-  {GRISU_UINT64_C(0xed246723, 473e3813), -323, -78},
-  {GRISU_UINT64_C(0xb9447093, 8fa89bcf), -316, -76},
-  {GRISU_UINT64_C(0x90bd77f3, 483bb9ba), -309, -74},
-  {GRISU_UINT64_C(0xe2280b6c, 20dd5232), -303, -72},
-  {GRISU_UINT64_C(0xb0af48ec, 79ace837), -296, -70},
-  {GRISU_UINT64_C(0x8a08f0f8, bf0f156b), -289, -68},
-  {GRISU_UINT64_C(0xd7adf884, aa879177), -283, -66},
-  {GRISU_UINT64_C(0xa87fea27, a539e9a5), -276, -64},
-  {GRISU_UINT64_C(0x83a3eeee, f9153e89), -269, -62},
-  {GRISU_UINT64_C(0xcdb02555, 653131b6), -263, -60},
-  {GRISU_UINT64_C(0xa0b19d2a, b70e6ed6), -256, -58},
-  {GRISU_UINT64_C(0xfb158592, be068d2f), -250, -56},
-  {GRISU_UINT64_C(0xc428d05a, a4751e4d), -243, -54},
-  {GRISU_UINT64_C(0x993fe2c6, d07b7fac), -236, -52},
-  {GRISU_UINT64_C(0xef73d256, a5c0f77d), -230, -50},
-  {GRISU_UINT64_C(0xbb127c53, b17ec159), -223, -48},
-  {GRISU_UINT64_C(0x92267121, 62ab070e), -216, -46},
-  {GRISU_UINT64_C(0xe45c10c4, 2a2b3b06), -210, -44},
-  {GRISU_UINT64_C(0xb267ed19, 40f1c61c), -203, -42},
-  {GRISU_UINT64_C(0x8b61313b, babce2c6), -196, -40},
-  {GRISU_UINT64_C(0xd9c7dced, 53c72256), -190, -38},
-  {GRISU_UINT64_C(0xaa242499, 697392d3), -183, -36},
-  {GRISU_UINT64_C(0x84ec3c97, da624ab5), -176, -34},
-  {GRISU_UINT64_C(0xcfb11ead, 453994ba), -170, -32},
-  {GRISU_UINT64_C(0xa2425ff7, 5e14fc32), -163, -30},
-  {GRISU_UINT64_C(0xfd87b5f2, 8300ca0e), -157, -28},
-  {GRISU_UINT64_C(0xc6120625, 76589ddb), -150, -26},
-  {GRISU_UINT64_C(0x9abe14cd, 44753b53), -143, -24},
-  {GRISU_UINT64_C(0xf1c90080, baf72cb1), -137, -22},
-  {GRISU_UINT64_C(0xbce50864, 92111aeb), -130, -20},
-  {GRISU_UINT64_C(0x9392ee8e, 921d5d07), -123, -18},
-  {GRISU_UINT64_C(0xe69594be, c44de15b), -117, -16},
-  {GRISU_UINT64_C(0xb424dc35, 095cd80f), -110, -14},
-  {GRISU_UINT64_C(0x8cbccc09, 6f5088cc), -103, -12},
-  {GRISU_UINT64_C(0xdbe6fece, bdedd5bf), -97, -10},
-  {GRISU_UINT64_C(0xabcc7711, 8461cefd), -90, -8},
-  {GRISU_UINT64_C(0x8637bd05, af6c69b6), -83, -6},
-  {GRISU_UINT64_C(0xd1b71758, e219652c), -77, -4},
-  {GRISU_UINT64_C(0xa3d70a3d, 70a3d70a), -70, -2},
-  {GRISU_UINT64_C(0x80000000, 00000000), -63, 0},
-  {GRISU_UINT64_C(0xc8000000, 00000000), -57, 2},
-  {GRISU_UINT64_C(0x9c400000, 00000000), -50, 4},
-  {GRISU_UINT64_C(0xf4240000, 00000000), -44, 6},
-  {GRISU_UINT64_C(0xbebc2000, 00000000), -37, 8},
-  {GRISU_UINT64_C(0x9502f900, 00000000), -30, 10},
-  {GRISU_UINT64_C(0xe8d4a510, 00000000), -24, 12},
-  {GRISU_UINT64_C(0xb5e620f4, 80000000), -17, 14},
-  {GRISU_UINT64_C(0x8e1bc9bf, 04000000), -10, 16},
-  {GRISU_UINT64_C(0xde0b6b3a, 76400000), -4, 18},
-  {GRISU_UINT64_C(0xad78ebc5, ac620000), 3, 20},
-  {GRISU_UINT64_C(0x87867832, 6eac9000), 10, 22},
-  {GRISU_UINT64_C(0xd3c21bce, cceda100), 16, 24},
-  {GRISU_UINT64_C(0xa56fa5b9, 9019a5c8), 23, 26},
-  {GRISU_UINT64_C(0x813f3978, f8940984), 30, 28},
-  {GRISU_UINT64_C(0xc9f2c9cd, 04674edf), 36, 30},
-  {GRISU_UINT64_C(0x9dc5ada8, 2b70b59e), 43, 32},
-  {GRISU_UINT64_C(0xf684df56, c3e01bc7), 49, 34},
-  {GRISU_UINT64_C(0xc097ce7b, c90715b3), 56, 36},
-  {GRISU_UINT64_C(0x96769950, b50d88f4), 63, 38},
-  {GRISU_UINT64_C(0xeb194f8e, 1ae525fd), 69, 40},
-  {GRISU_UINT64_C(0xb7abc627, 050305ae), 76, 42},
-  {GRISU_UINT64_C(0x8f7e32ce, 7bea5c70), 83, 44},
-  {GRISU_UINT64_C(0xe0352f62, a19e306f), 89, 46},
-  {GRISU_UINT64_C(0xaf298d05, 0e4395d7), 96, 48},
-  {GRISU_UINT64_C(0x88d8762b, f324cd10), 103, 50},
-  {GRISU_UINT64_C(0xd5d238a4, abe98068), 109, 52},
-  {GRISU_UINT64_C(0xa70c3c40, a64e6c52), 116, 54},
-  {GRISU_UINT64_C(0x82818f12, 81ed44a0), 123, 56},
-  {GRISU_UINT64_C(0xcbea6f8c, eb02bb3a), 129, 58},
-  {GRISU_UINT64_C(0x9f4f2726, 179a2245), 136, 60},
-  {GRISU_UINT64_C(0xf8ebad2b, 84e0d58c), 142, 62},
-  {GRISU_UINT64_C(0xc2781f49, ffcfa6d5), 149, 64},
-  {GRISU_UINT64_C(0x97edd871, cfda3a57), 156, 66},
-  {GRISU_UINT64_C(0xed63a231, d4c4fb27), 162, 68},
-  {GRISU_UINT64_C(0xb975d6b6, ee39e437), 169, 70},
-  {GRISU_UINT64_C(0x90e40fbe, ea1d3a4b), 176, 72},
-  {GRISU_UINT64_C(0xe264589a, 4dcdab15), 182, 74},
-  {GRISU_UINT64_C(0xb0de6538, 8cc8ada8), 189, 76},
-  {GRISU_UINT64_C(0x8a2dbf14, 2dfcc7ab), 196, 78},
-  {GRISU_UINT64_C(0xd7e77a8f, 87daf7fc), 202, 80},
-  {GRISU_UINT64_C(0xa8acd7c0, 222311bd), 209, 82},
-  {GRISU_UINT64_C(0x83c7088e, 1aab65db), 216, 84},
-  {GRISU_UINT64_C(0xcde6fd5e, 09abcf27), 222, 86},
-  {GRISU_UINT64_C(0xa0dc75f1, 778e39d6), 229, 88},
-  {GRISU_UINT64_C(0xfb587849, 4ace3a5f), 235, 90},
-  {GRISU_UINT64_C(0xc45d1df9, 42711d9a), 242, 92},
-  {GRISU_UINT64_C(0x9968bf6a, bbe85f20), 249, 94},
-  {GRISU_UINT64_C(0xefb3ab16, c59b14a3), 255, 96},
-  {GRISU_UINT64_C(0xbb445da9, ca61281f), 262, 98},
-  {GRISU_UINT64_C(0x924d692c, a61be758), 269, 100},
-  {GRISU_UINT64_C(0xe498f455, c38b997a), 275, 102},
-  {GRISU_UINT64_C(0xb2977ee3, 00c50fe7), 282, 104},
-  {GRISU_UINT64_C(0x8b865b21, 5899f46d), 289, 106},
-  {GRISU_UINT64_C(0xda01ee64, 1a708dea), 295, 108},
-  {GRISU_UINT64_C(0xaa51823e, 34a7eedf), 302, 110},
-  {GRISU_UINT64_C(0x850fadc0, 9923329e), 309, 112},
-  {GRISU_UINT64_C(0xcfe87f7c, ef46ff17), 315, 114},
-  {GRISU_UINT64_C(0xa26da399, 9aef774a), 322, 116},
-  {GRISU_UINT64_C(0xfdcb4fa0, 02162a63), 328, 118},
-  {GRISU_UINT64_C(0xc646d635, 01a1511e), 335, 120},
-  {GRISU_UINT64_C(0x9ae75759, 6946075f), 342, 122},
-  {GRISU_UINT64_C(0xf209787b, b47d6b85), 348, 124},
-  {GRISU_UINT64_C(0xbd176620, a501fc00), 355, 126},
-  {GRISU_UINT64_C(0x93ba47c9, 80e98ce0), 362, 128},
-  {GRISU_UINT64_C(0xe6d3102a, d96cec1e), 368, 130},
-  {GRISU_UINT64_C(0xb454e4a1, 79dd1877), 375, 132},
-  {GRISU_UINT64_C(0x8ce2529e, 2734bb1d), 382, 134},
-  {GRISU_UINT64_C(0xdc21a117, 1d42645d), 388, 136},
-  {GRISU_UINT64_C(0xabfa45da, 0edbde69), 395, 138},
-  {GRISU_UINT64_C(0x865b8692, 5b9bc5c2), 402, 140},
-  {GRISU_UINT64_C(0xd1ef0244, af2364ff), 408, 142},
-  {GRISU_UINT64_C(0xa402b9c5, a8d3a6e7), 415, 144},
-  {GRISU_UINT64_C(0x80222122, 6be55a65), 422, 146},
-  {GRISU_UINT64_C(0xc83553c5, c8965d3d), 428, 148},
-  {GRISU_UINT64_C(0x9c69a972, 84b578d8), 435, 150},
-  {GRISU_UINT64_C(0xf46518c2, ef5b8cd1), 441, 152},
-  {GRISU_UINT64_C(0xbeeefb58, 4aff8604), 448, 154},
-  {GRISU_UINT64_C(0x952ab45c, fa97a0b3), 455, 156},
-  {GRISU_UINT64_C(0xe912b9d1, 478ceb17), 461, 158},
-  {GRISU_UINT64_C(0xb616a12b, 7fe617aa), 468, 160},
-  {GRISU_UINT64_C(0x8e41ade9, fbebc27d), 475, 162},
-  {GRISU_UINT64_C(0xde469fbd, 99a05fe3), 481, 164},
-  {GRISU_UINT64_C(0xada72ccc, 20054aea), 488, 166},
-  {GRISU_UINT64_C(0x87aa9aff, 79042287), 495, 168},
-  {GRISU_UINT64_C(0xd3fa922f, 2d1675f2), 501, 170},
-  {GRISU_UINT64_C(0xa59bc234, db398c25), 508, 172},
-  {GRISU_UINT64_C(0x8161afb9, 4b44f57d), 515, 174},
-  {GRISU_UINT64_C(0xca28a291, 859bbf93), 521, 176},
-  {GRISU_UINT64_C(0x9defbf01, b061adab), 528, 178},
-  {GRISU_UINT64_C(0xf6c69a72, a3989f5c), 534, 180},
-  {GRISU_UINT64_C(0xc0cb28a9, 8fcf3c80), 541, 182},
-  {GRISU_UINT64_C(0x969eb7c4, 7859e744), 548, 184},
-  {GRISU_UINT64_C(0xeb57ff22, fc0c795a), 554, 186},
-  {GRISU_UINT64_C(0xb7dcbf53, 54e9bece), 561, 188},
-  {GRISU_UINT64_C(0x8fa47579, 1a569d11), 568, 190},
-  {GRISU_UINT64_C(0xe070f78d, 3927556b), 574, 192},
-  {GRISU_UINT64_C(0xaf584166, 54a6babb), 581, 194},
-  {GRISU_UINT64_C(0x88fcf317, f22241e2), 588, 196},
-  {GRISU_UINT64_C(0xd60b3bd5, 6a5586f2), 594, 198},
-  {GRISU_UINT64_C(0xa738c6be, bb12d16d), 601, 200},
-  {GRISU_UINT64_C(0x82a45b45, 0226b39d), 608, 202},
-  {GRISU_UINT64_C(0xcc20ce9b, d35c78a5), 614, 204},
-  {GRISU_UINT64_C(0x9f79a169, bd203e41), 621, 206},
-  {GRISU_UINT64_C(0xf92e0c35, 37826146), 627, 208},
-  {GRISU_UINT64_C(0xc2abf989, 935ddbfe), 634, 210},
-  {GRISU_UINT64_C(0x98165af3, 7b2153df), 641, 212},
-  {GRISU_UINT64_C(0xeda2ee1c, 7064130c), 647, 214},
-  {GRISU_UINT64_C(0xb9a74a06, 37ce2ee1), 654, 216},
-  {GRISU_UINT64_C(0x910ab1d4, db9914a0), 661, 218},
-  {GRISU_UINT64_C(0xe2a0b5dc, 971f303a), 667, 220},
-  {GRISU_UINT64_C(0xb10d8e14, 56105dad), 674, 222},
-  {GRISU_UINT64_C(0x8a5296ff, e33cc930), 681, 224},
-  {GRISU_UINT64_C(0xd8210bef, d30efa5a), 687, 226},
-  {GRISU_UINT64_C(0xa8d9d153, 5ce3b396), 694, 228},
-  {GRISU_UINT64_C(0x83ea2b89, 2091e44e), 701, 230},
-  {GRISU_UINT64_C(0xce1de406, 42e3f4b9), 707, 232},
-  {GRISU_UINT64_C(0xa1075a24, e4421731), 714, 234},
-  {GRISU_UINT64_C(0xfb9b7cd9, a4a7443c), 720, 236},
-  {GRISU_UINT64_C(0xc491798a, 08a2ad4f), 727, 238},
-  {GRISU_UINT64_C(0x9991a6f3, d6bf1766), 734, 240},
-  {GRISU_UINT64_C(0xeff394dc, ff8a948f), 740, 242},
-  {GRISU_UINT64_C(0xbb764c4c, a7a44410), 747, 244},
-  {GRISU_UINT64_C(0x92746b9b, e2f8552c), 754, 246},
-  {GRISU_UINT64_C(0xe4d5e823, 92a40515), 760, 248},
-  {GRISU_UINT64_C(0xb2c71d5b, ca9023f8), 767, 250},
-  {GRISU_UINT64_C(0x8bab8eef, b6409c1a), 774, 252},
-  {GRISU_UINT64_C(0xda3c0f56, 8cc4f3e9), 780, 254},
-  {GRISU_UINT64_C(0xaa7eebfb, 9df9de8e), 787, 256},
-  {GRISU_UINT64_C(0x8533285c, 936b35df), 794, 258},
-  {GRISU_UINT64_C(0xd01fef10, a657842c), 800, 260},
-  {GRISU_UINT64_C(0xa298f2c5, 01f45f43), 807, 262},
-  {GRISU_UINT64_C(0xfe0efb53, d30dd4d8), 813, 264},
-  {GRISU_UINT64_C(0xc67bb459, 7ce2ce49), 820, 266},
-  {GRISU_UINT64_C(0x9b10a4e5, e9913129), 827, 268},
-  {GRISU_UINT64_C(0xf24a01a7, 3cf2dcd0), 833, 270},
-  {GRISU_UINT64_C(0xbd49d14a, a79dbc82), 840, 272},
-  {GRISU_UINT64_C(0x93e1ab82, 52f33b46), 847, 274},
-  {GRISU_UINT64_C(0xe7109bfb, a19c0c9d), 853, 276},
-  {GRISU_UINT64_C(0xb484f9dc, 9641e9db), 860, 278},
-  {GRISU_UINT64_C(0x8d07e334, 55637eb3), 867, 280},
-  {GRISU_UINT64_C(0xdc5c5301, c56b75f7), 873, 282},
-  {GRISU_UINT64_C(0xac2820d9, 623bf429), 880, 284},
-  {GRISU_UINT64_C(0x867f59a9, d4bed6c0), 887, 286},
-  {GRISU_UINT64_C(0xd226fc19, 5c6a2f8c), 893, 288},
-  {GRISU_UINT64_C(0xa42e74f3, d032f526), 900, 290},
-  {GRISU_UINT64_C(0x80444b5e, 7aa7cf85), 907, 292},
-  {GRISU_UINT64_C(0xc86ab5c3, 9fa63441), 913, 294},
-  {GRISU_UINT64_C(0x9c935e00, d4b9d8d2), 920, 296},
-  {GRISU_UINT64_C(0xf4a642e1, 4c6262c9), 926, 298},
-  {GRISU_UINT64_C(0xbf21e440, 03acdd2d), 933, 300},
-  {GRISU_UINT64_C(0x95527a52, 02df0ccb), 940, 302},
-  {GRISU_UINT64_C(0xe950df20, 247c83fd), 946, 304},
-  {GRISU_UINT64_C(0xb6472e51, 1c81471e), 953, 306},
-  {GRISU_UINT64_C(0x8e679c2f, 5e44ff8f), 960, 308},
-  {GRISU_UINT64_C(0xde81e40a, 034bcf50), 966, 310},
-  {GRISU_UINT64_C(0xadd57a27, d29339f6), 973, 312},
-  {GRISU_UINT64_C(0x87cec76f, 1c830549), 980, 314},
-  {GRISU_UINT64_C(0xd433179d, 9c8cb841), 986, 316},
-  {GRISU_UINT64_C(0xa5c7ea73, 224deff3), 993, 318},
-  {GRISU_UINT64_C(0x81842f29, f2cce376), 1000, 320},
-  {GRISU_UINT64_C(0xca5e89b1, 8b602368), 1006, 322},
-  {GRISU_UINT64_C(0x9e19db92, b4e31ba9), 1013, 324},
-  {GRISU_UINT64_C(0xf7086715, 3aa2db39), 1019, 326},
-  {GRISU_UINT64_C(0xc0fe9088, 95cf3b44), 1026, 328},
-  {GRISU_UINT64_C(0x96c6e0ea, b509e64d), 1033, 330},
-  {GRISU_UINT64_C(0xeb96bf6e, badf77d9), 1039, 332},
-  {GRISU_UINT64_C(0xb80dc58e, 81fe95a1), 1046, 334},
-  {GRISU_UINT64_C(0x8fcac257, 558ee4e6), 1053, 336},
-  {GRISU_UINT64_C(0xe0accfa8, 75af45a8), 1059, 338},
-  {GRISU_UINT64_C(0xaf87023b, 9bf0ee6b), 1066, 340},
-  {GRISU_UINT64_C(0x892179be, 91d43a44), 1073, 342},
-  };
-static const int GRISU_CACHE_MAX_DISTANCE(2) = 7;
-// nb elements (2): 326
-static const GRISU_CACHE_STRUCT GRISU_CACHE_NAME(3)[] = {
-  {GRISU_UINT64_C(0xe61acf03, 3d1a45df), -1087, -308},
-  {GRISU_UINT64_C(0xe0b62e29, 29aba83c), -1077, -305},
-  {GRISU_UINT64_C(0xdb71e914, 32b1a24b), -1067, -302},
-  {GRISU_UINT64_C(0xd64d3d9d, b981787d), -1057, -299},
-  {GRISU_UINT64_C(0xd1476e2c, 07286faa), -1047, -296},
-  {GRISU_UINT64_C(0xcc5fc196, fefd7d0c), -1037, -293},
-  {GRISU_UINT64_C(0xc795830d, 75038c1e), -1027, -290},
-  {GRISU_UINT64_C(0xc2e801fb, 244576d5), -1017, -287},
-  {GRISU_UINT64_C(0xbe5691ef, 416bd60c), -1007, -284},
-  {GRISU_UINT64_C(0xb9e08a83, a5e34f08), -997, -281},
-  {GRISU_UINT64_C(0xb5854744, 8ffffb2e), -987, -278},
-  {GRISU_UINT64_C(0xb1442798, f49ffb4b), -977, -275},
-  {GRISU_UINT64_C(0xad1c8eab, 5ee43b67), -967, -272},
-  {GRISU_UINT64_C(0xa90de353, 5aaae202), -957, -269},
-  {GRISU_UINT64_C(0xa5178fff, 668ae0b6), -947, -266},
-  {GRISU_UINT64_C(0xa139029f, 6a239f72), -937, -263},
-  {GRISU_UINT64_C(0x9d71ac8f, ada6c9b5), -927, -260},
-  {GRISU_UINT64_C(0x99c10284, 4f94e0fb), -917, -257},
-  {GRISU_UINT64_C(0x96267c75, 35b763b5), -907, -254},
-  {GRISU_UINT64_C(0x92a1958a, 7675175f), -897, -251},
-  {GRISU_UINT64_C(0x8f31cc09, 37ae58d3), -887, -248},
-  {GRISU_UINT64_C(0x8bd6a141, 006042be), -877, -245},
-  {GRISU_UINT64_C(0x888f9979, 7a5e012d), -867, -242},
-  {GRISU_UINT64_C(0x855c3be0, a17fcd26), -857, -239},
-  {GRISU_UINT64_C(0x823c1279, 5db6ce57), -847, -236},
-  {GRISU_UINT64_C(0xfe5d5415, 0b090b03), -838, -233},
-  {GRISU_UINT64_C(0xf867241c, 8cc6d4c1), -828, -230},
-  {GRISU_UINT64_C(0xf294b943, e17a2bc4), -818, -227},
-  {GRISU_UINT64_C(0xece53cec, 4a314ebe), -808, -224},
-  {GRISU_UINT64_C(0xe757dd7e, c07426e5), -798, -221},
-  {GRISU_UINT64_C(0xe1ebce4d, c7f16dfc), -788, -218},
-  {GRISU_UINT64_C(0xdca04777, f541c568), -778, -215},
-  {GRISU_UINT64_C(0xd77485cb, 25823ac7), -768, -212},
-  {GRISU_UINT64_C(0xd267caa8, 62a12d67), -758, -209},
-  {GRISU_UINT64_C(0xcd795be8, 70516656), -748, -206},
-  {GRISU_UINT64_C(0xc8a883c0, fdaf7df0), -738, -203},
-  {GRISU_UINT64_C(0xc3f490aa, 77bd60fd), -728, -200},
-  {GRISU_UINT64_C(0xbf5cd546, 78eef0b7), -718, -197},
-  {GRISU_UINT64_C(0xbae0a846, d2195713), -708, -194},
-  {GRISU_UINT64_C(0xb67f6455, 292cbf08), -698, -191},
-  {GRISU_UINT64_C(0xb23867fb, 2a35b28e), -688, -188},
-  {GRISU_UINT64_C(0xae0b158b, 4738705f), -678, -185},
-  {GRISU_UINT64_C(0xa9f6d30a, 038d1dbc), -668, -182},
-  {GRISU_UINT64_C(0xa5fb0a17, c777cf0a), -658, -179},
-  {GRISU_UINT64_C(0xa21727db, 38cb0030), -648, -176},
-  {GRISU_UINT64_C(0x9e4a9cec, 15763e2f), -638, -173},
-  {GRISU_UINT64_C(0x9a94dd3e, 8cf578ba), -628, -170},
-  {GRISU_UINT64_C(0x96f5600f, 15a7b7e5), -618, -167},
-  {GRISU_UINT64_C(0x936b9fce, bb25c996), -608, -164},
-  {GRISU_UINT64_C(0x8ff71a0f, e2c2e6dc), -598, -161},
-  {GRISU_UINT64_C(0x8c974f73, 83725573), -588, -158},
-  {GRISU_UINT64_C(0x894bc396, ce5da772), -578, -155},
-  {GRISU_UINT64_C(0x8613fd01, 45877586), -568, -152},
-  {GRISU_UINT64_C(0x82ef8513, 3de648c5), -558, -149},
-  {GRISU_UINT64_C(0xffbbcfe9, 94e5c620), -549, -146},
-  {GRISU_UINT64_C(0xf9bd690a, 1b68637b), -539, -143},
-  {GRISU_UINT64_C(0xf3e2f893, dec3f126), -529, -140},
-  {GRISU_UINT64_C(0xee2ba6c0, 678b597f), -519, -137},
-  {GRISU_UINT64_C(0xe896a0d7, e51e1566), -509, -134},
-  {GRISU_UINT64_C(0xe3231912, d5bf60e6), -499, -131},
-  {GRISU_UINT64_C(0xddd0467c, 64bce4a1), -489, -128},
-  {GRISU_UINT64_C(0xd89d64d5, 7a607745), -479, -125},
-  {GRISU_UINT64_C(0xd389b478, 79823479), -469, -122},
-  {GRISU_UINT64_C(0xce947a3d, a6a9273e), -459, -119},
-  {GRISU_UINT64_C(0xc9bcff60, 34c13053), -449, -116},
-  {GRISU_UINT64_C(0xc5029163, f384a931), -439, -113},
-  {GRISU_UINT64_C(0xc06481fb, 9bcf8d3a), -429, -110},
-  {GRISU_UINT64_C(0xbbe226ef, b628afeb), -419, -107},
-  {GRISU_UINT64_C(0xb77ada06, 17e3bbcb), -409, -104},
-  {GRISU_UINT64_C(0xb32df8e9, f3546564), -399, -101},
-  {GRISU_UINT64_C(0xaefae514, 77a06b04), -389, -98},
-  {GRISU_UINT64_C(0xaae103b5, fcd2a882), -379, -95},
-  {GRISU_UINT64_C(0xa6dfbd9f, b8e5b88f), -369, -92},
-  {GRISU_UINT64_C(0xa2f67f2d, fa90563b), -359, -89},
-  {GRISU_UINT64_C(0x9f24b832, e6b0f436), -349, -86},
-  {GRISU_UINT64_C(0x9b69dbe1, b548ce7d), -339, -83},
-  {GRISU_UINT64_C(0x97c560ba, 6b0919a6), -329, -80},
-  {GRISU_UINT64_C(0x9436c076, 0c86e30c), -319, -77},
-  {GRISU_UINT64_C(0x90bd77f3, 483bb9ba), -309, -74},
-  {GRISU_UINT64_C(0x8d590723, 948a535f), -299, -71},
-  {GRISU_UINT64_C(0x8a08f0f8, bf0f156b), -289, -68},
-  {GRISU_UINT64_C(0x86ccbb52, ea94baeb), -279, -65},
-  {GRISU_UINT64_C(0x83a3eeee, f9153e89), -269, -62},
-  {GRISU_UINT64_C(0x808e1755, 5f3ebf12), -259, -59},
-  {GRISU_UINT64_C(0xfb158592, be068d2f), -250, -56},
-  {GRISU_UINT64_C(0xf5330471, 4d9265e0), -240, -53},
-  {GRISU_UINT64_C(0xef73d256, a5c0f77d), -230, -50},
-  {GRISU_UINT64_C(0xe9d71b68, 9dde71b0), -220, -47},
-  {GRISU_UINT64_C(0xe45c10c4, 2a2b3b06), -210, -44},
-  {GRISU_UINT64_C(0xdf01e85f, 912e37a3), -200, -41},
-  {GRISU_UINT64_C(0xd9c7dced, 53c72256), -190, -38},
-  {GRISU_UINT64_C(0xd4ad2dbf, c3d07788), -180, -35},
-  {GRISU_UINT64_C(0xcfb11ead, 453994ba), -170, -32},
-  {GRISU_UINT64_C(0xcad2f7f5, 359a3b3e), -160, -29},
-  {GRISU_UINT64_C(0xc6120625, 76589ddb), -150, -26},
-  {GRISU_UINT64_C(0xc16d9a00, 95928a27), -140, -23},
-  {GRISU_UINT64_C(0xbce50864, 92111aeb), -130, -20},
-  {GRISU_UINT64_C(0xb877aa32, 36a4b449), -120, -17},
-  {GRISU_UINT64_C(0xb424dc35, 095cd80f), -110, -14},
-  {GRISU_UINT64_C(0xafebff0b, cb24aaff), -100, -11},
-  {GRISU_UINT64_C(0xabcc7711, 8461cefd), -90, -8},
-  {GRISU_UINT64_C(0xa7c5ac47, 1b478423), -80, -5},
-  {GRISU_UINT64_C(0xa3d70a3d, 70a3d70a), -70, -2},
-  {GRISU_UINT64_C(0xa0000000, 00000000), -60, 1},
-  {GRISU_UINT64_C(0x9c400000, 00000000), -50, 4},
-  {GRISU_UINT64_C(0x98968000, 00000000), -40, 7},
-  {GRISU_UINT64_C(0x9502f900, 00000000), -30, 10},
-  {GRISU_UINT64_C(0x9184e72a, 00000000), -20, 13},
-  {GRISU_UINT64_C(0x8e1bc9bf, 04000000), -10, 16},
-  {GRISU_UINT64_C(0x8ac72304, 89e80000), 0, 19},
-  {GRISU_UINT64_C(0x87867832, 6eac9000), 10, 22},
-  {GRISU_UINT64_C(0x84595161, 401484a0), 20, 25},
-  {GRISU_UINT64_C(0x813f3978, f8940984), 30, 28},
-  {GRISU_UINT64_C(0xfc6f7c40, 45812296), 39, 31},
-  {GRISU_UINT64_C(0xf684df56, c3e01bc7), 49, 34},
-  {GRISU_UINT64_C(0xf0bdc21a, bb48db20), 59, 37},
-  {GRISU_UINT64_C(0xeb194f8e, 1ae525fd), 69, 40},
-  {GRISU_UINT64_C(0xe596b7b0, c643c719), 79, 43},
-  {GRISU_UINT64_C(0xe0352f62, a19e306f), 89, 46},
-  {GRISU_UINT64_C(0xdaf3f046, 51d47b4c), 99, 49},
-  {GRISU_UINT64_C(0xd5d238a4, abe98068), 109, 52},
-  {GRISU_UINT64_C(0xd0cf4b50, cfe20766), 119, 55},
-  {GRISU_UINT64_C(0xcbea6f8c, eb02bb3a), 129, 58},
-  {GRISU_UINT64_C(0xc722f0ef, 9d80aad6), 139, 61},
-  {GRISU_UINT64_C(0xc2781f49, ffcfa6d5), 149, 64},
-  {GRISU_UINT64_C(0xbde94e8e, 43d0c8ec), 159, 67},
-  {GRISU_UINT64_C(0xb975d6b6, ee39e437), 169, 70},
-  {GRISU_UINT64_C(0xb51d13ae, a4a488dd), 179, 73},
-  {GRISU_UINT64_C(0xb0de6538, 8cc8ada8), 189, 76},
-  {GRISU_UINT64_C(0xacb92ed9, 397bf996), 199, 79},
-  {GRISU_UINT64_C(0xa8acd7c0, 222311bd), 209, 82},
-  {GRISU_UINT64_C(0xa4b8cab1, a1563f52), 219, 85},
-  {GRISU_UINT64_C(0xa0dc75f1, 778e39d6), 229, 88},
-  {GRISU_UINT64_C(0x9d174b2d, cec0e47b), 239, 91},
-  {GRISU_UINT64_C(0x9968bf6a, bbe85f20), 249, 94},
-  {GRISU_UINT64_C(0x95d04aee, 3b80ece6), 259, 97},
-  {GRISU_UINT64_C(0x924d692c, a61be758), 269, 100},
-  {GRISU_UINT64_C(0x8edf98b5, 9a373fec), 279, 103},
-  {GRISU_UINT64_C(0x8b865b21, 5899f46d), 289, 106},
-  {GRISU_UINT64_C(0x884134fe, 908658b2), 299, 109},
-  {GRISU_UINT64_C(0x850fadc0, 9923329e), 309, 112},
-  {GRISU_UINT64_C(0x81f14fae, 158c5f6e), 319, 115},
-  {GRISU_UINT64_C(0xfdcb4fa0, 02162a63), 328, 118},
-  {GRISU_UINT64_C(0xf7d88bc2, 4209a565), 338, 121},
-  {GRISU_UINT64_C(0xf209787b, b47d6b85), 348, 124},
-  {GRISU_UINT64_C(0xec5d3fa8, ce427b00), 358, 127},
-  {GRISU_UINT64_C(0xe6d3102a, d96cec1e), 368, 130},
-  {GRISU_UINT64_C(0xe16a1dc9, d8545e95), 378, 133},
-  {GRISU_UINT64_C(0xdc21a117, 1d42645d), 388, 136},
-  {GRISU_UINT64_C(0xd6f8d750, 9292d603), 398, 139},
-  {GRISU_UINT64_C(0xd1ef0244, af2364ff), 408, 142},
-  {GRISU_UINT64_C(0xcd036837, 130890a1), 418, 145},
-  {GRISU_UINT64_C(0xc83553c5, c8965d3d), 428, 148},
-  {GRISU_UINT64_C(0xc38413cf, 25e2d70e), 438, 151},
-  {GRISU_UINT64_C(0xbeeefb58, 4aff8604), 448, 154},
-  {GRISU_UINT64_C(0xba756174, 393d88e0), 458, 157},
-  {GRISU_UINT64_C(0xb616a12b, 7fe617aa), 468, 160},
-  {GRISU_UINT64_C(0xb1d21964, 7ae6b31c), 478, 163},
-  {GRISU_UINT64_C(0xada72ccc, 20054aea), 488, 166},
-  {GRISU_UINT64_C(0xa99541bf, 57452b28), 498, 169},
-  {GRISU_UINT64_C(0xa59bc234, db398c25), 508, 172},
-  {GRISU_UINT64_C(0xa1ba1ba7, 9e1632dc), 518, 175},
-  {GRISU_UINT64_C(0x9defbf01, b061adab), 528, 178},
-  {GRISU_UINT64_C(0x9a3c2087, a63f6399), 538, 181},
-  {GRISU_UINT64_C(0x969eb7c4, 7859e744), 548, 184},
-  {GRISU_UINT64_C(0x9316ff75, dd87cbd8), 558, 187},
-  {GRISU_UINT64_C(0x8fa47579, 1a569d11), 568, 190},
-  {GRISU_UINT64_C(0x8c469ab8, 43b89563), 578, 193},
-  {GRISU_UINT64_C(0x88fcf317, f22241e2), 588, 196},
-  {GRISU_UINT64_C(0x85c70565, 62757457), 598, 199},
-  {GRISU_UINT64_C(0x82a45b45, 0226b39d), 608, 202},
-  {GRISU_UINT64_C(0xff290242, c83396ce), 617, 205},
-  {GRISU_UINT64_C(0xf92e0c35, 37826146), 627, 208},
-  {GRISU_UINT64_C(0xf356f7eb, f83552fe), 637, 211},
-  {GRISU_UINT64_C(0xeda2ee1c, 7064130c), 647, 214},
-  {GRISU_UINT64_C(0xe8111c87, c5c1ba9a), 657, 217},
-  {GRISU_UINT64_C(0xe2a0b5dc, 971f303a), 667, 220},
-  {GRISU_UINT64_C(0xdd50f199, 6b947519), 677, 223},
-  {GRISU_UINT64_C(0xd8210bef, d30efa5a), 687, 226},
-  {GRISU_UINT64_C(0xd31045a8, 341ca07c), 697, 229},
-  {GRISU_UINT64_C(0xce1de406, 42e3f4b9), 707, 232},
-  {GRISU_UINT64_C(0xc94930ae, 1d529cfd), 717, 235},
-  {GRISU_UINT64_C(0xc491798a, 08a2ad4f), 727, 238},
-  {GRISU_UINT64_C(0xbff610b0, cc6edd3f), 737, 241},
-  {GRISU_UINT64_C(0xbb764c4c, a7a44410), 747, 244},
-  {GRISU_UINT64_C(0xb7118682, dbb66a77), 757, 247},
-  {GRISU_UINT64_C(0xb2c71d5b, ca9023f8), 767, 250},
-  {GRISU_UINT64_C(0xae9672ab, a3d0c321), 777, 253},
-  {GRISU_UINT64_C(0xaa7eebfb, 9df9de8e), 787, 256},
-  {GRISU_UINT64_C(0xa67ff273, b8460357), 797, 259},
-  {GRISU_UINT64_C(0xa298f2c5, 01f45f43), 807, 262},
-  {GRISU_UINT64_C(0x9ec95d14, 63e8a507), 817, 265},
-  {GRISU_UINT64_C(0x9b10a4e5, e9913129), 827, 268},
-  {GRISU_UINT64_C(0x976e4108, 8617ca02), 837, 271},
-  {GRISU_UINT64_C(0x93e1ab82, 52f33b46), 847, 274},
-  {GRISU_UINT64_C(0x906a617d, 450187e2), 857, 277},
-  {GRISU_UINT64_C(0x8d07e334, 55637eb3), 867, 280},
-  {GRISU_UINT64_C(0x89b9b3e1, 1b6329bb), 877, 283},
-  {GRISU_UINT64_C(0x867f59a9, d4bed6c0), 887, 286},
-  {GRISU_UINT64_C(0x83585d8f, d9c25db8), 897, 289},
-  {GRISU_UINT64_C(0x80444b5e, 7aa7cf85), 907, 292},
-  {GRISU_UINT64_C(0xfa856334, 878fc151), 916, 295},
-  {GRISU_UINT64_C(0xf4a642e1, 4c6262c9), 926, 298},
-  {GRISU_UINT64_C(0xeeea5d50, 04981478), 936, 301},
-  {GRISU_UINT64_C(0xe950df20, 247c83fd), 946, 304},
-  {GRISU_UINT64_C(0xe3d8f9e5, 63a198e5), 956, 307},
-  {GRISU_UINT64_C(0xde81e40a, 034bcf50), 966, 310},
-  {GRISU_UINT64_C(0xd94ad8b1, c7380874), 976, 313},
-  {GRISU_UINT64_C(0xd433179d, 9c8cb841), 986, 316},
-  {GRISU_UINT64_C(0xcf39e50f, eae16bf0), 996, 319},
-  {GRISU_UINT64_C(0xca5e89b1, 8b602368), 1006, 322},
-  {GRISU_UINT64_C(0xc5a05277, 621be294), 1016, 325},
-  {GRISU_UINT64_C(0xc0fe9088, 95cf3b44), 1026, 328},
-  {GRISU_UINT64_C(0xbc789925, 624c5fe1), 1036, 331},
-  {GRISU_UINT64_C(0xb80dc58e, 81fe95a1), 1046, 334},
-  {GRISU_UINT64_C(0xb3bd72ed, 2af29e20), 1056, 337},
-  {GRISU_UINT64_C(0xaf87023b, 9bf0ee6b), 1066, 340},
-  };
-static const int GRISU_CACHE_MAX_DISTANCE(3) = 10;
-// nb elements (3): 217
-static const GRISU_CACHE_STRUCT GRISU_CACHE_NAME(4)[] = {
-  {GRISU_UINT64_C(0xe61acf03, 3d1a45df), -1087, -308},
-  {GRISU_UINT64_C(0x8c71dcd9, ba0b4926), -1073, -304},
-  {GRISU_UINT64_C(0xab70fe17, c79ac6ca), -1060, -300},
-  {GRISU_UINT64_C(0xd1476e2c, 07286faa), -1047, -296},
-  {GRISU_UINT64_C(0xff77b1fc, bebcdc4f), -1034, -292},
-  {GRISU_UINT64_C(0x9becce62, 836ac577), -1020, -288},
-  {GRISU_UINT64_C(0xbe5691ef, 416bd60c), -1007, -284},
-  {GRISU_UINT64_C(0xe858ad24, 8f5c22ca), -994, -280},
-  {GRISU_UINT64_C(0x8dd01fad, 907ffc3c), -980, -276},
-  {GRISU_UINT64_C(0xad1c8eab, 5ee43b67), -967, -272},
-  {GRISU_UINT64_C(0xd3515c28, 31559a83), -954, -268},
-  {GRISU_UINT64_C(0x80fa687f, 881c7f8e), -940, -264},
-  {GRISU_UINT64_C(0x9d71ac8f, ada6c9b5), -927, -260},
-  {GRISU_UINT64_C(0xc0314325, 637a193a), -914, -256},
-  {GRISU_UINT64_C(0xea9c2277, 23ee8bcb), -901, -252},
-  {GRISU_UINT64_C(0x8f31cc09, 37ae58d3), -887, -248},
-  {GRISU_UINT64_C(0xaecc4991, 4078536d), -874, -244},
-  {GRISU_UINT64_C(0xd5605fcd, cf32e1d7), -861, -240},
-  {GRISU_UINT64_C(0x823c1279, 5db6ce57), -847, -236},
-  {GRISU_UINT64_C(0x9efa548d, 26e5a6e2), -834, -232},
-  {GRISU_UINT64_C(0xc2109436, 4dfb5637), -821, -228},
-  {GRISU_UINT64_C(0xece53cec, 4a314ebe), -808, -224},
-  {GRISU_UINT64_C(0x9096ea6f, 3848984f), -794, -220},
-  {GRISU_UINT64_C(0xb080392c, c4349ded), -781, -216},
-  {GRISU_UINT64_C(0xd77485cb, 25823ac7), -768, -212},
-  {GRISU_UINT64_C(0x8380dea9, 3da4bc60), -754, -208},
-  {GRISU_UINT64_C(0xa086cfcd, 97bf97f4), -741, -204},
-  {GRISU_UINT64_C(0xc3f490aa, 77bd60fd), -728, -200},
-  {GRISU_UINT64_C(0xef340a98, 172aace5), -715, -196},
-  {GRISU_UINT64_C(0x91ff8377, 5423cc06), -701, -192},
-  {GRISU_UINT64_C(0xb23867fb, 2a35b28e), -688, -188},
-  {GRISU_UINT64_C(0xd98ddaee, 19068c76), -675, -184},
-  {GRISU_UINT64_C(0x84c8d4df, d2c63f3b), -661, -180},
-  {GRISU_UINT64_C(0xa21727db, 38cb0030), -648, -176},
-  {GRISU_UINT64_C(0xc5dd4427, 1ad3cdba), -635, -172},
-  {GRISU_UINT64_C(0xf18899b1, bc3f8ca2), -622, -168},
-  {GRISU_UINT64_C(0x936b9fce, bb25c996), -608, -164},
-  {GRISU_UINT64_C(0xb3f4e093, db73a093), -595, -160},
-  {GRISU_UINT64_C(0xdbac6c24, 7d62a584), -582, -156},
-  {GRISU_UINT64_C(0x8613fd01, 45877586), -568, -152},
-  {GRISU_UINT64_C(0xa3ab6658, 0d5fdaf6), -555, -148},
-  {GRISU_UINT64_C(0xc7caba6e, 7c5382c9), -542, -144},
-  {GRISU_UINT64_C(0xf3e2f893, dec3f126), -529, -140},
-  {GRISU_UINT64_C(0x94db4838, 40b717f0), -515, -136},
-  {GRISU_UINT64_C(0xb5b5ada8, aaff80b8), -502, -132},
-  {GRISU_UINT64_C(0xddd0467c, 64bce4a1), -489, -128},
-  {GRISU_UINT64_C(0x87625f05, 6c7c4a8b), -475, -124},
-  {GRISU_UINT64_C(0xa54394fe, 1eedb8ff), -462, -120},
-  {GRISU_UINT64_C(0xc9bcff60, 34c13053), -449, -116},
-  {GRISU_UINT64_C(0xf64335bc, f065d37d), -436, -112},
-  {GRISU_UINT64_C(0x964e858c, 91ba2655), -422, -108},
-  {GRISU_UINT64_C(0xb77ada06, 17e3bbcb), -409, -104},
-  {GRISU_UINT64_C(0xdff97724, 70297ebd), -396, -100},
-  {GRISU_UINT64_C(0x88b402f7, fd75539b), -382, -96},
-  {GRISU_UINT64_C(0xa6dfbd9f, b8e5b88f), -369, -92},
-  {GRISU_UINT64_C(0xcbb41ef9, 79346bca), -356, -88},
-  {GRISU_UINT64_C(0xf8a95fcf, 88747d94), -343, -84},
-  {GRISU_UINT64_C(0x97c560ba, 6b0919a6), -329, -80},
-  {GRISU_UINT64_C(0xb9447093, 8fa89bcf), -316, -76},
-  {GRISU_UINT64_C(0xe2280b6c, 20dd5232), -303, -72},
-  {GRISU_UINT64_C(0x8a08f0f8, bf0f156b), -289, -68},
-  {GRISU_UINT64_C(0xa87fea27, a539e9a5), -276, -64},
-  {GRISU_UINT64_C(0xcdb02555, 653131b6), -263, -60},
-  {GRISU_UINT64_C(0xfb158592, be068d2f), -250, -56},
-  {GRISU_UINT64_C(0x993fe2c6, d07b7fac), -236, -52},
-  {GRISU_UINT64_C(0xbb127c53, b17ec159), -223, -48},
-  {GRISU_UINT64_C(0xe45c10c4, 2a2b3b06), -210, -44},
-  {GRISU_UINT64_C(0x8b61313b, babce2c6), -196, -40},
-  {GRISU_UINT64_C(0xaa242499, 697392d3), -183, -36},
-  {GRISU_UINT64_C(0xcfb11ead, 453994ba), -170, -32},
-  {GRISU_UINT64_C(0xfd87b5f2, 8300ca0e), -157, -28},
-  {GRISU_UINT64_C(0x9abe14cd, 44753b53), -143, -24},
-  {GRISU_UINT64_C(0xbce50864, 92111aeb), -130, -20},
-  {GRISU_UINT64_C(0xe69594be, c44de15b), -117, -16},
-  {GRISU_UINT64_C(0x8cbccc09, 6f5088cc), -103, -12},
-  {GRISU_UINT64_C(0xabcc7711, 8461cefd), -90, -8},
-  {GRISU_UINT64_C(0xd1b71758, e219652c), -77, -4},
-  {GRISU_UINT64_C(0x80000000, 00000000), -63, 0},
-  {GRISU_UINT64_C(0x9c400000, 00000000), -50, 4},
-  {GRISU_UINT64_C(0xbebc2000, 00000000), -37, 8},
-  {GRISU_UINT64_C(0xe8d4a510, 00000000), -24, 12},
-  {GRISU_UINT64_C(0x8e1bc9bf, 04000000), -10, 16},
-  {GRISU_UINT64_C(0xad78ebc5, ac620000), 3, 20},
-  {GRISU_UINT64_C(0xd3c21bce, cceda100), 16, 24},
-  {GRISU_UINT64_C(0x813f3978, f8940984), 30, 28},
-  {GRISU_UINT64_C(0x9dc5ada8, 2b70b59e), 43, 32},
-  {GRISU_UINT64_C(0xc097ce7b, c90715b3), 56, 36},
-  {GRISU_UINT64_C(0xeb194f8e, 1ae525fd), 69, 40},
-  {GRISU_UINT64_C(0x8f7e32ce, 7bea5c70), 83, 44},
-  {GRISU_UINT64_C(0xaf298d05, 0e4395d7), 96, 48},
-  {GRISU_UINT64_C(0xd5d238a4, abe98068), 109, 52},
-  {GRISU_UINT64_C(0x82818f12, 81ed44a0), 123, 56},
-  {GRISU_UINT64_C(0x9f4f2726, 179a2245), 136, 60},
-  {GRISU_UINT64_C(0xc2781f49, ffcfa6d5), 149, 64},
-  {GRISU_UINT64_C(0xed63a231, d4c4fb27), 162, 68},
-  {GRISU_UINT64_C(0x90e40fbe, ea1d3a4b), 176, 72},
-  {GRISU_UINT64_C(0xb0de6538, 8cc8ada8), 189, 76},
-  {GRISU_UINT64_C(0xd7e77a8f, 87daf7fc), 202, 80},
-  {GRISU_UINT64_C(0x83c7088e, 1aab65db), 216, 84},
-  {GRISU_UINT64_C(0xa0dc75f1, 778e39d6), 229, 88},
-  {GRISU_UINT64_C(0xc45d1df9, 42711d9a), 242, 92},
-  {GRISU_UINT64_C(0xefb3ab16, c59b14a3), 255, 96},
-  {GRISU_UINT64_C(0x924d692c, a61be758), 269, 100},
-  {GRISU_UINT64_C(0xb2977ee3, 00c50fe7), 282, 104},
-  {GRISU_UINT64_C(0xda01ee64, 1a708dea), 295, 108},
-  {GRISU_UINT64_C(0x850fadc0, 9923329e), 309, 112},
-  {GRISU_UINT64_C(0xa26da399, 9aef774a), 322, 116},
-  {GRISU_UINT64_C(0xc646d635, 01a1511e), 335, 120},
-  {GRISU_UINT64_C(0xf209787b, b47d6b85), 348, 124},
-  {GRISU_UINT64_C(0x93ba47c9, 80e98ce0), 362, 128},
-  {GRISU_UINT64_C(0xb454e4a1, 79dd1877), 375, 132},
-  {GRISU_UINT64_C(0xdc21a117, 1d42645d), 388, 136},
-  {GRISU_UINT64_C(0x865b8692, 5b9bc5c2), 402, 140},
-  {GRISU_UINT64_C(0xa402b9c5, a8d3a6e7), 415, 144},
-  {GRISU_UINT64_C(0xc83553c5, c8965d3d), 428, 148},
-  {GRISU_UINT64_C(0xf46518c2, ef5b8cd1), 441, 152},
-  {GRISU_UINT64_C(0x952ab45c, fa97a0b3), 455, 156},
-  {GRISU_UINT64_C(0xb616a12b, 7fe617aa), 468, 160},
-  {GRISU_UINT64_C(0xde469fbd, 99a05fe3), 481, 164},
-  {GRISU_UINT64_C(0x87aa9aff, 79042287), 495, 168},
-  {GRISU_UINT64_C(0xa59bc234, db398c25), 508, 172},
-  {GRISU_UINT64_C(0xca28a291, 859bbf93), 521, 176},
-  {GRISU_UINT64_C(0xf6c69a72, a3989f5c), 534, 180},
-  {GRISU_UINT64_C(0x969eb7c4, 7859e744), 548, 184},
-  {GRISU_UINT64_C(0xb7dcbf53, 54e9bece), 561, 188},
-  {GRISU_UINT64_C(0xe070f78d, 3927556b), 574, 192},
-  {GRISU_UINT64_C(0x88fcf317, f22241e2), 588, 196},
-  {GRISU_UINT64_C(0xa738c6be, bb12d16d), 601, 200},
-  {GRISU_UINT64_C(0xcc20ce9b, d35c78a5), 614, 204},
-  {GRISU_UINT64_C(0xf92e0c35, 37826146), 627, 208},
-  {GRISU_UINT64_C(0x98165af3, 7b2153df), 641, 212},
-  {GRISU_UINT64_C(0xb9a74a06, 37ce2ee1), 654, 216},
-  {GRISU_UINT64_C(0xe2a0b5dc, 971f303a), 667, 220},
-  {GRISU_UINT64_C(0x8a5296ff, e33cc930), 681, 224},
-  {GRISU_UINT64_C(0xa8d9d153, 5ce3b396), 694, 228},
-  {GRISU_UINT64_C(0xce1de406, 42e3f4b9), 707, 232},
-  {GRISU_UINT64_C(0xfb9b7cd9, a4a7443c), 720, 236},
-  {GRISU_UINT64_C(0x9991a6f3, d6bf1766), 734, 240},
-  {GRISU_UINT64_C(0xbb764c4c, a7a44410), 747, 244},
-  {GRISU_UINT64_C(0xe4d5e823, 92a40515), 760, 248},
-  {GRISU_UINT64_C(0x8bab8eef, b6409c1a), 774, 252},
-  {GRISU_UINT64_C(0xaa7eebfb, 9df9de8e), 787, 256},
-  {GRISU_UINT64_C(0xd01fef10, a657842c), 800, 260},
-  {GRISU_UINT64_C(0xfe0efb53, d30dd4d8), 813, 264},
-  {GRISU_UINT64_C(0x9b10a4e5, e9913129), 827, 268},
-  {GRISU_UINT64_C(0xbd49d14a, a79dbc82), 840, 272},
-  {GRISU_UINT64_C(0xe7109bfb, a19c0c9d), 853, 276},
-  {GRISU_UINT64_C(0x8d07e334, 55637eb3), 867, 280},
-  {GRISU_UINT64_C(0xac2820d9, 623bf429), 880, 284},
-  {GRISU_UINT64_C(0xd226fc19, 5c6a2f8c), 893, 288},
-  {GRISU_UINT64_C(0x80444b5e, 7aa7cf85), 907, 292},
-  {GRISU_UINT64_C(0x9c935e00, d4b9d8d2), 920, 296},
-  {GRISU_UINT64_C(0xbf21e440, 03acdd2d), 933, 300},
-  {GRISU_UINT64_C(0xe950df20, 247c83fd), 946, 304},
-  {GRISU_UINT64_C(0x8e679c2f, 5e44ff8f), 960, 308},
-  {GRISU_UINT64_C(0xadd57a27, d29339f6), 973, 312},
-  {GRISU_UINT64_C(0xd433179d, 9c8cb841), 986, 316},
-  {GRISU_UINT64_C(0x81842f29, f2cce376), 1000, 320},
-  {GRISU_UINT64_C(0x9e19db92, b4e31ba9), 1013, 324},
-  {GRISU_UINT64_C(0xc0fe9088, 95cf3b44), 1026, 328},
-  {GRISU_UINT64_C(0xeb96bf6e, badf77d9), 1039, 332},
-  {GRISU_UINT64_C(0x8fcac257, 558ee4e6), 1053, 336},
-  {GRISU_UINT64_C(0xaf87023b, 9bf0ee6b), 1066, 340},
-  };
-static const int GRISU_CACHE_MAX_DISTANCE(4) = 14;
-// nb elements (4): 163
-static const GRISU_CACHE_STRUCT GRISU_CACHE_NAME(5)[] = {
-  {GRISU_UINT64_C(0xe61acf03, 3d1a45df), -1087, -308},
-  {GRISU_UINT64_C(0xaf8e5410, 288e1b6f), -1070, -303},
-  {GRISU_UINT64_C(0x85f04682, 93f0eb4e), -1053, -298},
-  {GRISU_UINT64_C(0xcc5fc196, fefd7d0c), -1037, -293},
-  {GRISU_UINT64_C(0x9becce62, 836ac577), -1020, -288},
-  {GRISU_UINT64_C(0xedec366b, 11c6cb8f), -1004, -283},
-  {GRISU_UINT64_C(0xb5854744, 8ffffb2e), -987, -278},
-  {GRISU_UINT64_C(0x8a7d3eef, 7f1cfc52), -970, -273},
-  {GRISU_UINT64_C(0xd3515c28, 31559a83), -954, -268},
-  {GRISU_UINT64_C(0xa139029f, 6a239f72), -937, -263},
-  {GRISU_UINT64_C(0xf6019da0, 7f549b2b), -921, -258},
-  {GRISU_UINT64_C(0xbbb01b92, 83253ca3), -904, -253},
-  {GRISU_UINT64_C(0x8f31cc09, 37ae58d3), -887, -248},
-  {GRISU_UINT64_C(0xda7f5bf5, 90966849), -871, -243},
-  {GRISU_UINT64_C(0xa6b34ad8, c9dfc070), -854, -238},
-  {GRISU_UINT64_C(0xfe5d5415, 0b090b03), -838, -233},
-  {GRISU_UINT64_C(0xc2109436, 4dfb5637), -821, -228},
-  {GRISU_UINT64_C(0x940f4613, ae5ed137), -804, -223},
-  {GRISU_UINT64_C(0xe1ebce4d, c7f16dfc), -788, -218},
-  {GRISU_UINT64_C(0xac5d37d5, b79b6239), -771, -213},
-  {GRISU_UINT64_C(0x8380dea9, 3da4bc60), -754, -208},
-  {GRISU_UINT64_C(0xc8a883c0, fdaf7df0), -738, -203},
-  {GRISU_UINT64_C(0x99171105, 2d8bf3c5), -721, -198},
-  {GRISU_UINT64_C(0xe998d258, 869facd7), -705, -193},
-  {GRISU_UINT64_C(0xb23867fb, 2a35b28e), -688, -188},
-  {GRISU_UINT64_C(0x87f8a8d4, cfa417ca), -671, -183},
-  {GRISU_UINT64_C(0xcf79cc9d, b955c2cc), -655, -178},
-  {GRISU_UINT64_C(0x9e4a9cec, 15763e2f), -638, -173},
-  {GRISU_UINT64_C(0xf18899b1, bc3f8ca2), -622, -168},
-  {GRISU_UINT64_C(0xb84687c2, 69ef3bfb), -605, -163},
-  {GRISU_UINT64_C(0x8c974f73, 83725573), -588, -158},
-  {GRISU_UINT64_C(0xd686619b, a27255a3), -572, -153},
-  {GRISU_UINT64_C(0xa3ab6658, 0d5fdaf6), -555, -148},
-  {GRISU_UINT64_C(0xf9bd690a, 1b68637b), -539, -143},
-  {GRISU_UINT64_C(0xbe895233, 86091466), -522, -138},
-  {GRISU_UINT64_C(0x915e2486, ef32cd60), -505, -133},
-  {GRISU_UINT64_C(0xddd0467c, 64bce4a1), -489, -128},
-  {GRISU_UINT64_C(0xa93af6c6, c79b5d2e), -472, -123},
-  {GRISU_UINT64_C(0x811ccc66, 8829b887), -455, -118},
-  {GRISU_UINT64_C(0xc5029163, f384a931), -439, -113},
-  {GRISU_UINT64_C(0x964e858c, 91ba2655), -422, -108},
-  {GRISU_UINT64_C(0xe5599087, 9ddcaabe), -406, -103},
-  {GRISU_UINT64_C(0xaefae514, 77a06b04), -389, -98},
-  {GRISU_UINT64_C(0x857fcae6, 2d8493a5), -372, -93},
-  {GRISU_UINT64_C(0xcbb41ef9, 79346bca), -356, -88},
-  {GRISU_UINT64_C(0x9b69dbe1, b548ce7d), -339, -83},
-  {GRISU_UINT64_C(0xed246723, 473e3813), -323, -78},
-  {GRISU_UINT64_C(0xb4ecd5f0, 1a4aa828), -306, -73},
-  {GRISU_UINT64_C(0x8a08f0f8, bf0f156b), -289, -68},
-  {GRISU_UINT64_C(0xd29fe4b1, 8e88640f), -273, -63},
-  {GRISU_UINT64_C(0xa0b19d2a, b70e6ed6), -256, -58},
-  {GRISU_UINT64_C(0xf5330471, 4d9265e0), -240, -53},
-  {GRISU_UINT64_C(0xbb127c53, b17ec159), -223, -48},
-  {GRISU_UINT64_C(0x8eb98a7a, 9a5b04e3), -206, -43},
-  {GRISU_UINT64_C(0xd9c7dced, 53c72256), -190, -38},
-  {GRISU_UINT64_C(0xa6274bbd, d0fadd62), -173, -33},
-  {GRISU_UINT64_C(0xfd87b5f2, 8300ca0e), -157, -28},
-  {GRISU_UINT64_C(0xc16d9a00, 95928a27), -140, -23},
-  {GRISU_UINT64_C(0x9392ee8e, 921d5d07), -123, -18},
-  {GRISU_UINT64_C(0xe12e1342, 4bb40e13), -107, -13},
-  {GRISU_UINT64_C(0xabcc7711, 8461cefd), -90, -8},
-  {GRISU_UINT64_C(0x83126e97, 8d4fdf3b), -73, -3},
-  {GRISU_UINT64_C(0xc8000000, 00000000), -57, 2},
-  {GRISU_UINT64_C(0x98968000, 00000000), -40, 7},
-  {GRISU_UINT64_C(0xe8d4a510, 00000000), -24, 12},
-  {GRISU_UINT64_C(0xb1a2bc2e, c5000000), -7, 17},
-  {GRISU_UINT64_C(0x87867832, 6eac9000), 10, 22},
-  {GRISU_UINT64_C(0xcecb8f27, f4200f3a), 26, 27},
-  {GRISU_UINT64_C(0x9dc5ada8, 2b70b59e), 43, 32},
-  {GRISU_UINT64_C(0xf0bdc21a, bb48db20), 59, 37},
-  {GRISU_UINT64_C(0xb7abc627, 050305ae), 76, 42},
-  {GRISU_UINT64_C(0x8c213d9d, a502de45), 93, 47},
-  {GRISU_UINT64_C(0xd5d238a4, abe98068), 109, 52},
-  {GRISU_UINT64_C(0xa321f2d7, 226895c8), 126, 57},
-  {GRISU_UINT64_C(0xf8ebad2b, 84e0d58c), 142, 62},
-  {GRISU_UINT64_C(0xbde94e8e, 43d0c8ec), 159, 67},
-  {GRISU_UINT64_C(0x90e40fbe, ea1d3a4b), 176, 72},
-  {GRISU_UINT64_C(0xdd15fe86, affad912), 192, 77},
-  {GRISU_UINT64_C(0xa8acd7c0, 222311bd), 209, 82},
-  {GRISU_UINT64_C(0x80b05e5a, c60b6178), 226, 87},
-  {GRISU_UINT64_C(0xc45d1df9, 42711d9a), 242, 92},
-  {GRISU_UINT64_C(0x95d04aee, 3b80ece6), 259, 97},
-  {GRISU_UINT64_C(0xe498f455, c38b997a), 275, 102},
-  {GRISU_UINT64_C(0xae67f1e9, aec07188), 292, 107},
-  {GRISU_UINT64_C(0x850fadc0, 9923329e), 309, 112},
-  {GRISU_UINT64_C(0xcb090c80, 01ab551c), 325, 117},
-  {GRISU_UINT64_C(0x9ae75759, 6946075f), 342, 122},
-  {GRISU_UINT64_C(0xec5d3fa8, ce427b00), 358, 127},
-  {GRISU_UINT64_C(0xb454e4a1, 79dd1877), 375, 132},
-  {GRISU_UINT64_C(0x899504ae, 72497eba), 392, 137},
-  {GRISU_UINT64_C(0xd1ef0244, af2364ff), 408, 142},
-  {GRISU_UINT64_C(0xa02aa96b, 06deb0fe), 425, 147},
-  {GRISU_UINT64_C(0xf46518c2, ef5b8cd1), 441, 152},
-  {GRISU_UINT64_C(0xba756174, 393d88e0), 458, 157},
-  {GRISU_UINT64_C(0x8e41ade9, fbebc27d), 475, 162},
-  {GRISU_UINT64_C(0xd910f7ff, 28069da4), 491, 167},
-  {GRISU_UINT64_C(0xa59bc234, db398c25), 508, 172},
-  {GRISU_UINT64_C(0xfcb2cb35, e702af78), 524, 177},
-  {GRISU_UINT64_C(0xc0cb28a9, 8fcf3c80), 541, 182},
-  {GRISU_UINT64_C(0x9316ff75, dd87cbd8), 558, 187},
-  {GRISU_UINT64_C(0xe070f78d, 3927556b), 574, 192},
-  {GRISU_UINT64_C(0xab3c2fdd, eeaad25b), 591, 197},
-  {GRISU_UINT64_C(0x82a45b45, 0226b39d), 608, 202},
-  {GRISU_UINT64_C(0xc75809c4, 2c684dd1), 624, 207},
-  {GRISU_UINT64_C(0x98165af3, 7b2153df), 641, 212},
-  {GRISU_UINT64_C(0xe8111c87, c5c1ba9a), 657, 217},
-  {GRISU_UINT64_C(0xb10d8e14, 56105dad), 674, 222},
-  {GRISU_UINT64_C(0x8714a775, e3e95c78), 691, 227},
-  {GRISU_UINT64_C(0xce1de406, 42e3f4b9), 707, 232},
-  {GRISU_UINT64_C(0x9d412e08, 06e88aa6), 724, 237},
-  {GRISU_UINT64_C(0xeff394dc, ff8a948f), 740, 242},
-  {GRISU_UINT64_C(0xb7118682, dbb66a77), 757, 247},
-  {GRISU_UINT64_C(0x8bab8eef, b6409c1a), 774, 252},
-  {GRISU_UINT64_C(0xd51ea6fa, 85785631), 790, 257},
-  {GRISU_UINT64_C(0xa298f2c5, 01f45f43), 807, 262},
-  {GRISU_UINT64_C(0xf81aa16f, dc1b81db), 823, 267},
-  {GRISU_UINT64_C(0xbd49d14a, a79dbc82), 840, 272},
-  {GRISU_UINT64_C(0x906a617d, 450187e2), 857, 277},
-  {GRISU_UINT64_C(0xdc5c5301, c56b75f7), 873, 282},
-  {GRISU_UINT64_C(0xa81f3014, 49ee8c70), 890, 287},
-  {GRISU_UINT64_C(0x80444b5e, 7aa7cf85), 907, 292},
-  {GRISU_UINT64_C(0xc3b83581, 09e84f07), 923, 297},
-  {GRISU_UINT64_C(0x95527a52, 02df0ccb), 940, 302},
-  {GRISU_UINT64_C(0xe3d8f9e5, 63a198e5), 956, 307},
-  {GRISU_UINT64_C(0xadd57a27, d29339f6), 973, 312},
-  {GRISU_UINT64_C(0x849feec2, 81d7f329), 990, 317},
-  {GRISU_UINT64_C(0xca5e89b1, 8b602368), 1006, 322},
-  {GRISU_UINT64_C(0x9a65406d, 44a5c903), 1023, 327},
-  {GRISU_UINT64_C(0xeb96bf6e, badf77d9), 1039, 332},
-  {GRISU_UINT64_C(0xb3bd72ed, 2af29e20), 1056, 337},
-  {GRISU_UINT64_C(0x892179be, 91d43a44), 1073, 342},
-  };
-static const int GRISU_CACHE_MAX_DISTANCE(5) = 17;
-// nb elements (5): 131
-static const GRISU_CACHE_STRUCT GRISU_CACHE_NAME(6)[] = {
-  {GRISU_UINT64_C(0xe61acf03, 3d1a45df), -1087, -308},
-  {GRISU_UINT64_C(0xdb71e914, 32b1a24b), -1067, -302},
-  {GRISU_UINT64_C(0xd1476e2c, 07286faa), -1047, -296},
-  {GRISU_UINT64_C(0xc795830d, 75038c1e), -1027, -290},
-  {GRISU_UINT64_C(0xbe5691ef, 416bd60c), -1007, -284},
-  {GRISU_UINT64_C(0xb5854744, 8ffffb2e), -987, -278},
-  {GRISU_UINT64_C(0xad1c8eab, 5ee43b67), -967, -272},
-  {GRISU_UINT64_C(0xa5178fff, 668ae0b6), -947, -266},
-  {GRISU_UINT64_C(0x9d71ac8f, ada6c9b5), -927, -260},
-  {GRISU_UINT64_C(0x96267c75, 35b763b5), -907, -254},
-  {GRISU_UINT64_C(0x8f31cc09, 37ae58d3), -887, -248},
-  {GRISU_UINT64_C(0x888f9979, 7a5e012d), -867, -242},
-  {GRISU_UINT64_C(0x823c1279, 5db6ce57), -847, -236},
-  {GRISU_UINT64_C(0xf867241c, 8cc6d4c1), -828, -230},
-  {GRISU_UINT64_C(0xece53cec, 4a314ebe), -808, -224},
-  {GRISU_UINT64_C(0xe1ebce4d, c7f16dfc), -788, -218},
-  {GRISU_UINT64_C(0xd77485cb, 25823ac7), -768, -212},
-  {GRISU_UINT64_C(0xcd795be8, 70516656), -748, -206},
-  {GRISU_UINT64_C(0xc3f490aa, 77bd60fd), -728, -200},
-  {GRISU_UINT64_C(0xbae0a846, d2195713), -708, -194},
-  {GRISU_UINT64_C(0xb23867fb, 2a35b28e), -688, -188},
-  {GRISU_UINT64_C(0xa9f6d30a, 038d1dbc), -668, -182},
-  {GRISU_UINT64_C(0xa21727db, 38cb0030), -648, -176},
-  {GRISU_UINT64_C(0x9a94dd3e, 8cf578ba), -628, -170},
-  {GRISU_UINT64_C(0x936b9fce, bb25c996), -608, -164},
-  {GRISU_UINT64_C(0x8c974f73, 83725573), -588, -158},
-  {GRISU_UINT64_C(0x8613fd01, 45877586), -568, -152},
-  {GRISU_UINT64_C(0xffbbcfe9, 94e5c620), -549, -146},
-  {GRISU_UINT64_C(0xf3e2f893, dec3f126), -529, -140},
-  {GRISU_UINT64_C(0xe896a0d7, e51e1566), -509, -134},
-  {GRISU_UINT64_C(0xddd0467c, 64bce4a1), -489, -128},
-  {GRISU_UINT64_C(0xd389b478, 79823479), -469, -122},
-  {GRISU_UINT64_C(0xc9bcff60, 34c13053), -449, -116},
-  {GRISU_UINT64_C(0xc06481fb, 9bcf8d3a), -429, -110},
-  {GRISU_UINT64_C(0xb77ada06, 17e3bbcb), -409, -104},
-  {GRISU_UINT64_C(0xaefae514, 77a06b04), -389, -98},
-  {GRISU_UINT64_C(0xa6dfbd9f, b8e5b88f), -369, -92},
-  {GRISU_UINT64_C(0x9f24b832, e6b0f436), -349, -86},
-  {GRISU_UINT64_C(0x97c560ba, 6b0919a6), -329, -80},
-  {GRISU_UINT64_C(0x90bd77f3, 483bb9ba), -309, -74},
-  {GRISU_UINT64_C(0x8a08f0f8, bf0f156b), -289, -68},
-  {GRISU_UINT64_C(0x83a3eeee, f9153e89), -269, -62},
-  {GRISU_UINT64_C(0xfb158592, be068d2f), -250, -56},
-  {GRISU_UINT64_C(0xef73d256, a5c0f77d), -230, -50},
-  {GRISU_UINT64_C(0xe45c10c4, 2a2b3b06), -210, -44},
-  {GRISU_UINT64_C(0xd9c7dced, 53c72256), -190, -38},
-  {GRISU_UINT64_C(0xcfb11ead, 453994ba), -170, -32},
-  {GRISU_UINT64_C(0xc6120625, 76589ddb), -150, -26},
-  {GRISU_UINT64_C(0xbce50864, 92111aeb), -130, -20},
-  {GRISU_UINT64_C(0xb424dc35, 095cd80f), -110, -14},
-  {GRISU_UINT64_C(0xabcc7711, 8461cefd), -90, -8},
-  {GRISU_UINT64_C(0xa3d70a3d, 70a3d70a), -70, -2},
-  {GRISU_UINT64_C(0x9c400000, 00000000), -50, 4},
-  {GRISU_UINT64_C(0x9502f900, 00000000), -30, 10},
-  {GRISU_UINT64_C(0x8e1bc9bf, 04000000), -10, 16},
-  {GRISU_UINT64_C(0x87867832, 6eac9000), 10, 22},
-  {GRISU_UINT64_C(0x813f3978, f8940984), 30, 28},
-  {GRISU_UINT64_C(0xf684df56, c3e01bc7), 49, 34},
-  {GRISU_UINT64_C(0xeb194f8e, 1ae525fd), 69, 40},
-  {GRISU_UINT64_C(0xe0352f62, a19e306f), 89, 46},
-  {GRISU_UINT64_C(0xd5d238a4, abe98068), 109, 52},
-  {GRISU_UINT64_C(0xcbea6f8c, eb02bb3a), 129, 58},
-  {GRISU_UINT64_C(0xc2781f49, ffcfa6d5), 149, 64},
-  {GRISU_UINT64_C(0xb975d6b6, ee39e437), 169, 70},
-  {GRISU_UINT64_C(0xb0de6538, 8cc8ada8), 189, 76},
-  {GRISU_UINT64_C(0xa8acd7c0, 222311bd), 209, 82},
-  {GRISU_UINT64_C(0xa0dc75f1, 778e39d6), 229, 88},
-  {GRISU_UINT64_C(0x9968bf6a, bbe85f20), 249, 94},
-  {GRISU_UINT64_C(0x924d692c, a61be758), 269, 100},
-  {GRISU_UINT64_C(0x8b865b21, 5899f46d), 289, 106},
-  {GRISU_UINT64_C(0x850fadc0, 9923329e), 309, 112},
-  {GRISU_UINT64_C(0xfdcb4fa0, 02162a63), 328, 118},
-  {GRISU_UINT64_C(0xf209787b, b47d6b85), 348, 124},
-  {GRISU_UINT64_C(0xe6d3102a, d96cec1e), 368, 130},
-  {GRISU_UINT64_C(0xdc21a117, 1d42645d), 388, 136},
-  {GRISU_UINT64_C(0xd1ef0244, af2364ff), 408, 142},
-  {GRISU_UINT64_C(0xc83553c5, c8965d3d), 428, 148},
-  {GRISU_UINT64_C(0xbeeefb58, 4aff8604), 448, 154},
-  {GRISU_UINT64_C(0xb616a12b, 7fe617aa), 468, 160},
-  {GRISU_UINT64_C(0xada72ccc, 20054aea), 488, 166},
-  {GRISU_UINT64_C(0xa59bc234, db398c25), 508, 172},
-  {GRISU_UINT64_C(0x9defbf01, b061adab), 528, 178},
-  {GRISU_UINT64_C(0x969eb7c4, 7859e744), 548, 184},
-  {GRISU_UINT64_C(0x8fa47579, 1a569d11), 568, 190},
-  {GRISU_UINT64_C(0x88fcf317, f22241e2), 588, 196},
-  {GRISU_UINT64_C(0x82a45b45, 0226b39d), 608, 202},
-  {GRISU_UINT64_C(0xf92e0c35, 37826146), 627, 208},
-  {GRISU_UINT64_C(0xeda2ee1c, 7064130c), 647, 214},
-  {GRISU_UINT64_C(0xe2a0b5dc, 971f303a), 667, 220},
-  {GRISU_UINT64_C(0xd8210bef, d30efa5a), 687, 226},
-  {GRISU_UINT64_C(0xce1de406, 42e3f4b9), 707, 232},
-  {GRISU_UINT64_C(0xc491798a, 08a2ad4f), 727, 238},
-  {GRISU_UINT64_C(0xbb764c4c, a7a44410), 747, 244},
-  {GRISU_UINT64_C(0xb2c71d5b, ca9023f8), 767, 250},
-  {GRISU_UINT64_C(0xaa7eebfb, 9df9de8e), 787, 256},
-  {GRISU_UINT64_C(0xa298f2c5, 01f45f43), 807, 262},
-  {GRISU_UINT64_C(0x9b10a4e5, e9913129), 827, 268},
-  {GRISU_UINT64_C(0x93e1ab82, 52f33b46), 847, 274},
-  {GRISU_UINT64_C(0x8d07e334, 55637eb3), 867, 280},
-  {GRISU_UINT64_C(0x867f59a9, d4bed6c0), 887, 286},
-  {GRISU_UINT64_C(0x80444b5e, 7aa7cf85), 907, 292},
-  {GRISU_UINT64_C(0xf4a642e1, 4c6262c9), 926, 298},
-  {GRISU_UINT64_C(0xe950df20, 247c83fd), 946, 304},
-  {GRISU_UINT64_C(0xde81e40a, 034bcf50), 966, 310},
-  {GRISU_UINT64_C(0xd433179d, 9c8cb841), 986, 316},
-  {GRISU_UINT64_C(0xca5e89b1, 8b602368), 1006, 322},
-  {GRISU_UINT64_C(0xc0fe9088, 95cf3b44), 1026, 328},
-  {GRISU_UINT64_C(0xb80dc58e, 81fe95a1), 1046, 334},
-  {GRISU_UINT64_C(0xaf87023b, 9bf0ee6b), 1066, 340},
-  };
-static const int GRISU_CACHE_MAX_DISTANCE(6) = 20;
-// nb elements (6): 109
-static const GRISU_CACHE_STRUCT GRISU_CACHE_NAME(7)[] = {
-  {GRISU_UINT64_C(0xe61acf03, 3d1a45df), -1087, -308},
-  {GRISU_UINT64_C(0x892731ac, 9faf056f), -1063, -301},
-  {GRISU_UINT64_C(0xa37fce12, 6597973d), -1040, -294},
-  {GRISU_UINT64_C(0xc2e801fb, 244576d5), -1017, -287},
-  {GRISU_UINT64_C(0xe858ad24, 8f5c22ca), -994, -280},
-  {GRISU_UINT64_C(0x8a7d3eef, 7f1cfc52), -970, -273},
-  {GRISU_UINT64_C(0xa5178fff, 668ae0b6), -947, -266},
-  {GRISU_UINT64_C(0xc4ce17b3, 99107c23), -924, -259},
-  {GRISU_UINT64_C(0xea9c2277, 23ee8bcb), -901, -252},
-  {GRISU_UINT64_C(0x8bd6a141, 006042be), -877, -245},
-  {GRISU_UINT64_C(0xa6b34ad8, c9dfc070), -854, -238},
-  {GRISU_UINT64_C(0xc6b8e9b0, 709f109a), -831, -231},
-  {GRISU_UINT64_C(0xece53cec, 4a314ebe), -808, -224},
-  {GRISU_UINT64_C(0x8d3360f0, 9cf6e4bd), -784, -217},
-  {GRISU_UINT64_C(0xa8530886, b54dbdec), -761, -210},
-  {GRISU_UINT64_C(0xc8a883c0, fdaf7df0), -738, -203},
-  {GRISU_UINT64_C(0xef340a98, 172aace5), -715, -196},
-  {GRISU_UINT64_C(0x8e938662, 882af53e), -691, -189},
-  {GRISU_UINT64_C(0xa9f6d30a, 038d1dbc), -668, -182},
-  {GRISU_UINT64_C(0xca9cf1d2, 06fdc03c), -645, -175},
-  {GRISU_UINT64_C(0xf18899b1, bc3f8ca2), -622, -168},
-  {GRISU_UINT64_C(0x8ff71a0f, e2c2e6dc), -598, -161},
-  {GRISU_UINT64_C(0xab9eb47c, 81f5114f), -575, -154},
-  {GRISU_UINT64_C(0xcc963fee, 10b7d1b3), -552, -147},
-  {GRISU_UINT64_C(0xf3e2f893, dec3f126), -529, -140},
-  {GRISU_UINT64_C(0x915e2486, ef32cd60), -505, -133},
-  {GRISU_UINT64_C(0xad4ab711, 2eb3929e), -482, -126},
-  {GRISU_UINT64_C(0xce947a3d, a6a9273e), -459, -119},
-  {GRISU_UINT64_C(0xf64335bc, f065d37d), -436, -112},
-  {GRISU_UINT64_C(0x92c8ae6b, 464fc96f), -412, -105},
-  {GRISU_UINT64_C(0xaefae514, 77a06b04), -389, -98},
-  {GRISU_UINT64_C(0xd097ad07, a71f26b2), -366, -91},
-  {GRISU_UINT64_C(0xf8a95fcf, 88747d94), -343, -84},
-  {GRISU_UINT64_C(0x9436c076, 0c86e30c), -319, -77},
-  {GRISU_UINT64_C(0xb0af48ec, 79ace837), -296, -70},
-  {GRISU_UINT64_C(0xd29fe4b1, 8e88640f), -273, -63},
-  {GRISU_UINT64_C(0xfb158592, be068d2f), -250, -56},
-  {GRISU_UINT64_C(0x95a86376, 27989aae), -226, -49},
-  {GRISU_UINT64_C(0xb267ed19, 40f1c61c), -203, -42},
-  {GRISU_UINT64_C(0xd4ad2dbf, c3d07788), -180, -35},
-  {GRISU_UINT64_C(0xfd87b5f2, 8300ca0e), -157, -28},
-  {GRISU_UINT64_C(0x971da050, 74da7bef), -133, -21},
-  {GRISU_UINT64_C(0xb424dc35, 095cd80f), -110, -14},
-  {GRISU_UINT64_C(0xd6bf94d5, e57a42bc), -87, -7},
-  {GRISU_UINT64_C(0x80000000, 00000000), -63, 0},
-  {GRISU_UINT64_C(0x98968000, 00000000), -40, 7},
-  {GRISU_UINT64_C(0xb5e620f4, 80000000), -17, 14},
-  {GRISU_UINT64_C(0xd8d726b7, 177a8000), 6, 21},
-  {GRISU_UINT64_C(0x813f3978, f8940984), 30, 28},
-  {GRISU_UINT64_C(0x9a130b96, 3a6c115c), 53, 35},
-  {GRISU_UINT64_C(0xb7abc627, 050305ae), 76, 42},
-  {GRISU_UINT64_C(0xdaf3f046, 51d47b4c), 99, 49},
-  {GRISU_UINT64_C(0x82818f12, 81ed44a0), 123, 56},
-  {GRISU_UINT64_C(0x9b934c3b, 330c8577), 146, 63},
-  {GRISU_UINT64_C(0xb975d6b6, ee39e437), 169, 70},
-  {GRISU_UINT64_C(0xdd15fe86, affad912), 192, 77},
-  {GRISU_UINT64_C(0x83c7088e, 1aab65db), 216, 84},
-  {GRISU_UINT64_C(0x9d174b2d, cec0e47b), 239, 91},
-  {GRISU_UINT64_C(0xbb445da9, ca61281f), 262, 98},
-  {GRISU_UINT64_C(0xdf3d5e9b, c0f653e1), 285, 105},
-  {GRISU_UINT64_C(0x850fadc0, 9923329e), 309, 112},
-  {GRISU_UINT64_C(0x9e9f11c4, 014dda7e), 332, 119},
-  {GRISU_UINT64_C(0xbd176620, a501fc00), 355, 126},
-  {GRISU_UINT64_C(0xe16a1dc9, d8545e95), 378, 133},
-  {GRISU_UINT64_C(0x865b8692, 5b9bc5c2), 402, 140},
-  {GRISU_UINT64_C(0xa02aa96b, 06deb0fe), 425, 147},
-  {GRISU_UINT64_C(0xbeeefb58, 4aff8604), 448, 154},
-  {GRISU_UINT64_C(0xe39c4976, 5fdf9d95), 471, 161},
-  {GRISU_UINT64_C(0x87aa9aff, 79042287), 495, 168},
-  {GRISU_UINT64_C(0xa1ba1ba7, 9e1632dc), 518, 175},
-  {GRISU_UINT64_C(0xc0cb28a9, 8fcf3c80), 541, 182},
-  {GRISU_UINT64_C(0xe5d3ef28, 2a242e82), 564, 189},
-  {GRISU_UINT64_C(0x88fcf317, f22241e2), 588, 196},
-  {GRISU_UINT64_C(0xa34d7216, 42b06084), 611, 203},
-  {GRISU_UINT64_C(0xc2abf989, 935ddbfe), 634, 210},
-  {GRISU_UINT64_C(0xe8111c87, c5c1ba9a), 657, 217},
-  {GRISU_UINT64_C(0x8a5296ff, e33cc930), 681, 224},
-  {GRISU_UINT64_C(0xa4e4b66b, 68b65d61), 704, 231},
-  {GRISU_UINT64_C(0xc491798a, 08a2ad4f), 727, 238},
-  {GRISU_UINT64_C(0xea53df5f, d18d5514), 750, 245},
-  {GRISU_UINT64_C(0x8bab8eef, b6409c1a), 774, 252},
-  {GRISU_UINT64_C(0xa67ff273, b8460357), 797, 259},
-  {GRISU_UINT64_C(0xc67bb459, 7ce2ce49), 820, 266},
-  {GRISU_UINT64_C(0xec9c459d, 51852ba3), 843, 273},
-  {GRISU_UINT64_C(0x8d07e334, 55637eb3), 867, 280},
-  {GRISU_UINT64_C(0xa81f3014, 49ee8c70), 890, 287},
-  {GRISU_UINT64_C(0xc86ab5c3, 9fa63441), 913, 294},
-  {GRISU_UINT64_C(0xeeea5d50, 04981478), 936, 301},
-  {GRISU_UINT64_C(0x8e679c2f, 5e44ff8f), 960, 308},
-  {GRISU_UINT64_C(0xa9c2794a, e3a3c69b), 983, 315},
-  {GRISU_UINT64_C(0xca5e89b1, 8b602368), 1006, 322},
-  {GRISU_UINT64_C(0xf13e34aa, bb430a15), 1029, 329},
-  {GRISU_UINT64_C(0x8fcac257, 558ee4e6), 1053, 336},
-  };
-static const int GRISU_CACHE_MAX_DISTANCE(7) = 24;
-// nb elements (7): 93
-static const GRISU_CACHE_STRUCT GRISU_CACHE_NAME(8)[] = {
-  {GRISU_UINT64_C(0xe61acf03, 3d1a45df), -1087, -308},
-  {GRISU_UINT64_C(0xab70fe17, c79ac6ca), -1060, -300},
-  {GRISU_UINT64_C(0xff77b1fc, bebcdc4f), -1034, -292},
-  {GRISU_UINT64_C(0xbe5691ef, 416bd60c), -1007, -284},
-  {GRISU_UINT64_C(0x8dd01fad, 907ffc3c), -980, -276},
-  {GRISU_UINT64_C(0xd3515c28, 31559a83), -954, -268},
-  {GRISU_UINT64_C(0x9d71ac8f, ada6c9b5), -927, -260},
-  {GRISU_UINT64_C(0xea9c2277, 23ee8bcb), -901, -252},
-  {GRISU_UINT64_C(0xaecc4991, 4078536d), -874, -244},
-  {GRISU_UINT64_C(0x823c1279, 5db6ce57), -847, -236},
-  {GRISU_UINT64_C(0xc2109436, 4dfb5637), -821, -228},
-  {GRISU_UINT64_C(0x9096ea6f, 3848984f), -794, -220},
-  {GRISU_UINT64_C(0xd77485cb, 25823ac7), -768, -212},
-  {GRISU_UINT64_C(0xa086cfcd, 97bf97f4), -741, -204},
-  {GRISU_UINT64_C(0xef340a98, 172aace5), -715, -196},
-  {GRISU_UINT64_C(0xb23867fb, 2a35b28e), -688, -188},
-  {GRISU_UINT64_C(0x84c8d4df, d2c63f3b), -661, -180},
-  {GRISU_UINT64_C(0xc5dd4427, 1ad3cdba), -635, -172},
-  {GRISU_UINT64_C(0x936b9fce, bb25c996), -608, -164},
-  {GRISU_UINT64_C(0xdbac6c24, 7d62a584), -582, -156},
-  {GRISU_UINT64_C(0xa3ab6658, 0d5fdaf6), -555, -148},
-  {GRISU_UINT64_C(0xf3e2f893, dec3f126), -529, -140},
-  {GRISU_UINT64_C(0xb5b5ada8, aaff80b8), -502, -132},
-  {GRISU_UINT64_C(0x87625f05, 6c7c4a8b), -475, -124},
-  {GRISU_UINT64_C(0xc9bcff60, 34c13053), -449, -116},
-  {GRISU_UINT64_C(0x964e858c, 91ba2655), -422, -108},
-  {GRISU_UINT64_C(0xdff97724, 70297ebd), -396, -100},
-  {GRISU_UINT64_C(0xa6dfbd9f, b8e5b88f), -369, -92},
-  {GRISU_UINT64_C(0xf8a95fcf, 88747d94), -343, -84},
-  {GRISU_UINT64_C(0xb9447093, 8fa89bcf), -316, -76},
-  {GRISU_UINT64_C(0x8a08f0f8, bf0f156b), -289, -68},
-  {GRISU_UINT64_C(0xcdb02555, 653131b6), -263, -60},
-  {GRISU_UINT64_C(0x993fe2c6, d07b7fac), -236, -52},
-  {GRISU_UINT64_C(0xe45c10c4, 2a2b3b06), -210, -44},
-  {GRISU_UINT64_C(0xaa242499, 697392d3), -183, -36},
-  {GRISU_UINT64_C(0xfd87b5f2, 8300ca0e), -157, -28},
-  {GRISU_UINT64_C(0xbce50864, 92111aeb), -130, -20},
-  {GRISU_UINT64_C(0x8cbccc09, 6f5088cc), -103, -12},
-  {GRISU_UINT64_C(0xd1b71758, e219652c), -77, -4},
-  {GRISU_UINT64_C(0x9c400000, 00000000), -50, 4},
-  {GRISU_UINT64_C(0xe8d4a510, 00000000), -24, 12},
-  {GRISU_UINT64_C(0xad78ebc5, ac620000), 3, 20},
-  {GRISU_UINT64_C(0x813f3978, f8940984), 30, 28},
-  {GRISU_UINT64_C(0xc097ce7b, c90715b3), 56, 36},
-  {GRISU_UINT64_C(0x8f7e32ce, 7bea5c70), 83, 44},
-  {GRISU_UINT64_C(0xd5d238a4, abe98068), 109, 52},
-  {GRISU_UINT64_C(0x9f4f2726, 179a2245), 136, 60},
-  {GRISU_UINT64_C(0xed63a231, d4c4fb27), 162, 68},
-  {GRISU_UINT64_C(0xb0de6538, 8cc8ada8), 189, 76},
-  {GRISU_UINT64_C(0x83c7088e, 1aab65db), 216, 84},
-  {GRISU_UINT64_C(0xc45d1df9, 42711d9a), 242, 92},
-  {GRISU_UINT64_C(0x924d692c, a61be758), 269, 100},
-  {GRISU_UINT64_C(0xda01ee64, 1a708dea), 295, 108},
-  {GRISU_UINT64_C(0xa26da399, 9aef774a), 322, 116},
-  {GRISU_UINT64_C(0xf209787b, b47d6b85), 348, 124},
-  {GRISU_UINT64_C(0xb454e4a1, 79dd1877), 375, 132},
-  {GRISU_UINT64_C(0x865b8692, 5b9bc5c2), 402, 140},
-  {GRISU_UINT64_C(0xc83553c5, c8965d3d), 428, 148},
-  {GRISU_UINT64_C(0x952ab45c, fa97a0b3), 455, 156},
-  {GRISU_UINT64_C(0xde469fbd, 99a05fe3), 481, 164},
-  {GRISU_UINT64_C(0xa59bc234, db398c25), 508, 172},
-  {GRISU_UINT64_C(0xf6c69a72, a3989f5c), 534, 180},
-  {GRISU_UINT64_C(0xb7dcbf53, 54e9bece), 561, 188},
-  {GRISU_UINT64_C(0x88fcf317, f22241e2), 588, 196},
-  {GRISU_UINT64_C(0xcc20ce9b, d35c78a5), 614, 204},
-  {GRISU_UINT64_C(0x98165af3, 7b2153df), 641, 212},
-  {GRISU_UINT64_C(0xe2a0b5dc, 971f303a), 667, 220},
-  {GRISU_UINT64_C(0xa8d9d153, 5ce3b396), 694, 228},
-  {GRISU_UINT64_C(0xfb9b7cd9, a4a7443c), 720, 236},
-  {GRISU_UINT64_C(0xbb764c4c, a7a44410), 747, 244},
-  {GRISU_UINT64_C(0x8bab8eef, b6409c1a), 774, 252},
-  {GRISU_UINT64_C(0xd01fef10, a657842c), 800, 260},
-  {GRISU_UINT64_C(0x9b10a4e5, e9913129), 827, 268},
-  {GRISU_UINT64_C(0xe7109bfb, a19c0c9d), 853, 276},
-  {GRISU_UINT64_C(0xac2820d9, 623bf429), 880, 284},
-  {GRISU_UINT64_C(0x80444b5e, 7aa7cf85), 907, 292},
-  {GRISU_UINT64_C(0xbf21e440, 03acdd2d), 933, 300},
-  {GRISU_UINT64_C(0x8e679c2f, 5e44ff8f), 960, 308},
-  {GRISU_UINT64_C(0xd433179d, 9c8cb841), 986, 316},
-  {GRISU_UINT64_C(0x9e19db92, b4e31ba9), 1013, 324},
-  {GRISU_UINT64_C(0xeb96bf6e, badf77d9), 1039, 332},
-  {GRISU_UINT64_C(0xaf87023b, 9bf0ee6b), 1066, 340},
-  };
-static const int GRISU_CACHE_MAX_DISTANCE(8) = 27;
-// nb elements (8): 82
-static const GRISU_CACHE_STRUCT GRISU_CACHE_NAME(9)[] = {
-  {GRISU_UINT64_C(0xe61acf03, 3d1a45df), -1087, -308},
-  {GRISU_UINT64_C(0xd64d3d9d, b981787d), -1057, -299},
-  {GRISU_UINT64_C(0xc795830d, 75038c1e), -1027, -290},
-  {GRISU_UINT64_C(0xb9e08a83, a5e34f08), -997, -281},
-  {GRISU_UINT64_C(0xad1c8eab, 5ee43b67), -967, -272},
-  {GRISU_UINT64_C(0xa139029f, 6a239f72), -937, -263},
-  {GRISU_UINT64_C(0x96267c75, 35b763b5), -907, -254},
-  {GRISU_UINT64_C(0x8bd6a141, 006042be), -877, -245},
-  {GRISU_UINT64_C(0x823c1279, 5db6ce57), -847, -236},
-  {GRISU_UINT64_C(0xf294b943, e17a2bc4), -818, -227},
-  {GRISU_UINT64_C(0xe1ebce4d, c7f16dfc), -788, -218},
-  {GRISU_UINT64_C(0xd267caa8, 62a12d67), -758, -209},
-  {GRISU_UINT64_C(0xc3f490aa, 77bd60fd), -728, -200},
-  {GRISU_UINT64_C(0xb67f6455, 292cbf08), -698, -191},
-  {GRISU_UINT64_C(0xa9f6d30a, 038d1dbc), -668, -182},
-  {GRISU_UINT64_C(0x9e4a9cec, 15763e2f), -638, -173},
-  {GRISU_UINT64_C(0x936b9fce, bb25c996), -608, -164},
-  {GRISU_UINT64_C(0x894bc396, ce5da772), -578, -155},
-  {GRISU_UINT64_C(0xffbbcfe9, 94e5c620), -549, -146},
-  {GRISU_UINT64_C(0xee2ba6c0, 678b597f), -519, -137},
-  {GRISU_UINT64_C(0xddd0467c, 64bce4a1), -489, -128},
-  {GRISU_UINT64_C(0xce947a3d, a6a9273e), -459, -119},
-  {GRISU_UINT64_C(0xc06481fb, 9bcf8d3a), -429, -110},
-  {GRISU_UINT64_C(0xb32df8e9, f3546564), -399, -101},
-  {GRISU_UINT64_C(0xa6dfbd9f, b8e5b88f), -369, -92},
-  {GRISU_UINT64_C(0x9b69dbe1, b548ce7d), -339, -83},
-  {GRISU_UINT64_C(0x90bd77f3, 483bb9ba), -309, -74},
-  {GRISU_UINT64_C(0x86ccbb52, ea94baeb), -279, -65},
-  {GRISU_UINT64_C(0xfb158592, be068d2f), -250, -56},
-  {GRISU_UINT64_C(0xe9d71b68, 9dde71b0), -220, -47},
-  {GRISU_UINT64_C(0xd9c7dced, 53c72256), -190, -38},
-  {GRISU_UINT64_C(0xcad2f7f5, 359a3b3e), -160, -29},
-  {GRISU_UINT64_C(0xbce50864, 92111aeb), -130, -20},
-  {GRISU_UINT64_C(0xafebff0b, cb24aaff), -100, -11},
-  {GRISU_UINT64_C(0xa3d70a3d, 70a3d70a), -70, -2},
-  {GRISU_UINT64_C(0x98968000, 00000000), -40, 7},
-  {GRISU_UINT64_C(0x8e1bc9bf, 04000000), -10, 16},
-  {GRISU_UINT64_C(0x84595161, 401484a0), 20, 25},
-  {GRISU_UINT64_C(0xf684df56, c3e01bc7), 49, 34},
-  {GRISU_UINT64_C(0xe596b7b0, c643c719), 79, 43},
-  {GRISU_UINT64_C(0xd5d238a4, abe98068), 109, 52},
-  {GRISU_UINT64_C(0xc722f0ef, 9d80aad6), 139, 61},
-  {GRISU_UINT64_C(0xb975d6b6, ee39e437), 169, 70},
-  {GRISU_UINT64_C(0xacb92ed9, 397bf996), 199, 79},
-  {GRISU_UINT64_C(0xa0dc75f1, 778e39d6), 229, 88},
-  {GRISU_UINT64_C(0x95d04aee, 3b80ece6), 259, 97},
-  {GRISU_UINT64_C(0x8b865b21, 5899f46d), 289, 106},
-  {GRISU_UINT64_C(0x81f14fae, 158c5f6e), 319, 115},
-  {GRISU_UINT64_C(0xf209787b, b47d6b85), 348, 124},
-  {GRISU_UINT64_C(0xe16a1dc9, d8545e95), 378, 133},
-  {GRISU_UINT64_C(0xd1ef0244, af2364ff), 408, 142},
-  {GRISU_UINT64_C(0xc38413cf, 25e2d70e), 438, 151},
-  {GRISU_UINT64_C(0xb616a12b, 7fe617aa), 468, 160},
-  {GRISU_UINT64_C(0xa99541bf, 57452b28), 498, 169},
-  {GRISU_UINT64_C(0x9defbf01, b061adab), 528, 178},
-  {GRISU_UINT64_C(0x9316ff75, dd87cbd8), 558, 187},
-  {GRISU_UINT64_C(0x88fcf317, f22241e2), 588, 196},
-  {GRISU_UINT64_C(0xff290242, c83396ce), 617, 205},
-  {GRISU_UINT64_C(0xeda2ee1c, 7064130c), 647, 214},
-  {GRISU_UINT64_C(0xdd50f199, 6b947519), 677, 223},
-  {GRISU_UINT64_C(0xce1de406, 42e3f4b9), 707, 232},
-  {GRISU_UINT64_C(0xbff610b0, cc6edd3f), 737, 241},
-  {GRISU_UINT64_C(0xb2c71d5b, ca9023f8), 767, 250},
-  {GRISU_UINT64_C(0xa67ff273, b8460357), 797, 259},
-  {GRISU_UINT64_C(0x9b10a4e5, e9913129), 827, 268},
-  {GRISU_UINT64_C(0x906a617d, 450187e2), 857, 277},
-  {GRISU_UINT64_C(0x867f59a9, d4bed6c0), 887, 286},
-  {GRISU_UINT64_C(0xfa856334, 878fc151), 916, 295},
-  {GRISU_UINT64_C(0xe950df20, 247c83fd), 946, 304},
-  {GRISU_UINT64_C(0xd94ad8b1, c7380874), 976, 313},
-  {GRISU_UINT64_C(0xca5e89b1, 8b602368), 1006, 322},
-  {GRISU_UINT64_C(0xbc789925, 624c5fe1), 1036, 331},
-  {GRISU_UINT64_C(0xaf87023b, 9bf0ee6b), 1066, 340},
-  };
-static const int GRISU_CACHE_MAX_DISTANCE(9) = 30;
-// nb elements (9): 73
-static const GRISU_CACHE_STRUCT GRISU_CACHE_NAME(10)[] = {
-  {GRISU_UINT64_C(0xe61acf03, 3d1a45df), -1087, -308},
-  {GRISU_UINT64_C(0x85f04682, 93f0eb4e), -1053, -298},
-  {GRISU_UINT64_C(0x9becce62, 836ac577), -1020, -288},
-  {GRISU_UINT64_C(0xb5854744, 8ffffb2e), -987, -278},
-  {GRISU_UINT64_C(0xd3515c28, 31559a83), -954, -268},
-  {GRISU_UINT64_C(0xf6019da0, 7f549b2b), -921, -258},
-  {GRISU_UINT64_C(0x8f31cc09, 37ae58d3), -887, -248},
-  {GRISU_UINT64_C(0xa6b34ad8, c9dfc070), -854, -238},
-  {GRISU_UINT64_C(0xc2109436, 4dfb5637), -821, -228},
-  {GRISU_UINT64_C(0xe1ebce4d, c7f16dfc), -788, -218},
-  {GRISU_UINT64_C(0x8380dea9, 3da4bc60), -754, -208},
-  {GRISU_UINT64_C(0x99171105, 2d8bf3c5), -721, -198},
-  {GRISU_UINT64_C(0xb23867fb, 2a35b28e), -688, -188},
-  {GRISU_UINT64_C(0xcf79cc9d, b955c2cc), -655, -178},
-  {GRISU_UINT64_C(0xf18899b1, bc3f8ca2), -622, -168},
-  {GRISU_UINT64_C(0x8c974f73, 83725573), -588, -158},
-  {GRISU_UINT64_C(0xa3ab6658, 0d5fdaf6), -555, -148},
-  {GRISU_UINT64_C(0xbe895233, 86091466), -522, -138},
-  {GRISU_UINT64_C(0xddd0467c, 64bce4a1), -489, -128},
-  {GRISU_UINT64_C(0x811ccc66, 8829b887), -455, -118},
-  {GRISU_UINT64_C(0x964e858c, 91ba2655), -422, -108},
-  {GRISU_UINT64_C(0xaefae514, 77a06b04), -389, -98},
-  {GRISU_UINT64_C(0xcbb41ef9, 79346bca), -356, -88},
-  {GRISU_UINT64_C(0xed246723, 473e3813), -323, -78},
-  {GRISU_UINT64_C(0x8a08f0f8, bf0f156b), -289, -68},
-  {GRISU_UINT64_C(0xa0b19d2a, b70e6ed6), -256, -58},
-  {GRISU_UINT64_C(0xbb127c53, b17ec159), -223, -48},
-  {GRISU_UINT64_C(0xd9c7dced, 53c72256), -190, -38},
-  {GRISU_UINT64_C(0xfd87b5f2, 8300ca0e), -157, -28},
-  {GRISU_UINT64_C(0x9392ee8e, 921d5d07), -123, -18},
-  {GRISU_UINT64_C(0xabcc7711, 8461cefd), -90, -8},
-  {GRISU_UINT64_C(0xc8000000, 00000000), -57, 2},
-  {GRISU_UINT64_C(0xe8d4a510, 00000000), -24, 12},
-  {GRISU_UINT64_C(0x87867832, 6eac9000), 10, 22},
-  {GRISU_UINT64_C(0x9dc5ada8, 2b70b59e), 43, 32},
-  {GRISU_UINT64_C(0xb7abc627, 050305ae), 76, 42},
-  {GRISU_UINT64_C(0xd5d238a4, abe98068), 109, 52},
-  {GRISU_UINT64_C(0xf8ebad2b, 84e0d58c), 142, 62},
-  {GRISU_UINT64_C(0x90e40fbe, ea1d3a4b), 176, 72},
-  {GRISU_UINT64_C(0xa8acd7c0, 222311bd), 209, 82},
-  {GRISU_UINT64_C(0xc45d1df9, 42711d9a), 242, 92},
-  {GRISU_UINT64_C(0xe498f455, c38b997a), 275, 102},
-  {GRISU_UINT64_C(0x850fadc0, 9923329e), 309, 112},
-  {GRISU_UINT64_C(0x9ae75759, 6946075f), 342, 122},
-  {GRISU_UINT64_C(0xb454e4a1, 79dd1877), 375, 132},
-  {GRISU_UINT64_C(0xd1ef0244, af2364ff), 408, 142},
-  {GRISU_UINT64_C(0xf46518c2, ef5b8cd1), 441, 152},
-  {GRISU_UINT64_C(0x8e41ade9, fbebc27d), 475, 162},
-  {GRISU_UINT64_C(0xa59bc234, db398c25), 508, 172},
-  {GRISU_UINT64_C(0xc0cb28a9, 8fcf3c80), 541, 182},
-  {GRISU_UINT64_C(0xe070f78d, 3927556b), 574, 192},
-  {GRISU_UINT64_C(0x82a45b45, 0226b39d), 608, 202},
-  {GRISU_UINT64_C(0x98165af3, 7b2153df), 641, 212},
-  {GRISU_UINT64_C(0xb10d8e14, 56105dad), 674, 222},
-  {GRISU_UINT64_C(0xce1de406, 42e3f4b9), 707, 232},
-  {GRISU_UINT64_C(0xeff394dc, ff8a948f), 740, 242},
-  {GRISU_UINT64_C(0x8bab8eef, b6409c1a), 774, 252},
-  {GRISU_UINT64_C(0xa298f2c5, 01f45f43), 807, 262},
-  {GRISU_UINT64_C(0xbd49d14a, a79dbc82), 840, 272},
-  {GRISU_UINT64_C(0xdc5c5301, c56b75f7), 873, 282},
-  {GRISU_UINT64_C(0x80444b5e, 7aa7cf85), 907, 292},
-  {GRISU_UINT64_C(0x95527a52, 02df0ccb), 940, 302},
-  {GRISU_UINT64_C(0xadd57a27, d29339f6), 973, 312},
-  {GRISU_UINT64_C(0xca5e89b1, 8b602368), 1006, 322},
-  {GRISU_UINT64_C(0xeb96bf6e, badf77d9), 1039, 332},
-  {GRISU_UINT64_C(0x892179be, 91d43a44), 1073, 342},
-  };
-static const int GRISU_CACHE_MAX_DISTANCE(10) = 34;
-// nb elements (10): 66
-static const GRISU_CACHE_STRUCT GRISU_CACHE_NAME(11)[] = {
-  {GRISU_UINT64_C(0xe61acf03, 3d1a45df), -1087, -308},
-  {GRISU_UINT64_C(0xa76c5823, 38ed2622), -1050, -297},
-  {GRISU_UINT64_C(0xf3a20279, ed56d48a), -1014, -286},
-  {GRISU_UINT64_C(0xb1442798, f49ffb4b), -977, -275},
-  {GRISU_UINT64_C(0x80fa687f, 881c7f8e), -940, -264},
-  {GRISU_UINT64_C(0xbbb01b92, 83253ca3), -904, -253},
-  {GRISU_UINT64_C(0x888f9979, 7a5e012d), -867, -242},
-  {GRISU_UINT64_C(0xc6b8e9b0, 709f109a), -831, -231},
-  {GRISU_UINT64_C(0x9096ea6f, 3848984f), -794, -220},
-  {GRISU_UINT64_C(0xd267caa8, 62a12d67), -758, -209},
-  {GRISU_UINT64_C(0x99171105, 2d8bf3c5), -721, -198},
-  {GRISU_UINT64_C(0xdec681f9, f4c31f31), -685, -187},
-  {GRISU_UINT64_C(0xa21727db, 38cb0030), -648, -176},
-  {GRISU_UINT64_C(0xebdf6617, 91d60f56), -612, -165},
-  {GRISU_UINT64_C(0xab9eb47c, 81f5114f), -575, -154},
-  {GRISU_UINT64_C(0xf9bd690a, 1b68637b), -539, -143},
-  {GRISU_UINT64_C(0xb5b5ada8, aaff80b8), -502, -132},
-  {GRISU_UINT64_C(0x843610cb, 4bf160cc), -465, -121},
-  {GRISU_UINT64_C(0xc06481fb, 9bcf8d3a), -429, -110},
-  {GRISU_UINT64_C(0x8bfbea76, c619ef36), -392, -99},
-  {GRISU_UINT64_C(0xcbb41ef9, 79346bca), -356, -88},
-  {GRISU_UINT64_C(0x9436c076, 0c86e30c), -319, -77},
-  {GRISU_UINT64_C(0xd7adf884, aa879177), -283, -66},
-  {GRISU_UINT64_C(0x9ced737b, b6c4183d), -246, -55},
-  {GRISU_UINT64_C(0xe45c10c4, 2a2b3b06), -210, -44},
-  {GRISU_UINT64_C(0xa6274bbd, d0fadd62), -173, -33},
-  {GRISU_UINT64_C(0xf1c90080, baf72cb1), -137, -22},
-  {GRISU_UINT64_C(0xafebff0b, cb24aaff), -100, -11},
-  {GRISU_UINT64_C(0x80000000, 00000000), -63, 0},
-  {GRISU_UINT64_C(0xba43b740, 00000000), -27, 11},
-  {GRISU_UINT64_C(0x87867832, 6eac9000), 10, 22},
-  {GRISU_UINT64_C(0xc5371912, 364ce305), 46, 33},
-  {GRISU_UINT64_C(0x8f7e32ce, 7bea5c70), 83, 44},
-  {GRISU_UINT64_C(0xd0cf4b50, cfe20766), 119, 55},
-  {GRISU_UINT64_C(0x97edd871, cfda3a57), 156, 66},
-  {GRISU_UINT64_C(0xdd15fe86, affad912), 192, 77},
-  {GRISU_UINT64_C(0xa0dc75f1, 778e39d6), 229, 88},
-  {GRISU_UINT64_C(0xea157514, 3cf97227), 265, 99},
-  {GRISU_UINT64_C(0xaa51823e, 34a7eedf), 302, 110},
-  {GRISU_UINT64_C(0xf7d88bc2, 4209a565), 338, 121},
-  {GRISU_UINT64_C(0xb454e4a1, 79dd1877), 375, 132},
-  {GRISU_UINT64_C(0x8335616a, ed761f1f), 412, 143},
-  {GRISU_UINT64_C(0xbeeefb58, 4aff8604), 448, 154},
-  {GRISU_UINT64_C(0x8aec23d6, 80043bee), 485, 165},
-  {GRISU_UINT64_C(0xca28a291, 859bbf93), 521, 176},
-  {GRISU_UINT64_C(0x9316ff75, dd87cbd8), 558, 187},
-  {GRISU_UINT64_C(0xd60b3bd5, 6a5586f2), 594, 198},
-  {GRISU_UINT64_C(0x9bbcc7a1, 42b17ccc), 631, 209},
-  {GRISU_UINT64_C(0xe2a0b5dc, 971f303a), 667, 220},
-  {GRISU_UINT64_C(0xa4e4b66b, 68b65d61), 704, 231},
-  {GRISU_UINT64_C(0xeff394dc, ff8a948f), 740, 242},
-  {GRISU_UINT64_C(0xae9672ab, a3d0c321), 777, 253},
-  {GRISU_UINT64_C(0xfe0efb53, d30dd4d8), 813, 264},
-  {GRISU_UINT64_C(0xb8da1662, e7b00a17), 850, 275},
-  {GRISU_UINT64_C(0x867f59a9, d4bed6c0), 887, 286},
-  {GRISU_UINT64_C(0xc3b83581, 09e84f07), 923, 297},
-  {GRISU_UINT64_C(0x8e679c2f, 5e44ff8f), 960, 308},
-  {GRISU_UINT64_C(0xcf39e50f, eae16bf0), 996, 319},
-  {GRISU_UINT64_C(0x96c6e0ea, b509e64d), 1033, 330},
-  {GRISU_UINT64_C(0xdb68c2ca, 82ed2a06), 1069, 341},
-  };
-static const int GRISU_CACHE_MAX_DISTANCE(11) = 37;
-// nb elements (11): 60
-static const GRISU_CACHE_STRUCT GRISU_CACHE_NAME(12)[] = {
-  {GRISU_UINT64_C(0xe61acf03, 3d1a45df), -1087, -308},
-  {GRISU_UINT64_C(0xd1476e2c, 07286faa), -1047, -296},
-  {GRISU_UINT64_C(0xbe5691ef, 416bd60c), -1007, -284},
-  {GRISU_UINT64_C(0xad1c8eab, 5ee43b67), -967, -272},
-  {GRISU_UINT64_C(0x9d71ac8f, ada6c9b5), -927, -260},
-  {GRISU_UINT64_C(0x8f31cc09, 37ae58d3), -887, -248},
-  {GRISU_UINT64_C(0x823c1279, 5db6ce57), -847, -236},
-  {GRISU_UINT64_C(0xece53cec, 4a314ebe), -808, -224},
-  {GRISU_UINT64_C(0xd77485cb, 25823ac7), -768, -212},
-  {GRISU_UINT64_C(0xc3f490aa, 77bd60fd), -728, -200},
-  {GRISU_UINT64_C(0xb23867fb, 2a35b28e), -688, -188},
-  {GRISU_UINT64_C(0xa21727db, 38cb0030), -648, -176},
-  {GRISU_UINT64_C(0x936b9fce, bb25c996), -608, -164},
-  {GRISU_UINT64_C(0x8613fd01, 45877586), -568, -152},
-  {GRISU_UINT64_C(0xf3e2f893, dec3f126), -529, -140},
-  {GRISU_UINT64_C(0xddd0467c, 64bce4a1), -489, -128},
-  {GRISU_UINT64_C(0xc9bcff60, 34c13053), -449, -116},
-  {GRISU_UINT64_C(0xb77ada06, 17e3bbcb), -409, -104},
-  {GRISU_UINT64_C(0xa6dfbd9f, b8e5b88f), -369, -92},
-  {GRISU_UINT64_C(0x97c560ba, 6b0919a6), -329, -80},
-  {GRISU_UINT64_C(0x8a08f0f8, bf0f156b), -289, -68},
-  {GRISU_UINT64_C(0xfb158592, be068d2f), -250, -56},
-  {GRISU_UINT64_C(0xe45c10c4, 2a2b3b06), -210, -44},
-  {GRISU_UINT64_C(0xcfb11ead, 453994ba), -170, -32},
-  {GRISU_UINT64_C(0xbce50864, 92111aeb), -130, -20},
-  {GRISU_UINT64_C(0xabcc7711, 8461cefd), -90, -8},
-  {GRISU_UINT64_C(0x9c400000, 00000000), -50, 4},
-  {GRISU_UINT64_C(0x8e1bc9bf, 04000000), -10, 16},
-  {GRISU_UINT64_C(0x813f3978, f8940984), 30, 28},
-  {GRISU_UINT64_C(0xeb194f8e, 1ae525fd), 69, 40},
-  {GRISU_UINT64_C(0xd5d238a4, abe98068), 109, 52},
-  {GRISU_UINT64_C(0xc2781f49, ffcfa6d5), 149, 64},
-  {GRISU_UINT64_C(0xb0de6538, 8cc8ada8), 189, 76},
-  {GRISU_UINT64_C(0xa0dc75f1, 778e39d6), 229, 88},
-  {GRISU_UINT64_C(0x924d692c, a61be758), 269, 100},
-  {GRISU_UINT64_C(0x850fadc0, 9923329e), 309, 112},
-  {GRISU_UINT64_C(0xf209787b, b47d6b85), 348, 124},
-  {GRISU_UINT64_C(0xdc21a117, 1d42645d), 388, 136},
-  {GRISU_UINT64_C(0xc83553c5, c8965d3d), 428, 148},
-  {GRISU_UINT64_C(0xb616a12b, 7fe617aa), 468, 160},
-  {GRISU_UINT64_C(0xa59bc234, db398c25), 508, 172},
-  {GRISU_UINT64_C(0x969eb7c4, 7859e744), 548, 184},
-  {GRISU_UINT64_C(0x88fcf317, f22241e2), 588, 196},
-  {GRISU_UINT64_C(0xf92e0c35, 37826146), 627, 208},
-  {GRISU_UINT64_C(0xe2a0b5dc, 971f303a), 667, 220},
-  {GRISU_UINT64_C(0xce1de406, 42e3f4b9), 707, 232},
-  {GRISU_UINT64_C(0xbb764c4c, a7a44410), 747, 244},
-  {GRISU_UINT64_C(0xaa7eebfb, 9df9de8e), 787, 256},
-  {GRISU_UINT64_C(0x9b10a4e5, e9913129), 827, 268},
-  {GRISU_UINT64_C(0x8d07e334, 55637eb3), 867, 280},
-  {GRISU_UINT64_C(0x80444b5e, 7aa7cf85), 907, 292},
-  {GRISU_UINT64_C(0xe950df20, 247c83fd), 946, 304},
-  {GRISU_UINT64_C(0xd433179d, 9c8cb841), 986, 316},
-  {GRISU_UINT64_C(0xc0fe9088, 95cf3b44), 1026, 328},
-  {GRISU_UINT64_C(0xaf87023b, 9bf0ee6b), 1066, 340},
-  };
-static const int GRISU_CACHE_MAX_DISTANCE(12) = 40;
-// nb elements (12): 55
-static const GRISU_CACHE_STRUCT GRISU_CACHE_NAME(13)[] = {
-  {GRISU_UINT64_C(0xe61acf03, 3d1a45df), -1087, -308},
-  {GRISU_UINT64_C(0x82cca4db, 847945ca), -1043, -295},
-  {GRISU_UINT64_C(0x94b3a202, eb1c3f39), -1000, -282},
-  {GRISU_UINT64_C(0xa90de353, 5aaae202), -957, -269},
-  {GRISU_UINT64_C(0xc0314325, 637a193a), -914, -256},
-  {GRISU_UINT64_C(0xda7f5bf5, 90966849), -871, -243},
-  {GRISU_UINT64_C(0xf867241c, 8cc6d4c1), -828, -230},
-  {GRISU_UINT64_C(0x8d3360f0, 9cf6e4bd), -784, -217},
-  {GRISU_UINT64_C(0xa086cfcd, 97bf97f4), -741, -204},
-  {GRISU_UINT64_C(0xb67f6455, 292cbf08), -698, -191},
-  {GRISU_UINT64_C(0xcf79cc9d, b955c2cc), -655, -178},
-  {GRISU_UINT64_C(0xebdf6617, 91d60f56), -612, -165},
-  {GRISU_UINT64_C(0x8613fd01, 45877586), -568, -152},
-  {GRISU_UINT64_C(0x986ddb5c, 6b3a76b8), -525, -139},
-  {GRISU_UINT64_C(0xad4ab711, 2eb3929e), -482, -126},
-  {GRISU_UINT64_C(0xc5029163, f384a931), -439, -113},
-  {GRISU_UINT64_C(0xdff97724, 70297ebd), -396, -100},
-  {GRISU_UINT64_C(0xfea126b7, d78186bd), -353, -87},
-  {GRISU_UINT64_C(0x90bd77f3, 483bb9ba), -309, -74},
-  {GRISU_UINT64_C(0xa48ceaaa, b75a8e2b), -266, -61},
-  {GRISU_UINT64_C(0xbb127c53, b17ec159), -223, -48},
-  {GRISU_UINT64_C(0xd4ad2dbf, c3d07788), -180, -35},
-  {GRISU_UINT64_C(0xf1c90080, baf72cb1), -137, -22},
-  {GRISU_UINT64_C(0x89705f41, 36b4a597), -93, -9},
-  {GRISU_UINT64_C(0x9c400000, 00000000), -50, 4},
-  {GRISU_UINT64_C(0xb1a2bc2e, c5000000), -7, 17},
-  {GRISU_UINT64_C(0xc9f2c9cd, 04674edf), 36, 30},
-  {GRISU_UINT64_C(0xe596b7b0, c643c719), 79, 43},
-  {GRISU_UINT64_C(0x82818f12, 81ed44a0), 123, 56},
-  {GRISU_UINT64_C(0x945e455f, 24fb1cf9), 166, 69},
-  {GRISU_UINT64_C(0xa8acd7c0, 222311bd), 209, 82},
-  {GRISU_UINT64_C(0xbfc2ef45, 6ae276e9), 252, 95},
-  {GRISU_UINT64_C(0xda01ee64, 1a708dea), 295, 108},
-  {GRISU_UINT64_C(0xf7d88bc2, 4209a565), 338, 121},
-  {GRISU_UINT64_C(0x8ce2529e, 2734bb1d), 382, 134},
-  {GRISU_UINT64_C(0xa02aa96b, 06deb0fe), 425, 147},
-  {GRISU_UINT64_C(0xb616a12b, 7fe617aa), 468, 160},
-  {GRISU_UINT64_C(0xcf02b2c2, 1207ef2f), 511, 173},
-  {GRISU_UINT64_C(0xeb57ff22, fc0c795a), 554, 186},
-  {GRISU_UINT64_C(0x85c70565, 62757457), 598, 199},
-  {GRISU_UINT64_C(0x98165af3, 7b2153df), 641, 212},
-  {GRISU_UINT64_C(0xace73cbf, dc0bfb7b), 684, 225},
-  {GRISU_UINT64_C(0xc491798a, 08a2ad4f), 727, 238},
-  {GRISU_UINT64_C(0xdf78e4b2, bd342cf7), 770, 251},
-  {GRISU_UINT64_C(0xfe0efb53, d30dd4d8), 813, 264},
-  {GRISU_UINT64_C(0x906a617d, 450187e2), 857, 277},
-  {GRISU_UINT64_C(0xa42e74f3, d032f526), 900, 290},
-  {GRISU_UINT64_C(0xbaa718e6, 8396cffe), 943, 303},
-  {GRISU_UINT64_C(0xd433179d, 9c8cb841), 986, 316},
-  {GRISU_UINT64_C(0xf13e34aa, bb430a15), 1029, 329},
-  {GRISU_UINT64_C(0x892179be, 91d43a44), 1073, 342},
-  };
-static const int GRISU_CACHE_MAX_DISTANCE(13) = 44;
-// nb elements (13): 51
-static const GRISU_CACHE_STRUCT GRISU_CACHE_NAME(14)[] = {
-  {GRISU_UINT64_C(0xe61acf03, 3d1a45df), -1087, -308},
-  {GRISU_UINT64_C(0xa37fce12, 6597973d), -1040, -294},
-  {GRISU_UINT64_C(0xe858ad24, 8f5c22ca), -994, -280},
-  {GRISU_UINT64_C(0xa5178fff, 668ae0b6), -947, -266},
-  {GRISU_UINT64_C(0xea9c2277, 23ee8bcb), -901, -252},
-  {GRISU_UINT64_C(0xa6b34ad8, c9dfc070), -854, -238},
-  {GRISU_UINT64_C(0xece53cec, 4a314ebe), -808, -224},
-  {GRISU_UINT64_C(0xa8530886, b54dbdec), -761, -210},
-  {GRISU_UINT64_C(0xef340a98, 172aace5), -715, -196},
-  {GRISU_UINT64_C(0xa9f6d30a, 038d1dbc), -668, -182},
-  {GRISU_UINT64_C(0xf18899b1, bc3f8ca2), -622, -168},
-  {GRISU_UINT64_C(0xab9eb47c, 81f5114f), -575, -154},
-  {GRISU_UINT64_C(0xf3e2f893, dec3f126), -529, -140},
-  {GRISU_UINT64_C(0xad4ab711, 2eb3929e), -482, -126},
-  {GRISU_UINT64_C(0xf64335bc, f065d37d), -436, -112},
-  {GRISU_UINT64_C(0xaefae514, 77a06b04), -389, -98},
-  {GRISU_UINT64_C(0xf8a95fcf, 88747d94), -343, -84},
-  {GRISU_UINT64_C(0xb0af48ec, 79ace837), -296, -70},
-  {GRISU_UINT64_C(0xfb158592, be068d2f), -250, -56},
-  {GRISU_UINT64_C(0xb267ed19, 40f1c61c), -203, -42},
-  {GRISU_UINT64_C(0xfd87b5f2, 8300ca0e), -157, -28},
-  {GRISU_UINT64_C(0xb424dc35, 095cd80f), -110, -14},
-  {GRISU_UINT64_C(0x80000000, 00000000), -63, 0},
-  {GRISU_UINT64_C(0xb5e620f4, 80000000), -17, 14},
-  {GRISU_UINT64_C(0x813f3978, f8940984), 30, 28},
-  {GRISU_UINT64_C(0xb7abc627, 050305ae), 76, 42},
-  {GRISU_UINT64_C(0x82818f12, 81ed44a0), 123, 56},
-  {GRISU_UINT64_C(0xb975d6b6, ee39e437), 169, 70},
-  {GRISU_UINT64_C(0x83c7088e, 1aab65db), 216, 84},
-  {GRISU_UINT64_C(0xbb445da9, ca61281f), 262, 98},
-  {GRISU_UINT64_C(0x850fadc0, 9923329e), 309, 112},
-  {GRISU_UINT64_C(0xbd176620, a501fc00), 355, 126},
-  {GRISU_UINT64_C(0x865b8692, 5b9bc5c2), 402, 140},
-  {GRISU_UINT64_C(0xbeeefb58, 4aff8604), 448, 154},
-  {GRISU_UINT64_C(0x87aa9aff, 79042287), 495, 168},
-  {GRISU_UINT64_C(0xc0cb28a9, 8fcf3c80), 541, 182},
-  {GRISU_UINT64_C(0x88fcf317, f22241e2), 588, 196},
-  {GRISU_UINT64_C(0xc2abf989, 935ddbfe), 634, 210},
-  {GRISU_UINT64_C(0x8a5296ff, e33cc930), 681, 224},
-  {GRISU_UINT64_C(0xc491798a, 08a2ad4f), 727, 238},
-  {GRISU_UINT64_C(0x8bab8eef, b6409c1a), 774, 252},
-  {GRISU_UINT64_C(0xc67bb459, 7ce2ce49), 820, 266},
-  {GRISU_UINT64_C(0x8d07e334, 55637eb3), 867, 280},
-  {GRISU_UINT64_C(0xc86ab5c3, 9fa63441), 913, 294},
-  {GRISU_UINT64_C(0x8e679c2f, 5e44ff8f), 960, 308},
-  {GRISU_UINT64_C(0xca5e89b1, 8b602368), 1006, 322},
-  {GRISU_UINT64_C(0x8fcac257, 558ee4e6), 1053, 336},
-  };
-static const int GRISU_CACHE_MAX_DISTANCE(14) = 47;
-// nb elements (14): 47
-static const GRISU_CACHE_STRUCT GRISU_CACHE_NAME(15)[] = {
-  {GRISU_UINT64_C(0xe61acf03, 3d1a45df), -1087, -308},
-  {GRISU_UINT64_C(0xcc5fc196, fefd7d0c), -1037, -293},
-  {GRISU_UINT64_C(0xb5854744, 8ffffb2e), -987, -278},
-  {GRISU_UINT64_C(0xa139029f, 6a239f72), -937, -263},
-  {GRISU_UINT64_C(0x8f31cc09, 37ae58d3), -887, -248},
-  {GRISU_UINT64_C(0xfe5d5415, 0b090b03), -838, -233},
-  {GRISU_UINT64_C(0xe1ebce4d, c7f16dfc), -788, -218},
-  {GRISU_UINT64_C(0xc8a883c0, fdaf7df0), -738, -203},
-  {GRISU_UINT64_C(0xb23867fb, 2a35b28e), -688, -188},
-  {GRISU_UINT64_C(0x9e4a9cec, 15763e2f), -638, -173},
-  {GRISU_UINT64_C(0x8c974f73, 83725573), -588, -158},
-  {GRISU_UINT64_C(0xf9bd690a, 1b68637b), -539, -143},
-  {GRISU_UINT64_C(0xddd0467c, 64bce4a1), -489, -128},
-  {GRISU_UINT64_C(0xc5029163, f384a931), -439, -113},
-  {GRISU_UINT64_C(0xaefae514, 77a06b04), -389, -98},
-  {GRISU_UINT64_C(0x9b69dbe1, b548ce7d), -339, -83},
-  {GRISU_UINT64_C(0x8a08f0f8, bf0f156b), -289, -68},
-  {GRISU_UINT64_C(0xf5330471, 4d9265e0), -240, -53},
-  {GRISU_UINT64_C(0xd9c7dced, 53c72256), -190, -38},
-  {GRISU_UINT64_C(0xc16d9a00, 95928a27), -140, -23},
-  {GRISU_UINT64_C(0xabcc7711, 8461cefd), -90, -8},
-  {GRISU_UINT64_C(0x98968000, 00000000), -40, 7},
-  {GRISU_UINT64_C(0x87867832, 6eac9000), 10, 22},
-  {GRISU_UINT64_C(0xf0bdc21a, bb48db20), 59, 37},
-  {GRISU_UINT64_C(0xd5d238a4, abe98068), 109, 52},
-  {GRISU_UINT64_C(0xbde94e8e, 43d0c8ec), 159, 67},
-  {GRISU_UINT64_C(0xa8acd7c0, 222311bd), 209, 82},
-  {GRISU_UINT64_C(0x95d04aee, 3b80ece6), 259, 97},
-  {GRISU_UINT64_C(0x850fadc0, 9923329e), 309, 112},
-  {GRISU_UINT64_C(0xec5d3fa8, ce427b00), 358, 127},
-  {GRISU_UINT64_C(0xd1ef0244, af2364ff), 408, 142},
-  {GRISU_UINT64_C(0xba756174, 393d88e0), 458, 157},
-  {GRISU_UINT64_C(0xa59bc234, db398c25), 508, 172},
-  {GRISU_UINT64_C(0x9316ff75, dd87cbd8), 558, 187},
-  {GRISU_UINT64_C(0x82a45b45, 0226b39d), 608, 202},
-  {GRISU_UINT64_C(0xe8111c87, c5c1ba9a), 657, 217},
-  {GRISU_UINT64_C(0xce1de406, 42e3f4b9), 707, 232},
-  {GRISU_UINT64_C(0xb7118682, dbb66a77), 757, 247},
-  {GRISU_UINT64_C(0xa298f2c5, 01f45f43), 807, 262},
-  {GRISU_UINT64_C(0x906a617d, 450187e2), 857, 277},
-  {GRISU_UINT64_C(0x80444b5e, 7aa7cf85), 907, 292},
-  {GRISU_UINT64_C(0xe3d8f9e5, 63a198e5), 956, 307},
-  {GRISU_UINT64_C(0xca5e89b1, 8b602368), 1006, 322},
-  {GRISU_UINT64_C(0xb3bd72ed, 2af29e20), 1056, 337},
-  };
-static const int GRISU_CACHE_MAX_DISTANCE(15) = 50;
-// nb elements (15): 44
-static const GRISU_CACHE_STRUCT GRISU_CACHE_NAME(16)[] = {
-  {GRISU_UINT64_C(0xe61acf03, 3d1a45df), -1087, -308},
-  {GRISU_UINT64_C(0xff77b1fc, bebcdc4f), -1034, -292},
-  {GRISU_UINT64_C(0x8dd01fad, 907ffc3c), -980, -276},
-  {GRISU_UINT64_C(0x9d71ac8f, ada6c9b5), -927, -260},
-  {GRISU_UINT64_C(0xaecc4991, 4078536d), -874, -244},
-  {GRISU_UINT64_C(0xc2109436, 4dfb5637), -821, -228},
-  {GRISU_UINT64_C(0xd77485cb, 25823ac7), -768, -212},
-  {GRISU_UINT64_C(0xef340a98, 172aace5), -715, -196},
-  {GRISU_UINT64_C(0x84c8d4df, d2c63f3b), -661, -180},
-  {GRISU_UINT64_C(0x936b9fce, bb25c996), -608, -164},
-  {GRISU_UINT64_C(0xa3ab6658, 0d5fdaf6), -555, -148},
-  {GRISU_UINT64_C(0xb5b5ada8, aaff80b8), -502, -132},
-  {GRISU_UINT64_C(0xc9bcff60, 34c13053), -449, -116},
-  {GRISU_UINT64_C(0xdff97724, 70297ebd), -396, -100},
-  {GRISU_UINT64_C(0xf8a95fcf, 88747d94), -343, -84},
-  {GRISU_UINT64_C(0x8a08f0f8, bf0f156b), -289, -68},
-  {GRISU_UINT64_C(0x993fe2c6, d07b7fac), -236, -52},
-  {GRISU_UINT64_C(0xaa242499, 697392d3), -183, -36},
-  {GRISU_UINT64_C(0xbce50864, 92111aeb), -130, -20},
-  {GRISU_UINT64_C(0xd1b71758, e219652c), -77, -4},
-  {GRISU_UINT64_C(0xe8d4a510, 00000000), -24, 12},
-  {GRISU_UINT64_C(0x813f3978, f8940984), 30, 28},
-  {GRISU_UINT64_C(0x8f7e32ce, 7bea5c70), 83, 44},
-  {GRISU_UINT64_C(0x9f4f2726, 179a2245), 136, 60},
-  {GRISU_UINT64_C(0xb0de6538, 8cc8ada8), 189, 76},
-  {GRISU_UINT64_C(0xc45d1df9, 42711d9a), 242, 92},
-  {GRISU_UINT64_C(0xda01ee64, 1a708dea), 295, 108},
-  {GRISU_UINT64_C(0xf209787b, b47d6b85), 348, 124},
-  {GRISU_UINT64_C(0x865b8692, 5b9bc5c2), 402, 140},
-  {GRISU_UINT64_C(0x952ab45c, fa97a0b3), 455, 156},
-  {GRISU_UINT64_C(0xa59bc234, db398c25), 508, 172},
-  {GRISU_UINT64_C(0xb7dcbf53, 54e9bece), 561, 188},
-  {GRISU_UINT64_C(0xcc20ce9b, d35c78a5), 614, 204},
-  {GRISU_UINT64_C(0xe2a0b5dc, 971f303a), 667, 220},
-  {GRISU_UINT64_C(0xfb9b7cd9, a4a7443c), 720, 236},
-  {GRISU_UINT64_C(0x8bab8eef, b6409c1a), 774, 252},
-  {GRISU_UINT64_C(0x9b10a4e5, e9913129), 827, 268},
-  {GRISU_UINT64_C(0xac2820d9, 623bf429), 880, 284},
-  {GRISU_UINT64_C(0xbf21e440, 03acdd2d), 933, 300},
-  {GRISU_UINT64_C(0xd433179d, 9c8cb841), 986, 316},
-  {GRISU_UINT64_C(0xeb96bf6e, badf77d9), 1039, 332},
-  };
-static const int GRISU_CACHE_MAX_DISTANCE(16) = 54;
-// nb elements (16): 41
-static const GRISU_CACHE_STRUCT GRISU_CACHE_NAME(17)[] = {
-  {GRISU_UINT64_C(0xe61acf03, 3d1a45df), -1087, -308},
-  {GRISU_UINT64_C(0x9faacf3d, f73609b1), -1030, -291},
-  {GRISU_UINT64_C(0xdd95317f, 31c7fa1d), -974, -274},
-  {GRISU_UINT64_C(0x99c10284, 4f94e0fb), -917, -257},
-  {GRISU_UINT64_C(0xd5605fcd, cf32e1d7), -861, -240},
-  {GRISU_UINT64_C(0x940f4613, ae5ed137), -804, -223},
-  {GRISU_UINT64_C(0xcd795be8, 70516656), -748, -206},
-  {GRISU_UINT64_C(0x8e938662, 882af53e), -691, -189},
-  {GRISU_UINT64_C(0xc5dd4427, 1ad3cdba), -635, -172},
-  {GRISU_UINT64_C(0x894bc396, ce5da772), -578, -155},
-  {GRISU_UINT64_C(0xbe895233, 86091466), -522, -138},
-  {GRISU_UINT64_C(0x843610cb, 4bf160cc), -465, -121},
-  {GRISU_UINT64_C(0xb77ada06, 17e3bbcb), -409, -104},
-  {GRISU_UINT64_C(0xfea126b7, d78186bd), -353, -87},
-  {GRISU_UINT64_C(0xb0af48ec, 79ace837), -296, -70},
-  {GRISU_UINT64_C(0xf5330471, 4d9265e0), -240, -53},
-  {GRISU_UINT64_C(0xaa242499, 697392d3), -183, -36},
-  {GRISU_UINT64_C(0xec1e4a7d, b69561a5), -127, -19},
-  {GRISU_UINT64_C(0xa3d70a3d, 70a3d70a), -70, -2},
-  {GRISU_UINT64_C(0xe35fa931, a0000000), -14, 15},
-  {GRISU_UINT64_C(0x9dc5ada8, 2b70b59e), 43, 32},
-  {GRISU_UINT64_C(0xdaf3f046, 51d47b4c), 99, 49},
-  {GRISU_UINT64_C(0x97edd871, cfda3a57), 156, 66},
-  {GRISU_UINT64_C(0xd2d80db0, 2aabd62c), 212, 83},
-  {GRISU_UINT64_C(0x924d692c, a61be758), 269, 100},
-  {GRISU_UINT64_C(0xcb090c80, 01ab551c), 325, 117},
-  {GRISU_UINT64_C(0x8ce2529e, 2734bb1d), 382, 134},
-  {GRISU_UINT64_C(0xc38413cf, 25e2d70e), 438, 151},
-  {GRISU_UINT64_C(0x87aa9aff, 79042287), 495, 168},
-  {GRISU_UINT64_C(0xbc4665b5, 96706115), 551, 185},
-  {GRISU_UINT64_C(0x82a45b45, 0226b39d), 608, 202},
-  {GRISU_UINT64_C(0xb54d5e4a, 127f59c8), 664, 219},
-  {GRISU_UINT64_C(0xfb9b7cd9, a4a7443c), 720, 236},
-  {GRISU_UINT64_C(0xae9672ab, a3d0c321), 777, 253},
-  {GRISU_UINT64_C(0xf24a01a7, 3cf2dcd0), 833, 270},
-  {GRISU_UINT64_C(0xa81f3014, 49ee8c70), 890, 287},
-  {GRISU_UINT64_C(0xe950df20, 247c83fd), 946, 304},
-  {GRISU_UINT64_C(0xa1e53af4, 6f801c53), 1003, 321},
-  {GRISU_UINT64_C(0xe0accfa8, 75af45a8), 1059, 338},
-  };
-static const int GRISU_CACHE_MAX_DISTANCE(17) = 57;
-// nb elements (17): 39
-static const GRISU_CACHE_STRUCT GRISU_CACHE_NAME(18)[] = {
-  {GRISU_UINT64_C(0xe61acf03, 3d1a45df), -1087, -308},
-  {GRISU_UINT64_C(0xc795830d, 75038c1e), -1027, -290},
-  {GRISU_UINT64_C(0xad1c8eab, 5ee43b67), -967, -272},
-  {GRISU_UINT64_C(0x96267c75, 35b763b5), -907, -254},
-  {GRISU_UINT64_C(0x823c1279, 5db6ce57), -847, -236},
-  {GRISU_UINT64_C(0xe1ebce4d, c7f16dfc), -788, -218},
-  {GRISU_UINT64_C(0xc3f490aa, 77bd60fd), -728, -200},
-  {GRISU_UINT64_C(0xa9f6d30a, 038d1dbc), -668, -182},
-  {GRISU_UINT64_C(0x936b9fce, bb25c996), -608, -164},
-  {GRISU_UINT64_C(0xffbbcfe9, 94e5c620), -549, -146},
-  {GRISU_UINT64_C(0xddd0467c, 64bce4a1), -489, -128},
-  {GRISU_UINT64_C(0xc06481fb, 9bcf8d3a), -429, -110},
-  {GRISU_UINT64_C(0xa6dfbd9f, b8e5b88f), -369, -92},
-  {GRISU_UINT64_C(0x90bd77f3, 483bb9ba), -309, -74},
-  {GRISU_UINT64_C(0xfb158592, be068d2f), -250, -56},
-  {GRISU_UINT64_C(0xd9c7dced, 53c72256), -190, -38},
-  {GRISU_UINT64_C(0xbce50864, 92111aeb), -130, -20},
-  {GRISU_UINT64_C(0xa3d70a3d, 70a3d70a), -70, -2},
-  {GRISU_UINT64_C(0x8e1bc9bf, 04000000), -10, 16},
-  {GRISU_UINT64_C(0xf684df56, c3e01bc7), 49, 34},
-  {GRISU_UINT64_C(0xd5d238a4, abe98068), 109, 52},
-  {GRISU_UINT64_C(0xb975d6b6, ee39e437), 169, 70},
-  {GRISU_UINT64_C(0xa0dc75f1, 778e39d6), 229, 88},
-  {GRISU_UINT64_C(0x8b865b21, 5899f46d), 289, 106},
-  {GRISU_UINT64_C(0xf209787b, b47d6b85), 348, 124},
-  {GRISU_UINT64_C(0xd1ef0244, af2364ff), 408, 142},
-  {GRISU_UINT64_C(0xb616a12b, 7fe617aa), 468, 160},
-  {GRISU_UINT64_C(0x9defbf01, b061adab), 528, 178},
-  {GRISU_UINT64_C(0x88fcf317, f22241e2), 588, 196},
-  {GRISU_UINT64_C(0xeda2ee1c, 7064130c), 647, 214},
-  {GRISU_UINT64_C(0xce1de406, 42e3f4b9), 707, 232},
-  {GRISU_UINT64_C(0xb2c71d5b, ca9023f8), 767, 250},
-  {GRISU_UINT64_C(0x9b10a4e5, e9913129), 827, 268},
-  {GRISU_UINT64_C(0x867f59a9, d4bed6c0), 887, 286},
-  {GRISU_UINT64_C(0xe950df20, 247c83fd), 946, 304},
-  {GRISU_UINT64_C(0xca5e89b1, 8b602368), 1006, 322},
-  {GRISU_UINT64_C(0xaf87023b, 9bf0ee6b), 1066, 340},
-  };
-static const int GRISU_CACHE_MAX_DISTANCE(18) = 60;
-// nb elements (18): 37
-static const GRISU_CACHE_STRUCT GRISU_CACHE_NAME(19)[] = {
-  {GRISU_UINT64_C(0xe61acf03, 3d1a45df), -1087, -308},
-  {GRISU_UINT64_C(0xf97ae3d0, d2446f25), -1024, -289},
-  {GRISU_UINT64_C(0x873e4f75, e2224e68), -960, -270},
-  {GRISU_UINT64_C(0x92a1958a, 7675175f), -897, -251},
-  {GRISU_UINT64_C(0x9efa548d, 26e5a6e2), -834, -232},
-  {GRISU_UINT64_C(0xac5d37d5, b79b6239), -771, -213},
-  {GRISU_UINT64_C(0xbae0a846, d2195713), -708, -194},
-  {GRISU_UINT64_C(0xca9cf1d2, 06fdc03c), -645, -175},
-  {GRISU_UINT64_C(0xdbac6c24, 7d62a584), -582, -156},
-  {GRISU_UINT64_C(0xee2ba6c0, 678b597f), -519, -137},
-  {GRISU_UINT64_C(0x811ccc66, 8829b887), -455, -118},
-  {GRISU_UINT64_C(0x8bfbea76, c619ef36), -392, -99},
-  {GRISU_UINT64_C(0x97c560ba, 6b0919a6), -329, -80},
-  {GRISU_UINT64_C(0xa48ceaaa, b75a8e2b), -266, -61},
-  {GRISU_UINT64_C(0xb267ed19, 40f1c61c), -203, -42},
-  {GRISU_UINT64_C(0xc16d9a00, 95928a27), -140, -23},
-  {GRISU_UINT64_C(0xd1b71758, e219652c), -77, -4},
-  {GRISU_UINT64_C(0xe35fa931, a0000000), -14, 15},
-  {GRISU_UINT64_C(0xf684df56, c3e01bc7), 49, 34},
-  {GRISU_UINT64_C(0x85a36366, eb71f041), 113, 53},
-  {GRISU_UINT64_C(0x90e40fbe, ea1d3a4b), 176, 72},
-  {GRISU_UINT64_C(0x9d174b2d, cec0e47b), 239, 91},
-  {GRISU_UINT64_C(0xaa51823e, 34a7eedf), 302, 110},
-  {GRISU_UINT64_C(0xb8a8d9bb, e123f018), 365, 129},
-  {GRISU_UINT64_C(0xc83553c5, c8965d3d), 428, 148},
-  {GRISU_UINT64_C(0xd910f7ff, 28069da4), 491, 167},
-  {GRISU_UINT64_C(0xeb57ff22, fc0c795a), 554, 186},
-  {GRISU_UINT64_C(0xff290242, c83396ce), 617, 205},
-  {GRISU_UINT64_C(0x8a5296ff, e33cc930), 681, 224},
-  {GRISU_UINT64_C(0x95f83d0a, 1fb69cd9), 744, 243},
-  {GRISU_UINT64_C(0xa298f2c5, 01f45f43), 807, 262},
-  {GRISU_UINT64_C(0xb049dc01, 6abc5e60), 870, 281},
-  {GRISU_UINT64_C(0xbf21e440, 03acdd2d), 933, 300},
-  {GRISU_UINT64_C(0xcf39e50f, eae16bf0), 996, 319},
-  {GRISU_UINT64_C(0xe0accfa8, 75af45a8), 1059, 338},
-  };
-static const int GRISU_CACHE_MAX_DISTANCE(19) = 64;
-// nb elements (19): 35
-static const GRISU_CACHE_STRUCT GRISU_CACHE_NAME(20)[] = {
-  {GRISU_UINT64_C(0xe61acf03, 3d1a45df), -1087, -308},
-  {GRISU_UINT64_C(0x9becce62, 836ac577), -1020, -288},
-  {GRISU_UINT64_C(0xd3515c28, 31559a83), -954, -268},
-  {GRISU_UINT64_C(0x8f31cc09, 37ae58d3), -887, -248},
-  {GRISU_UINT64_C(0xc2109436, 4dfb5637), -821, -228},
-  {GRISU_UINT64_C(0x8380dea9, 3da4bc60), -754, -208},
-  {GRISU_UINT64_C(0xb23867fb, 2a35b28e), -688, -188},
-  {GRISU_UINT64_C(0xf18899b1, bc3f8ca2), -622, -168},
-  {GRISU_UINT64_C(0xa3ab6658, 0d5fdaf6), -555, -148},
-  {GRISU_UINT64_C(0xddd0467c, 64bce4a1), -489, -128},
-  {GRISU_UINT64_C(0x964e858c, 91ba2655), -422, -108},
-  {GRISU_UINT64_C(0xcbb41ef9, 79346bca), -356, -88},
-  {GRISU_UINT64_C(0x8a08f0f8, bf0f156b), -289, -68},
-  {GRISU_UINT64_C(0xbb127c53, b17ec159), -223, -48},
-  {GRISU_UINT64_C(0xfd87b5f2, 8300ca0e), -157, -28},
-  {GRISU_UINT64_C(0xabcc7711, 8461cefd), -90, -8},
-  {GRISU_UINT64_C(0xe8d4a510, 00000000), -24, 12},
-  {GRISU_UINT64_C(0x9dc5ada8, 2b70b59e), 43, 32},
-  {GRISU_UINT64_C(0xd5d238a4, abe98068), 109, 52},
-  {GRISU_UINT64_C(0x90e40fbe, ea1d3a4b), 176, 72},
-  {GRISU_UINT64_C(0xc45d1df9, 42711d9a), 242, 92},
-  {GRISU_UINT64_C(0x850fadc0, 9923329e), 309, 112},
-  {GRISU_UINT64_C(0xb454e4a1, 79dd1877), 375, 132},
-  {GRISU_UINT64_C(0xf46518c2, ef5b8cd1), 441, 152},
-  {GRISU_UINT64_C(0xa59bc234, db398c25), 508, 172},
-  {GRISU_UINT64_C(0xe070f78d, 3927556b), 574, 192},
-  {GRISU_UINT64_C(0x98165af3, 7b2153df), 641, 212},
-  {GRISU_UINT64_C(0xce1de406, 42e3f4b9), 707, 232},
-  {GRISU_UINT64_C(0x8bab8eef, b6409c1a), 774, 252},
-  {GRISU_UINT64_C(0xbd49d14a, a79dbc82), 840, 272},
-  {GRISU_UINT64_C(0x80444b5e, 7aa7cf85), 907, 292},
-  {GRISU_UINT64_C(0xadd57a27, d29339f6), 973, 312},
-  {GRISU_UINT64_C(0xeb96bf6e, badf77d9), 1039, 332},
-  };
-static const int GRISU_CACHE_MAX_DISTANCE(20) = 67;
-// nb elements (20): 33
-static const int GRISU_CACHE_OFFSET = 308;
index ae679645d455c0d347b881f59a90b71988381b65..7335b7a5c36cd8e55af5d5eb2f3575592d6174e0 100644 (file)
@@ -43,11 +43,8 @@ SOURCES = {
     'test-dataflow.cc',
     'test-debug.cc',
     'test-decls.cc',
-    'test-diy_fp.cc',
-    'test-double.cc',
     'test-flags.cc',
     'test-func-name-inference.cc',
-    'test-grisu3.cc',
     'test-hashmap.cc',
     'test-heap.cc',
     'test-heap-profiler.cc',
diff --git a/test/cctest/test-diy_fp.cc b/test/cctest/test-diy_fp.cc
deleted file mode 100644 (file)
index 223e292..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-// Copyright 2006-2008 the V8 project authors. All rights reserved.
-
-#include <stdlib.h>
-
-#include "v8.h"
-
-#include "platform.h"
-#include "cctest.h"
-#include "diy_fp.h"
-
-using namespace v8::internal;
-
-
-TEST(Subtract) {
-  DiyFp diy_fp1 = DiyFp(3, 0);
-  DiyFp diy_fp2 = DiyFp(1, 0);
-  DiyFp diff = DiyFp::Minus(diy_fp1, diy_fp2);
-
-  CHECK(2 == diff.f());
-  CHECK_EQ(0, diff.e());
-  diy_fp1.Subtract(diy_fp2);
-  CHECK(2 == diy_fp1.f());
-  CHECK_EQ(0, diy_fp1.e());
-}
-
-
-TEST(Multiply) {
-  DiyFp diy_fp1 = DiyFp(3, 0);
-  DiyFp diy_fp2 = DiyFp(2, 0);
-  DiyFp product = DiyFp::Times(diy_fp1, diy_fp2);
-
-  CHECK(0 == product.f());
-  CHECK_EQ(64, product.e());
-  diy_fp1.Multiply(diy_fp2);
-  CHECK(0 == diy_fp1.f());
-  CHECK_EQ(64, diy_fp1.e());
-
-  diy_fp1 = DiyFp(V8_2PART_UINT64_C(0x80000000, 00000000), 11);
-  diy_fp2 = DiyFp(2, 13);
-  product = DiyFp::Times(diy_fp1, diy_fp2);
-  CHECK(1 == product.f());
-  CHECK_EQ(11 + 13 + 64, product.e());
-
-  // Test rounding.
-  diy_fp1 = DiyFp(V8_2PART_UINT64_C(0x80000000, 00000001), 11);
-  diy_fp2 = DiyFp(1, 13);
-  product = DiyFp::Times(diy_fp1, diy_fp2);
-  CHECK(1 == product.f());
-  CHECK_EQ(11 + 13 + 64, product.e());
-
-  diy_fp1 = DiyFp(V8_2PART_UINT64_C(0x7fffffff, ffffffff), 11);
-  diy_fp2 = DiyFp(1, 13);
-  product = DiyFp::Times(diy_fp1, diy_fp2);
-  CHECK(0 == product.f());
-  CHECK_EQ(11 + 13 + 64, product.e());
-
-  // Halfway cases are allowed to round either way. So don't check for it.
-
-  // Big numbers.
-  diy_fp1 = DiyFp(V8_2PART_UINT64_C(0xFFFFFFFF, FFFFFFFF), 11);
-  diy_fp2 = DiyFp(V8_2PART_UINT64_C(0xFFFFFFFF, FFFFFFFF), 13);
-  // 128bit result: 0xfffffffffffffffe0000000000000001
-  product = DiyFp::Times(diy_fp1, diy_fp2);
-  CHECK(V8_2PART_UINT64_C(0xFFFFFFFF, FFFFFFFe) == product.f());
-  CHECK_EQ(11 + 13 + 64, product.e());
-}
diff --git a/test/cctest/test-double.cc b/test/cctest/test-double.cc
deleted file mode 100644 (file)
index 6a4b5ff..0000000
+++ /dev/null
@@ -1,200 +0,0 @@
-// Copyright 2006-2008 the V8 project authors. All rights reserved.
-
-#include <stdlib.h>
-
-#include "v8.h"
-
-#include "platform.h"
-#include "cctest.h"
-#include "diy_fp.h"
-#include "double.h"
-
-using namespace v8::internal;
-
-
-TEST(Uint64Conversions) {
-  // Start by checking the byte-order.
-  uint64_t ordered = V8_2PART_UINT64_C(0x01234567, 89ABCDEF);
-  CHECK_EQ(3512700564088504e-318, Double(ordered).value());
-
-  uint64_t min_double64 = V8_2PART_UINT64_C(0x00000000, 00000001);
-  CHECK_EQ(5e-324, Double(min_double64).value());
-
-  uint64_t max_double64 = V8_2PART_UINT64_C(0x7fefffff, ffffffff);
-  CHECK_EQ(1.7976931348623157e308, Double(max_double64).value());
-}
-
-TEST(AsDiyFp) {
-  uint64_t ordered = V8_2PART_UINT64_C(0x01234567, 89ABCDEF);
-  DiyFp diy_fp = Double(ordered).AsDiyFp();
-  CHECK_EQ(0x12 - 0x3FF - 52, diy_fp.e());
-  // The 52 mantissa bits, plus the implicit 1 in bit 52 as a UINT64.
-  CHECK(V8_2PART_UINT64_C(0x00134567, 89ABCDEF) == diy_fp.f());
-
-  uint64_t min_double64 = V8_2PART_UINT64_C(0x00000000, 00000001);
-  diy_fp = Double(min_double64).AsDiyFp();
-  CHECK_EQ(-0x3FF - 52 + 1, diy_fp.e());
-  // This is a denormal; so no hidden bit.
-  CHECK(1 == diy_fp.f());
-
-  uint64_t max_double64 = V8_2PART_UINT64_C(0x7fefffff, ffffffff);
-  diy_fp = Double(max_double64).AsDiyFp();
-  CHECK_EQ(0x7FE - 0x3FF - 52, diy_fp.e());
-  CHECK(V8_2PART_UINT64_C(0x001fffff, ffffffff) == diy_fp.f());
-}
-
-
-TEST(AsNormalizedDiyFp) {
-  uint64_t ordered = V8_2PART_UINT64_C(0x01234567, 89ABCDEF);
-  DiyFp diy_fp = Double(ordered).AsNormalizedDiyFp();
-  CHECK_EQ(0x12 - 0x3FF - 52 - 11, diy_fp.e());
-  CHECK((V8_2PART_UINT64_C(0x00134567, 89ABCDEF) << 11) == diy_fp.f());
-
-  uint64_t min_double64 = V8_2PART_UINT64_C(0x00000000, 00000001);
-  diy_fp = Double(min_double64).AsNormalizedDiyFp();
-  CHECK_EQ(-0x3FF - 52 + 1 - 63, diy_fp.e());
-  // This is a denormal; so no hidden bit.
-  CHECK(V8_2PART_UINT64_C(0x80000000, 00000000) == diy_fp.f());
-
-  uint64_t max_double64 = V8_2PART_UINT64_C(0x7fefffff, ffffffff);
-  diy_fp = Double(max_double64).AsNormalizedDiyFp();
-  CHECK_EQ(0x7FE - 0x3FF - 52 - 11, diy_fp.e());
-  CHECK((V8_2PART_UINT64_C(0x001fffff, ffffffff) << 11) == diy_fp.f());
-}
-
-
-TEST(IsDenormal) {
-  uint64_t min_double64 = V8_2PART_UINT64_C(0x00000000, 00000001);
-  CHECK(Double(min_double64).IsDenormal());
-  uint64_t bits = V8_2PART_UINT64_C(0x000FFFFF, FFFFFFFF);
-  CHECK(Double(bits).IsDenormal());
-  bits = V8_2PART_UINT64_C(0x00100000, 00000000);
-  CHECK(!Double(bits).IsDenormal());
-}
-
-
-TEST(IsSpecial) {
-  CHECK(Double(V8_INFINITY).IsSpecial());
-  CHECK(Double(-V8_INFINITY).IsSpecial());
-  CHECK(Double(OS::nan_value()).IsSpecial());
-  uint64_t bits = V8_2PART_UINT64_C(0xFFF12345, 00000000);
-  CHECK(Double(bits).IsSpecial());
-  // Denormals are not special:
-  CHECK(!Double(5e-324).IsSpecial());
-  CHECK(!Double(-5e-324).IsSpecial());
-  // And some random numbers:
-  CHECK(!Double(0.0).IsSpecial());
-  CHECK(!Double(-0.0).IsSpecial());
-  CHECK(!Double(1.0).IsSpecial());
-  CHECK(!Double(-1.0).IsSpecial());
-  CHECK(!Double(1000000.0).IsSpecial());
-  CHECK(!Double(-1000000.0).IsSpecial());
-  CHECK(!Double(1e23).IsSpecial());
-  CHECK(!Double(-1e23).IsSpecial());
-  CHECK(!Double(1.7976931348623157e308).IsSpecial());
-  CHECK(!Double(-1.7976931348623157e308).IsSpecial());
-}
-
-
-TEST(IsInfinite) {
-  CHECK(Double(V8_INFINITY).IsInfinite());
-  CHECK(Double(-V8_INFINITY).IsInfinite());
-  CHECK(!Double(OS::nan_value()).IsInfinite());
-  CHECK(!Double(0.0).IsInfinite());
-  CHECK(!Double(-0.0).IsInfinite());
-  CHECK(!Double(1.0).IsInfinite());
-  CHECK(!Double(-1.0).IsInfinite());
-  uint64_t min_double64 = V8_2PART_UINT64_C(0x00000000, 00000001);
-  CHECK(!Double(min_double64).IsInfinite());
-}
-
-
-TEST(IsNan) {
-  CHECK(Double(OS::nan_value()).IsNan());
-  uint64_t other_nan = V8_2PART_UINT64_C(0xFFFFFFFF, 00000001);
-  CHECK(Double(other_nan).IsNan());
-  CHECK(!Double(V8_INFINITY).IsNan());
-  CHECK(!Double(-V8_INFINITY).IsNan());
-  CHECK(!Double(0.0).IsNan());
-  CHECK(!Double(-0.0).IsNan());
-  CHECK(!Double(1.0).IsNan());
-  CHECK(!Double(-1.0).IsNan());
-  uint64_t min_double64 = V8_2PART_UINT64_C(0x00000000, 00000001);
-  CHECK(!Double(min_double64).IsNan());
-}
-
-
-TEST(Sign) {
-  CHECK_EQ(1, Double(1.0).Sign());
-  CHECK_EQ(1, Double(V8_INFINITY).Sign());
-  CHECK_EQ(-1, Double(-V8_INFINITY).Sign());
-  CHECK_EQ(1, Double(0.0).Sign());
-  CHECK_EQ(-1, Double(-0.0).Sign());
-  uint64_t min_double64 = V8_2PART_UINT64_C(0x00000000, 00000001);
-  CHECK_EQ(1, Double(min_double64).Sign());
-}
-
-
-TEST(NormalizedBoundaries) {
-  DiyFp boundary_plus;
-  DiyFp boundary_minus;
-  DiyFp diy_fp = Double(1.5).AsNormalizedDiyFp();
-  Double(1.5).NormalizedBoundaries(&boundary_minus, &boundary_plus);
-  CHECK_EQ(diy_fp.e(), boundary_minus.e());
-  CHECK_EQ(diy_fp.e(), boundary_plus.e());
-  // 1.5 does not have a significand of the form 2^p (for some p).
-  // Therefore its boundaries are at the same distance.
-  CHECK(diy_fp.f() - boundary_minus.f() == boundary_plus.f() - diy_fp.f());
-  CHECK((1 << 10) == diy_fp.f() - boundary_minus.f());
-
-  diy_fp = Double(1.0).AsNormalizedDiyFp();
-  Double(1.0).NormalizedBoundaries(&boundary_minus, &boundary_plus);
-  CHECK_EQ(diy_fp.e(), boundary_minus.e());
-  CHECK_EQ(diy_fp.e(), boundary_plus.e());
-  // 1.0 does have a significand of the form 2^p (for some p).
-  // Therefore its lower boundary is twice as close as the upper boundary.
-  CHECK_GT(boundary_plus.f() - diy_fp.f(), diy_fp.f() - boundary_minus.f());
-  CHECK((1 << 9) == diy_fp.f() - boundary_minus.f());
-  CHECK((1 << 10) == boundary_plus.f() - diy_fp.f());
-
-  uint64_t min_double64 = V8_2PART_UINT64_C(0x00000000, 00000001);
-  diy_fp = Double(min_double64).AsNormalizedDiyFp();
-  Double(min_double64).NormalizedBoundaries(&boundary_minus, &boundary_plus);
-  CHECK_EQ(diy_fp.e(), boundary_minus.e());
-  CHECK_EQ(diy_fp.e(), boundary_plus.e());
-  // min-value does not have a significand of the form 2^p (for some p).
-  // Therefore its boundaries are at the same distance.
-  CHECK(diy_fp.f() - boundary_minus.f() == boundary_plus.f() - diy_fp.f());
-  // Denormals have their boundaries much closer.
-  CHECK((static_cast<uint64_t>(1) << 62) == diy_fp.f() - boundary_minus.f());
-
-  uint64_t smallest_normal64 = V8_2PART_UINT64_C(0x00100000, 00000000);
-  diy_fp = Double(smallest_normal64).AsNormalizedDiyFp();
-  Double(smallest_normal64).NormalizedBoundaries(&boundary_minus,
-                                                 &boundary_plus);
-  CHECK_EQ(diy_fp.e(), boundary_minus.e());
-  CHECK_EQ(diy_fp.e(), boundary_plus.e());
-  // Even though the significand is of the form 2^p (for some p), its boundaries
-  // are at the same distance. (This is the only exception).
-  CHECK(diy_fp.f() - boundary_minus.f() == boundary_plus.f() - diy_fp.f());
-  CHECK((1 << 10) == diy_fp.f() - boundary_minus.f());
-
-  uint64_t largest_denormal64 = V8_2PART_UINT64_C(0x000FFFFF, FFFFFFFF);
-  diy_fp = Double(largest_denormal64).AsNormalizedDiyFp();
-  Double(largest_denormal64).NormalizedBoundaries(&boundary_minus,
-                                                  &boundary_plus);
-  CHECK_EQ(diy_fp.e(), boundary_minus.e());
-  CHECK_EQ(diy_fp.e(), boundary_plus.e());
-  CHECK(diy_fp.f() - boundary_minus.f() == boundary_plus.f() - diy_fp.f());
-  CHECK((1 << 11) == diy_fp.f() - boundary_minus.f());
-
-  uint64_t max_double64 = V8_2PART_UINT64_C(0x7fefffff, ffffffff);
-  diy_fp = Double(max_double64).AsNormalizedDiyFp();
-  Double(max_double64).NormalizedBoundaries(&boundary_minus, &boundary_plus);
-  CHECK_EQ(diy_fp.e(), boundary_minus.e());
-  CHECK_EQ(diy_fp.e(), boundary_plus.e());
-  // max-value does not have a significand of the form 2^p (for some p).
-  // Therefore its boundaries are at the same distance.
-  CHECK(diy_fp.f() - boundary_minus.f() == boundary_plus.f() - diy_fp.f());
-  CHECK((1 << 10) == diy_fp.f() - boundary_minus.f());
-}
diff --git a/test/cctest/test-dtoa.h b/test/cctest/test-dtoa.h
deleted file mode 100644 (file)
index 9a36a3b..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-static const int kBufferSize = 50;
-
-static double ComposeDouble(char* buffer, int sign, int length, int point) {
-  int k = point - length;
-  // Integrate exponent into buffer.
-  buffer[length] = 'e';
-  snprintf(&buffer[length+1], kBufferSize - length - 1, "%d", k);
-  double result;
-  sscanf(buffer, "%lf", &result);  // NOLINT
-  if (sign) {
-    result *= -1;
-  }
-  return result;
-}
-
-
-static bool IsCorrect(double v, char* buffer, int sign, int length, int point) {
-  return v == ComposeDouble(buffer, sign, length, point);
-}
-
-
-// The precision of long doubles is not enough to ensure the correct rounding.
-static bool IsRounded(double v, char* buffer, int sign, int length, int point) {
-  // We don't test when v is 0.
-  if (v == 0) return true;
-
-  // Simplify things by working with positive numbers.
-  if (v < 0) v = -v;
-  char correct_buffer[100];
-  snprintf(correct_buffer, sizeof(correct_buffer), "%.90e", v);
-  // Get rid of the '.'
-  correct_buffer[1] = correct_buffer[0];
-  char* correct_str = &correct_buffer[1];
-
-  int i = 0;
-  while (true) {
-    if (correct_str[i] == '\0' || correct_str[i] == 'e') {
-      // We should never need all digits.
-      return false;
-    }
-
-    if (buffer[i] == '\0' || buffer[i] == 'e') {
-      // Verify that the remaining correct digits are small enough.
-      if (correct_str[i] < '5') return true;
-      return false;  // For simplicity we assume that '5' is rounded up.
-    }
-
-    if (buffer[i] != correct_str[i]) {
-      if (buffer[i] < correct_str[i]) return false;
-      if (buffer[i] - correct_str[i] != 1) return false;
-      if (correct_str[i+1] < '5') return false;
-      return true;
-    }
-
-    // Both characters are equal
-    i++;
-  }
-}
-
-
-static bool IsShortest(double v,
-                       char* buffer,
-                       int sign,
-                       int length,
-                       int point) {
-  // Now test if a shorter version would still yield the same result.
-  // Not an exhaustive test, but better than nothing.
-
-  if (length == 1) return true;
-
-  char last_digit = buffer[length - 1];
-
-  if (buffer[length - 1] == '0') return false;
-
-  if (v == ComposeDouble(buffer, sign, length - 1, point)) {
-    return false;
-  }
-
-  bool result = true;
-  if (buffer[length-2] != '9') {
-    buffer[length - 2]++;
-    double changed_value = ComposeDouble(buffer, sign, length-1, point);
-    if (v == changed_value) {
-      printf("ROUNDED FAILED DEBUG: %s\n", buffer);
-      result = false;
-    }
-    buffer[length - 2]--;
-  }
-  buffer[length - 1] = last_digit;
-  return result;
-}
diff --git a/test/cctest/test-grisu3.cc b/test/cctest/test-grisu3.cc
deleted file mode 100644 (file)
index 0707836..0000000
+++ /dev/null
@@ -1,174 +0,0 @@
-// Copyright 2006-2008 the V8 project authors. All rights reserved.
-
-#include <stdlib.h>
-
-#include "v8.h"
-
-#include "platform.h"
-#include "cctest.h"
-#include "diy_fp.h"
-#include "double.h"
-#include "grisu3.h"
-
-#include "test-dtoa.h"
-
-using namespace v8::internal;
-
-TEST(DoubleExtremes) {
-  char buffer[kBufferSize];
-  int length;
-  int sign;
-  int point;
-  bool status;
-  double min_double = 5e-324;
-  status = grisu3(min_double, buffer, &sign, &length, &point);
-  CHECK(status);
-  CHECK_EQ(0, sign);
-  CHECK_EQ("5", buffer);
-  CHECK_EQ(-323, point);
-
-  double max_double = 1.7976931348623157e308;
-  status = grisu3(max_double, buffer, &sign, &length, &point);
-  CHECK(status);
-  CHECK_EQ(0, sign);
-  CHECK_EQ("17976931348623157", buffer);
-  CHECK_EQ(309, point);
-}
-
-
-TEST(DoubleTestFunctions) {
-  char buffer[kBufferSize];
-
-  strncpy(buffer, "12345", kBufferSize);
-  CHECK(IsCorrect(123.45, buffer, 0, 5, 3));
-  strncpy(buffer, "12345", kBufferSize);
-  CHECK(IsCorrect(1.2345, buffer, 0, 5, 1));
-  strncpy(buffer, "12345", kBufferSize);
-  CHECK(!IsCorrect(1.2344, buffer, 0, 5, 1));
-  strncpy(buffer, "12345", kBufferSize);
-  CHECK(!IsCorrect(1.2345, buffer, 0, 5, 2));
-  strncpy(buffer, "12345", kBufferSize);
-  CHECK(!IsCorrect(1.2345, buffer, 0, 4, 1));
-
-  strncpy(buffer, "1234", kBufferSize);
-  CHECK(IsRounded(123.44, buffer, 0, 4, 3));
-  strncpy(buffer, "1234", kBufferSize);
-  CHECK(!IsRounded(123.4500000000001, buffer, 0, 4, 3));
-  strncpy(buffer, "1234", kBufferSize);
-  CHECK(IsRounded(123.44999999, buffer, 0, 4, 3));
-  strncpy(buffer, "1234", kBufferSize);
-  CHECK(IsRounded(123.44999999, buffer, 0, 3, 3));
-
-  strncpy(buffer, "1234567000000000000000000001", kBufferSize);
-  CHECK(IsShortest(123.45, buffer, 0, 5, 3));
-  strncpy(buffer, "1234567000000000000000000001", kBufferSize);
-  CHECK(IsShortest(123.4567, buffer, 0, 7, 3));
-  strncpy(buffer, "1234567000000000000000000001", kBufferSize);
-  CHECK(!IsShortest(123.4567, buffer, 0, strlen(buffer), 3));
-
-  strncpy(buffer, "123456699999999999999999999999999999", kBufferSize);
-  CHECK(!IsShortest(123.4567, buffer, 0, strlen(buffer), 3));
-  strncpy(buffer, "123456699999999999999999999999999999", kBufferSize);
-  CHECK(IsShortest(123.456, buffer, 0, 6, 3));
-}
-
-
-TEST(VariousDoubles) {
-  char buffer[kBufferSize];
-  int sign;
-  int length;
-  int point;
-  int status;
-  status = grisu3(4294967272.0, buffer, &sign, &length, &point);
-  CHECK(status);
-  CHECK_EQ(0, sign);
-  CHECK_EQ("4294967272", buffer);
-  CHECK_EQ(10, point);
-
-  status = grisu3(4.1855804968213567e298, buffer, &sign, &length, &point);
-  CHECK(status);
-  CHECK_EQ(0, sign);
-  CHECK_EQ("4185580496821357", buffer);
-  CHECK_EQ(299, point);
-
-  status = grisu3(5.5626846462680035e-309, buffer, &sign, &length, &point);
-  CHECK(status);
-  CHECK_EQ(0, sign);
-  CHECK_EQ("5562684646268003", buffer);
-  CHECK_EQ(-308, point);
-
-  status = grisu3(2147483648.0, buffer, &sign, &length, &point);
-  CHECK(status);
-  CHECK_EQ(0, sign);
-  CHECK_EQ("2147483648", buffer);
-  CHECK_EQ(10, point);
-
-  status = grisu3(3.5844466002796428e+298, buffer, &sign, &length, &point);
-  if (status) {  // Not all grisu3 variants manage to compute this number.
-    CHECK_EQ("35844466002796428", buffer);
-    CHECK_EQ(0, sign);
-    CHECK_EQ(299, point);
-  }
-
-  uint64_t smallest_normal64 = V8_2PART_UINT64_C(0x00100000, 00000000);
-  double v = Double(smallest_normal64).value();
-  status = grisu3(v, buffer, &sign, &length, &point);
-  if (status) {
-    CHECK_EQ(0, sign);
-    CHECK(IsCorrect(v, buffer, 0, length, point));
-    CHECK(IsRounded(v, buffer, 0, length, point));
-    CHECK(IsShortest(v, buffer, 0, length, point));
-  }
-
-  uint64_t largest_denormal64 = V8_2PART_UINT64_C(0x000FFFFF, FFFFFFFF);
-  v = Double(largest_denormal64).value();
-  status = grisu3(v, buffer, &sign, &length, &point);
-  if (status) {
-    CHECK_EQ(0, sign);
-    CHECK(IsCorrect(v, buffer, 0, length, point));
-    CHECK(IsRounded(v, buffer, 0, length, point));
-    CHECK(IsShortest(v, buffer, 0, length, point));
-  }
-}
-
-
-static double random_double() {
-  uint64_t double64 = 0;
-  for (int i = 0; i < 8; i++) {
-    double64 <<= 8;
-    double64 += rand() % 256;  // NOLINT
-  }
-  return Double(double64).value();
-}
-
-
-TEST(RandomDoubles) {
-  // For a more thorough testing increase the iteration count.
-  // We also check kGrisu3MaximalLength in here.
-  const int kIterationCount = 100000;
-  int succeeded = 0;
-  int total = 0;
-  char buffer[kBufferSize];
-  int length;
-  int sign;
-  int point;
-  bool needed_max_length = false;
-
-  for (int i = 0; i < kIterationCount; ++i) {
-    double v = random_double();
-    if (v != v) continue;  // NaN
-    if (v == 0.0) continue;
-    if (v < 0) v = -v;
-    total++;
-    int status = grisu3(v, buffer, &sign, &length, &point);
-    CHECK_GE(kGrisu3MaximalLength, length);
-    if (length == kGrisu3MaximalLength) needed_max_length = true;
-    if (!status) continue;
-    succeeded++;
-    CHECK(IsCorrect(v, buffer, 0, length, point));
-    CHECK(IsRounded(v, buffer, 0, length, point));
-    CHECK(IsShortest(v, buffer, 0, length, point));
-  }
-  CHECK_GT(succeeded*1.0/total, 0.99);
-  CHECK(needed_max_length);
-}
diff --git a/tools/generate-ten-powers.scm b/tools/generate-ten-powers.scm
deleted file mode 100644 (file)
index 8bf3d1a..0000000
+++ /dev/null
@@ -1,285 +0,0 @@
-;; Copyright 2010 the V8 project authors. All rights reserved.
-;; Redistribution and use in source and binary forms, with or without
-;; modification, are permitted provided that the following conditions are
-;; met:
-;;
-;;     * Redistributions of source code must retain the above copyright
-;;       notice, this list of conditions and the following disclaimer.
-;;     * Redistributions in binary form must reproduce the above
-;;       copyright notice, this list of conditions and the following
-;;       disclaimer in the documentation and/or other materials provided
-;;       with the distribution.
-;;     * Neither the name of Google Inc. nor the names of its
-;;       contributors may be used to endorse or promote products derived
-;;       from this software without specific prior written permission.
-;;
-;; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-;; "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-;; LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-;; A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-;; OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-;; SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-;; LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-;; DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-;; THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-;; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-;; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-;; This is a Scheme script for the Bigloo compiler. Bigloo must be compiled with
-;; support for bignums. The compilation of the script can be done as follows:
-;;   bigloo -static-bigloo -o generate-ten-powers generate-ten-powers.scm
-;;  
-;; Generate approximations of 10^k.
-
-(module gen-ten-powers
-   (static (class Cached-Fast
-             v::bignum
-             e::bint
-             exact?::bool))
-   (main my-main))
-
-
-;;----------------bignum shifts -----------------------------------------------
-(define (bit-lshbx::bignum x::bignum by::bint)
-   (if (<fx by 0)
-       #z0
-       (*bx x (exptbx #z2 (fixnum->bignum by)))))
-
-(define (bit-rshbx::bignum x::bignum by::bint)
-   (if (<fx by 0)
-       #z0
-       (/bx x (exptbx #z2 (fixnum->bignum by)))))
-
-;;----------------the actual power generation -------------------------------
-
-;; e should be an indication. it might be too small.
-(define (round-n-cut n e nb-bits)
-   (define max-container (- (bit-lshbx #z1 nb-bits) 1))
-   (define (round n)
-      (case *round*
-        ((down) n)
-        ((up)
-         (+bx n
-              ;; with the -1 it will only round up if the cut off part is
-              ;; non-zero
-              (-bx (bit-lshbx #z1
-                              (-fx (+fx e nb-bits) 1))
-                   #z1)))
-        ((round)
-         (+bx n
-              (bit-lshbx #z1
-                         (-fx (+fx e nb-bits) 2))))))
-   (let* ((shift (-fx (+fx e nb-bits) 1))
-         (cut (bit-rshbx (round n) shift))
-         (exact? (=bx n (bit-lshbx cut shift))))
-      (if (<=bx cut max-container)
-         (values cut e exact?)
-         (round-n-cut n (+fx e 1) nb-bits))))
-
-(define (rounded-/bx x y)
-   (case *round*
-      ((down)  (/bx x y))
-      ((up)    (+bx (/bx x y) #z1))
-      ((round) (let ((tmp (/bx (*bx #z2 x) y)))
-                 (if (zerobx? (remainderbx tmp #z2))
-                     (/bx tmp #z2)
-                     (+bx (/bx tmp #z2) #z1))))))
-
-(define (generate-powers from to mantissa-size)
-   (let* ((nb-bits mantissa-size)
-         (offset (- from))
-         (nb-elements (+ (- from) to 1))
-         (vec (make-vector nb-elements))
-         (max-container (- (bit-lshbx #z1 nb-bits) 1)))
-      ;; the negative ones. 10^-1, 10^-2, etc.
-      ;; We already know, that we can't be exact, so exact? will always be #f.
-      ;; Basically we will have a ten^i that we will *10 at each iteration. We
-      ;; want to create the matissa of 1/ten^i. However the mantissa must be
-      ;; normalized (start with a 1). -> we have to shift the number.
-      ;; We shift by multiplying with two^e. -> We encode two^e*(1/ten^i) ==
-      ;;  two^e/ten^i.
-      (let loop ((i 1)
-                (ten^i #z10)
-                (two^e #z1)
-                (e 0))
-        (unless (< (- i) from)
-           (if (>bx (/bx (*bx #z2 two^e) ten^i) max-container)
-               ;; another shift would make the number too big. We are
-               ;; hence normalized now.
-               (begin
-                  (vector-set! vec (-fx offset i)
-                               (instantiate::Cached-Fast
-                                  (v (rounded-/bx two^e ten^i))
-                                  (e (negfx e))
-                                  (exact? #f)))
-                  (loop (+fx i 1) (*bx ten^i #z10) two^e e))
-               (loop i ten^i (bit-lshbx two^e 1) (+fx e 1)))))
-      ;; the positive ones 10^0, 10^1, etc.
-      ;; start with 1.0. mantissa: 10...0 (1 followed by nb-bits-1 bits)
-      ;;      -> e = -(nb-bits-1)
-      ;; exact? is true when the container can still hold the complete 10^i
-      (let loop ((i 0)
-                (n (bit-lshbx #z1 (-fx nb-bits 1)))
-                (e (-fx 1 nb-bits)))
-        (when (<= i to)
-           (receive (cut e exact?)
-              (round-n-cut n e nb-bits)
-              (vector-set! vec (+fx i offset)
-                           (instantiate::Cached-Fast
-                              (v cut)
-                              (e e)
-                              (exact? exact?)))
-              (loop (+fx i 1) (*bx n #z10) e))))
-      vec))
-
-(define (print-c powers from to struct-type
-                cache-name max-distance-name offset-name macro64)
-   (define (display-power power k)
-      (with-access::Cached-Fast power (v e exact?)
-        (let ((tmp-p (open-output-string)))
-           ;; really hackish way of getting the digits
-           (display (format "~x" v) tmp-p)
-           (let ((str (close-output-port tmp-p)))
-              (printf "  {~a(0x~a, ~a), ~a, ~a},\n"
-                      macro64
-                      (substring str 0 8)
-                      (substring str 8 16)
-                      e
-                      k)))))
-   (define (print-powers-reduced n)
-      (print "static const " struct-type " " cache-name
-            "(" n ")"
-            "[] = {")
-      (let loop ((i 0)
-                (nb-elements 0)
-                (last-e 0)
-                (max-distance 0))
-        (cond
-           ((>= i (vector-length powers))
-            (print "  };")
-            (print "static const int " max-distance-name "(" n ") = "
-                max-distance ";")
-            (print "// nb elements (" n "): " nb-elements))
-           (else
-            (let* ((power (vector-ref powers i))
-                   (e (Cached-Fast-e power)))
-            (display-power power (+ i from))
-            (loop (+ i n)
-                  (+ nb-elements 1)
-                  e
-                  (cond
-                     ((=fx i 0) max-distance)
-                     ((> (- e last-e) max-distance) (- e last-e))
-                     (else max-distance))))))))
-   (print "// ------------ GENERATED FILE ----------------")
-   (print "// command used:")
-   (print "// "
-         (apply string-append (map (lambda (str)
-                                      (string-append " " str))
-                                   *main-args*))
-         "  // NOLINT")
-   (print)
-   (print
-    "// This file is intended to be included inside another .h or .cc files\n"
-    "// with the following defines set:\n"
-    "//  GRISU_CACHE_STRUCT: should expand to the name of a struct that will\n"
-    "//   hold the cached powers of ten. Each entry will hold a 64-bit\n"
-    "//   significand, a 16-bit signed binary exponent, and a 16-bit\n"
-    "//   signed decimal exponent. Each entry will be constructed as follows:\n"
-    "//      { significand, binary_exponent, decimal_exponent }.\n"
-    "//  GRISU_CACHE_NAME(i): generates the name for the different caches.\n"
-    "//   The parameter i will be a number in the range 1-20. A cache will\n"
-    "//   hold every i'th element of a full cache. GRISU_CACHE_NAME(1) will\n"
-    "//   thus hold all elements. The higher i the fewer elements it has.\n"
-    "//   Ideally the user should only reference one cache and let the\n"
-    "//   compiler remove the unused ones.\n"
-    "//  GRISU_CACHE_MAX_DISTANCE(i): generates the name for the maximum\n"
-    "//   binary exponent distance between all elements of a given cache.\n"
-    "//  GRISU_CACHE_OFFSET: is used as variable name for the decimal\n"
-    "//   exponent offset. It is equal to -cache[0].decimal_exponent.\n"
-    "//  GRISU_UINT64_C: used to construct 64-bit values in a platform\n"
-    "//   independent way. In order to encode 0x123456789ABCDEF0 the macro\n"
-    "//   will be invoked as follows: GRISU_UINT64_C(0x12345678,9ABCDEF0).\n")
-   (print)
-   (print-powers-reduced 1)
-   (print-powers-reduced 2)
-   (print-powers-reduced 3)
-   (print-powers-reduced 4)
-   (print-powers-reduced 5)
-   (print-powers-reduced 6)
-   (print-powers-reduced 7)
-   (print-powers-reduced 8)
-   (print-powers-reduced 9)
-   (print-powers-reduced 10)
-   (print-powers-reduced 11)
-   (print-powers-reduced 12)
-   (print-powers-reduced 13)
-   (print-powers-reduced 14)
-   (print-powers-reduced 15)
-   (print-powers-reduced 16)
-   (print-powers-reduced 17)
-   (print-powers-reduced 18)
-   (print-powers-reduced 19)
-   (print-powers-reduced 20)
-   (print "static const int GRISU_CACHE_OFFSET = " (- from) ";"))
-
-;;----------------main --------------------------------------------------------
-(define *main-args* #f)
-(define *mantissa-size* #f)
-(define *dest* #f)
-(define *round* #f)
-(define *from* #f)
-(define *to* #f)
-
-(define (my-main args)
-   (set! *main-args* args)
-   (args-parse (cdr args)
-      (section "Help")
-      (("?") (args-parse-usage #f))
-      ((("-h" "--help") (help "?, -h, --help" "This help message"))
-       (args-parse-usage #f))
-      (section "Misc")
-      (("-o" ?file (help "The output file"))
-       (set! *dest* file))
-      (("--mantissa-size" ?size (help "Container-size in bits"))
-       (set! *mantissa-size* (string->number size)))
-      (("--round" ?direction (help "Round bignums (down, round or up)"))
-       (set! *round* (string->symbol direction)))
-      (("--from" ?from (help "start at 10^from"))
-       (set! *from* (string->number from)))
-      (("--to" ?to (help "go up to 10^to"))
-       (set! *to* (string->number to)))
-      (else
-       (print "Illegal argument `" else "'. Usage:")
-       (args-parse-usage #f)))
-   (when (not *from*)
-      (error "generate-ten-powers"
-            "Missing from"
-            #f))
-   (when (not *to*)
-      (error "generate-ten-powers"
-            "Missing to"
-            #f))
-   (when (not *mantissa-size*)
-      (error "generate-ten-powers"
-            "Missing mantissa size"
-            #f))
-   (when (not (memv *round* '(up down round)))
-      (error "generate-ten-powers"
-            "Missing round-method"
-            *round*))
-
-   (let ((dividers (generate-powers *from* *to* *mantissa-size*))
-        (p (if (not *dest*)
-               (current-output-port)
-               (open-output-file *dest*))))
-      (unwind-protect
-        (with-output-to-port p
-           (lambda ()
-              (print-c dividers *from* *to*
-                       "GRISU_CACHE_STRUCT" "GRISU_CACHE_NAME"
-                       "GRISU_CACHE_MAX_DISTANCE" "GRISU_CACHE_OFFSET"
-                       "GRISU_UINT64_C"
-                       )))
-        (if *dest*
-            (close-output-port p)))))
index 4270b14276a6b455c5f3f12e5a95888b7894706f..59ec566d5723d2956f507de05d24ddd280e60683 100644 (file)
         '../../src/builtins.cc',
         '../../src/builtins.h',
         '../../src/bytecodes-irregexp.h',
-        '../../src/cached_powers.h',
         '../../src/char-predicates-inl.h',
         '../../src/char-predicates.h',
         '../../src/checks.cc',
         '../../src/disassembler.cc',
         '../../src/disassembler.h',
         '../../src/dtoa-config.c',
-        '../../src/diy_fp.h',
-        '../../src/double.h',
         '../../src/execution.cc',
         '../../src/execution.h',
         '../../src/factory.cc',
         '../../src/global-handles.cc',
         '../../src/global-handles.h',
         '../../src/globals.h',
-        '../../src/grisu3.h',
-        '../../src/grisu3.cc',
         '../../src/handles-inl.h',
         '../../src/handles.cc',
         '../../src/handles.h',
         '../../src/parser.cc',
         '../../src/parser.h',
         '../../src/platform.h',
-        '../../src/powers_ten.h',
         '../../src/prettyprinter.cc',
         '../../src/prettyprinter.h',
         '../../src/property.cc',