1 // Copyright 2018 The Abseil Authors.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // https://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14
15 #include "absl/strings/charconv.h"
16
17 #include <algorithm>
18 #include <cassert>
19 #include <cmath>
20 #include <cstring>
21 #include <limits>
22
23 #include "absl/base/casts.h"
24 #include "absl/base/config.h"
25 #include "absl/numeric/bits.h"
26 #include "absl/numeric/int128.h"
27 #include "absl/strings/internal/charconv_bigint.h"
28 #include "absl/strings/internal/charconv_parse.h"
29
30 // The macro ABSL_BIT_PACK_FLOATS is defined on x86-64, where IEEE floating
31 // point numbers have the same endianness in memory as a bitfield struct
32 // containing the corresponding parts.
33 //
34 // When set, we replace calls to ldexp() with manual bit packing, which is
35 // faster and is unaffected by floating point environment.
36 #ifdef ABSL_BIT_PACK_FLOATS
37 #error ABSL_BIT_PACK_FLOATS cannot be directly set
38 #elif defined(__x86_64__) || defined(_M_X64)
39 #define ABSL_BIT_PACK_FLOATS 1
40 #endif
41
42 // A note about subnormals:
43 //
44 // The code below talks about "normals" and "subnormals". A normal IEEE float
45 // has a fixed-width mantissa and power of two exponent. For example, a normal
46 // `double` has a 53-bit mantissa. Because the high bit is always 1, it is not
47 // stored in the representation. The implicit bit buys an extra bit of
48 // resolution in the datatype.
49 //
50 // The downside of this scheme is that there is a large gap between DBL_MIN and
51 // zero. (Large, at least, relative to the different between DBL_MIN and the
52 // next representable number). This gap is softened by the "subnormal" numbers,
53 // which have the same power-of-two exponent as DBL_MIN, but no implicit 53rd
54 // bit. An all-bits-zero exponent in the encoding represents subnormals. (Zero
55 // is represented as a subnormal with an all-bits-zero mantissa.)
56 //
57 // The code below, in calculations, represents the mantissa as a uint64_t. The
58 // end result normally has the 53rd bit set. It represents subnormals by using
59 // narrower mantissas.
60
61 namespace absl {
62 ABSL_NAMESPACE_BEGIN
63 namespace {
64
65 template <typename FloatType>
66 struct FloatTraits;
67
68 template <>
69 struct FloatTraits<double> {
70 using mantissa_t = uint64_t;
71
72 // The number of bits in the given float type.
73 static constexpr int kTargetBits = 64;
74
75 // The number of exponent bits in the given float type.
76 static constexpr int kTargetExponentBits = 11;
77
78 // The number of mantissa bits in the given float type. This includes the
79 // implied high bit.
80 static constexpr int kTargetMantissaBits = 53;
81
82 // The largest supported IEEE exponent, in our integral mantissa
83 // representation.
84 //
85 // If `m` is the largest possible int kTargetMantissaBits bits wide, then
86 // m * 2**kMaxExponent is exactly equal to DBL_MAX.
87 static constexpr int kMaxExponent = 971;
88
89 // The smallest supported IEEE normal exponent, in our integral mantissa
90 // representation.
91 //
92 // If `m` is the smallest possible int kTargetMantissaBits bits wide, then
93 // m * 2**kMinNormalExponent is exactly equal to DBL_MIN.
94 static constexpr int kMinNormalExponent = -1074;
95
96 // The IEEE exponent bias. It equals ((1 << (kTargetExponentBits - 1)) - 1).
97 static constexpr int kExponentBias = 1023;
98
99 // The Eisel-Lemire "Shifting to 54/25 Bits" adjustment. It equals (63 - 1 -
100 // kTargetMantissaBits).
101 static constexpr int kEiselLemireShift = 9;
102
103 // The Eisel-Lemire high64_mask. It equals ((1 << kEiselLemireShift) - 1).
104 static constexpr uint64_t kEiselLemireMask = uint64_t{0x1FF};
105
106 // The smallest negative integer N (smallest negative means furthest from
107 // zero) such that parsing 9999999999999999999eN, with 19 nines, is still
108 // positive. Parsing a smaller (more negative) N will produce zero.
109 //
110 // Adjusting the decimal point and exponent, without adjusting the value,
111 // 9999999999999999999eN equals 9.999999999999999999eM where M = N + 18.
112 //
113 // 9999999999999999999, with 19 nines but no decimal point, is the largest
114 // "repeated nines" integer that fits in a uint64_t.
115 static constexpr int kEiselLemireMinInclusiveExp10 = -324 - 18;
116
117 // The smallest positive integer N such that parsing 1eN produces infinity.
118 // Parsing a smaller N will produce something finite.
119 static constexpr int kEiselLemireMaxExclusiveExp10 = 309;
120
MakeNanabsl::__anonafbfd9360111::FloatTraits121 static double MakeNan(const char* tagp) {
122 #if ABSL_HAVE_BUILTIN(__builtin_nan)
123 // Use __builtin_nan() if available since it has a fix for
124 // https://bugs.llvm.org/show_bug.cgi?id=37778
125 // std::nan may use the glibc implementation.
126 return __builtin_nan(tagp);
127 #else
128 // Support nan no matter which namespace it's in. Some platforms
129 // incorrectly don't put it in namespace std.
130 using namespace std; // NOLINT
131 return nan(tagp);
132 #endif
133 }
134
135 // Builds a nonzero floating point number out of the provided parts.
136 //
137 // This is intended to do the same operation as ldexp(mantissa, exponent),
138 // but using purely integer math, to avoid -ffastmath and floating
139 // point environment issues. Using type punning is also faster. We fall back
140 // to ldexp on a per-platform basis for portability.
141 //
142 // `exponent` must be between kMinNormalExponent and kMaxExponent.
143 //
144 // `mantissa` must either be exactly kTargetMantissaBits wide, in which case
145 // a normal value is made, or it must be less narrow than that, in which case
146 // `exponent` must be exactly kMinNormalExponent, and a subnormal value is
147 // made.
Makeabsl::__anonafbfd9360111::FloatTraits148 static double Make(mantissa_t mantissa, int exponent, bool sign) {
149 #ifndef ABSL_BIT_PACK_FLOATS
150 // Support ldexp no matter which namespace it's in. Some platforms
151 // incorrectly don't put it in namespace std.
152 using namespace std; // NOLINT
153 return sign ? -ldexp(mantissa, exponent) : ldexp(mantissa, exponent);
154 #else
155 constexpr uint64_t kMantissaMask =
156 (uint64_t{1} << (kTargetMantissaBits - 1)) - 1;
157 uint64_t dbl = static_cast<uint64_t>(sign) << 63;
158 if (mantissa > kMantissaMask) {
159 // Normal value.
160 // Adjust by 1023 for the exponent representation bias, and an additional
161 // 52 due to the implied decimal point in the IEEE mantissa
162 // representation.
163 dbl += static_cast<uint64_t>(exponent + 1023 + kTargetMantissaBits - 1)
164 << 52;
165 mantissa &= kMantissaMask;
166 } else {
167 // subnormal value
168 assert(exponent == kMinNormalExponent);
169 }
170 dbl += mantissa;
171 return absl::bit_cast<double>(dbl);
172 #endif // ABSL_BIT_PACK_FLOATS
173 }
174 };
175
176 // Specialization of floating point traits for the `float` type. See the
177 // FloatTraits<double> specialization above for meaning of each of the following
178 // members and methods.
179 template <>
180 struct FloatTraits<float> {
181 using mantissa_t = uint32_t;
182
183 static constexpr int kTargetBits = 32;
184 static constexpr int kTargetExponentBits = 8;
185 static constexpr int kTargetMantissaBits = 24;
186 static constexpr int kMaxExponent = 104;
187 static constexpr int kMinNormalExponent = -149;
188 static constexpr int kExponentBias = 127;
189 static constexpr int kEiselLemireShift = 38;
190 static constexpr uint64_t kEiselLemireMask = uint64_t{0x3FFFFFFFFF};
191 static constexpr int kEiselLemireMinInclusiveExp10 = -46 - 18;
192 static constexpr int kEiselLemireMaxExclusiveExp10 = 39;
193
MakeNanabsl::__anonafbfd9360111::FloatTraits194 static float MakeNan(const char* tagp) {
195 #if ABSL_HAVE_BUILTIN(__builtin_nanf)
196 // Use __builtin_nanf() if available since it has a fix for
197 // https://bugs.llvm.org/show_bug.cgi?id=37778
198 // std::nanf may use the glibc implementation.
199 return __builtin_nanf(tagp);
200 #else
201 // Support nanf no matter which namespace it's in. Some platforms
202 // incorrectly don't put it in namespace std.
203 using namespace std; // NOLINT
204 return std::nanf(tagp);
205 #endif
206 }
207
Makeabsl::__anonafbfd9360111::FloatTraits208 static float Make(mantissa_t mantissa, int exponent, bool sign) {
209 #ifndef ABSL_BIT_PACK_FLOATS
210 // Support ldexpf no matter which namespace it's in. Some platforms
211 // incorrectly don't put it in namespace std.
212 using namespace std; // NOLINT
213 return sign ? -ldexpf(mantissa, exponent) : ldexpf(mantissa, exponent);
214 #else
215 constexpr uint32_t kMantissaMask =
216 (uint32_t{1} << (kTargetMantissaBits - 1)) - 1;
217 uint32_t flt = static_cast<uint32_t>(sign) << 31;
218 if (mantissa > kMantissaMask) {
219 // Normal value.
220 // Adjust by 127 for the exponent representation bias, and an additional
221 // 23 due to the implied decimal point in the IEEE mantissa
222 // representation.
223 flt += static_cast<uint32_t>(exponent + 127 + kTargetMantissaBits - 1)
224 << 23;
225 mantissa &= kMantissaMask;
226 } else {
227 // subnormal value
228 assert(exponent == kMinNormalExponent);
229 }
230 flt += mantissa;
231 return absl::bit_cast<float>(flt);
232 #endif // ABSL_BIT_PACK_FLOATS
233 }
234 };
235
236 // Decimal-to-binary conversions require coercing powers of 10 into a mantissa
237 // and a power of 2. The two helper functions Power10Mantissa(n) and
238 // Power10Exponent(n) perform this task. Together, these represent a hand-
239 // rolled floating point value which is equal to or just less than 10**n.
240 //
241 // The return values satisfy two range guarantees:
242 //
243 // Power10Mantissa(n) * 2**Power10Exponent(n) <= 10**n
244 // < (Power10Mantissa(n) + 1) * 2**Power10Exponent(n)
245 //
246 // 2**63 <= Power10Mantissa(n) < 2**64.
247 //
248 // See the "Table of powers of 10" comment below for a "1e60" example.
249 //
250 // Lookups into the power-of-10 table must first check the Power10Overflow() and
251 // Power10Underflow() functions, to avoid out-of-bounds table access.
252 //
253 // Indexes into these tables are biased by -kPower10TableMinInclusive. Valid
254 // indexes range from kPower10TableMinInclusive to kPower10TableMaxExclusive.
255 extern const uint64_t kPower10MantissaHighTable[]; // High 64 of 128 bits.
256 extern const uint64_t kPower10MantissaLowTable[]; // Low 64 of 128 bits.
257
258 // The smallest (inclusive) allowed value for use with the Power10Mantissa()
259 // and Power10Exponent() functions below. (If a smaller exponent is needed in
260 // calculations, the end result is guaranteed to underflow.)
261 constexpr int kPower10TableMinInclusive = -342;
262
263 // The largest (exclusive) allowed value for use with the Power10Mantissa() and
264 // Power10Exponent() functions below. (If a larger-or-equal exponent is needed
265 // in calculations, the end result is guaranteed to overflow.)
266 constexpr int kPower10TableMaxExclusive = 309;
267
Power10Mantissa(int n)268 uint64_t Power10Mantissa(int n) {
269 return kPower10MantissaHighTable[n - kPower10TableMinInclusive];
270 }
271
Power10Exponent(int n)272 int Power10Exponent(int n) {
273 // The 217706 etc magic numbers encode the results as a formula instead of a
274 // table. Their equivalence (over the kPower10TableMinInclusive ..
275 // kPower10TableMaxExclusive range) is confirmed by
276 // https://github.com/google/wuffs/blob/315b2e52625ebd7b02d8fac13e3cd85ea374fb80/script/print-mpb-powers-of-10.go
277 return (217706 * n >> 16) - 63;
278 }
279
280 // Returns true if n is large enough that 10**n always results in an IEEE
281 // overflow.
Power10Overflow(int n)282 bool Power10Overflow(int n) { return n >= kPower10TableMaxExclusive; }
283
284 // Returns true if n is small enough that 10**n times a ParsedFloat mantissa
285 // always results in an IEEE underflow.
Power10Underflow(int n)286 bool Power10Underflow(int n) { return n < kPower10TableMinInclusive; }
287
288 // Returns true if Power10Mantissa(n) * 2**Power10Exponent(n) is exactly equal
289 // to 10**n numerically. Put another way, this returns true if there is no
290 // truncation error in Power10Mantissa(n).
Power10Exact(int n)291 bool Power10Exact(int n) { return n >= 0 && n <= 27; }
292
293 // Sentinel exponent values for representing numbers too large or too close to
294 // zero to represent in a double.
295 constexpr int kOverflow = 99999;
296 constexpr int kUnderflow = -99999;
297
298 // Struct representing the calculated conversion result of a positive (nonzero)
299 // floating point number.
300 //
301 // The calculated number is mantissa * 2**exponent (mantissa is treated as an
302 // integer.) `mantissa` is chosen to be the correct width for the IEEE float
303 // representation being calculated. (`mantissa` will always have the same bit
304 // width for normal values, and narrower bit widths for subnormals.)
305 //
306 // If the result of conversion was an underflow or overflow, exponent is set
307 // to kUnderflow or kOverflow.
308 struct CalculatedFloat {
309 uint64_t mantissa = 0;
310 int exponent = 0;
311 };
312
313 // Returns the bit width of the given uint128. (Equivalently, returns 128
314 // minus the number of leading zero bits.)
BitWidth(uint128 value)315 int BitWidth(uint128 value) {
316 if (Uint128High64(value) == 0) {
317 // This static_cast is only needed when using a std::bit_width()
318 // implementation that does not have the fix for LWG 3656 applied.
319 return static_cast<int>(bit_width(Uint128Low64(value)));
320 }
321 return 128 - countl_zero(Uint128High64(value));
322 }
323
324 // Calculates how far to the right a mantissa needs to be shifted to create a
325 // properly adjusted mantissa for an IEEE floating point number.
326 //
327 // `mantissa_width` is the bit width of the mantissa to be shifted, and
328 // `binary_exponent` is the exponent of the number before the shift.
329 //
330 // This accounts for subnormal values, and will return a larger-than-normal
331 // shift if binary_exponent would otherwise be too low.
332 template <typename FloatType>
NormalizedShiftSize(int mantissa_width,int binary_exponent)333 int NormalizedShiftSize(int mantissa_width, int binary_exponent) {
334 const int normal_shift =
335 mantissa_width - FloatTraits<FloatType>::kTargetMantissaBits;
336 const int minimum_shift =
337 FloatTraits<FloatType>::kMinNormalExponent - binary_exponent;
338 return std::max(normal_shift, minimum_shift);
339 }
340
341 // Right shifts a uint128 so that it has the requested bit width. (The
342 // resulting value will have 128 - bit_width leading zeroes.) The initial
343 // `value` must be wider than the requested bit width.
344 //
345 // Returns the number of bits shifted.
TruncateToBitWidth(int bit_width,uint128 * value)346 int TruncateToBitWidth(int bit_width, uint128* value) {
347 const int current_bit_width = BitWidth(*value);
348 const int shift = current_bit_width - bit_width;
349 *value >>= shift;
350 return shift;
351 }
352
353 // Checks if the given ParsedFloat represents one of the edge cases that are
354 // not dependent on number base: zero, infinity, or NaN. If so, sets *value
355 // the appropriate double, and returns true.
356 template <typename FloatType>
HandleEdgeCase(const strings_internal::ParsedFloat & input,bool negative,FloatType * value)357 bool HandleEdgeCase(const strings_internal::ParsedFloat& input, bool negative,
358 FloatType* value) {
359 if (input.type == strings_internal::FloatType::kNan) {
360 // A bug in both clang < 7 and gcc would cause the compiler to optimize
361 // away the buffer we are building below. Declaring the buffer volatile
362 // avoids the issue, and has no measurable performance impact in
363 // microbenchmarks.
364 //
365 // https://bugs.llvm.org/show_bug.cgi?id=37778
366 // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86113
367 constexpr ptrdiff_t kNanBufferSize = 128;
368 #if (defined(__GNUC__) && !defined(__clang__)) || \
369 (defined(__clang__) && __clang_major__ < 7)
370 volatile char n_char_sequence[kNanBufferSize];
371 #else
372 char n_char_sequence[kNanBufferSize];
373 #endif
374 if (input.subrange_begin == nullptr) {
375 n_char_sequence[0] = '\0';
376 } else {
377 ptrdiff_t nan_size = input.subrange_end - input.subrange_begin;
378 nan_size = std::min(nan_size, kNanBufferSize - 1);
379 std::copy_n(input.subrange_begin, nan_size, n_char_sequence);
380 n_char_sequence[nan_size] = '\0';
381 }
382 char* nan_argument = const_cast<char*>(n_char_sequence);
383 *value = negative ? -FloatTraits<FloatType>::MakeNan(nan_argument)
384 : FloatTraits<FloatType>::MakeNan(nan_argument);
385 return true;
386 }
387 if (input.type == strings_internal::FloatType::kInfinity) {
388 *value = negative ? -std::numeric_limits<FloatType>::infinity()
389 : std::numeric_limits<FloatType>::infinity();
390 return true;
391 }
392 if (input.mantissa == 0) {
393 *value = negative ? -0.0 : 0.0;
394 return true;
395 }
396 return false;
397 }
398
399 // Given a CalculatedFloat result of a from_chars conversion, generate the
400 // correct output values.
401 //
402 // CalculatedFloat can represent an underflow or overflow, in which case the
403 // error code in *result is set. Otherwise, the calculated floating point
404 // number is stored in *value.
405 template <typename FloatType>
EncodeResult(const CalculatedFloat & calculated,bool negative,absl::from_chars_result * result,FloatType * value)406 void EncodeResult(const CalculatedFloat& calculated, bool negative,
407 absl::from_chars_result* result, FloatType* value) {
408 if (calculated.exponent == kOverflow) {
409 result->ec = std::errc::result_out_of_range;
410 *value = negative ? -std::numeric_limits<FloatType>::max()
411 : std::numeric_limits<FloatType>::max();
412 return;
413 } else if (calculated.mantissa == 0 || calculated.exponent == kUnderflow) {
414 result->ec = std::errc::result_out_of_range;
415 *value = negative ? -0.0 : 0.0;
416 return;
417 }
418 *value = FloatTraits<FloatType>::Make(
419 static_cast<typename FloatTraits<FloatType>::mantissa_t>(
420 calculated.mantissa),
421 calculated.exponent, negative);
422 }
423
424 // Returns the given uint128 shifted to the right by `shift` bits, and rounds
425 // the remaining bits using round_to_nearest logic. The value is returned as a
426 // uint64_t, since this is the type used by this library for storing calculated
427 // floating point mantissas.
428 //
429 // It is expected that the width of the input value shifted by `shift` will
430 // be the correct bit-width for the target mantissa, which is strictly narrower
431 // than a uint64_t.
432 //
433 // If `input_exact` is false, then a nonzero error epsilon is assumed. For
434 // rounding purposes, the true value being rounded is strictly greater than the
435 // input value. The error may represent a single lost carry bit.
436 //
437 // When input_exact, shifted bits of the form 1000000... represent a tie, which
438 // is broken by rounding to even -- the rounding direction is chosen so the low
439 // bit of the returned value is 0.
440 //
441 // When !input_exact, shifted bits of the form 10000000... represent a value
442 // strictly greater than one half (due to the error epsilon), and so ties are
443 // always broken by rounding up.
444 //
445 // When !input_exact, shifted bits of the form 01111111... are uncertain;
446 // the true value may or may not be greater than 10000000..., due to the
447 // possible lost carry bit. The correct rounding direction is unknown. In this
448 // case, the result is rounded down, and `output_exact` is set to false.
449 //
450 // Zero and negative values of `shift` are accepted, in which case the word is
451 // shifted left, as necessary.
ShiftRightAndRound(uint128 value,int shift,bool input_exact,bool * output_exact)452 uint64_t ShiftRightAndRound(uint128 value, int shift, bool input_exact,
453 bool* output_exact) {
454 if (shift <= 0) {
455 *output_exact = input_exact;
456 return static_cast<uint64_t>(value << -shift);
457 }
458 if (shift >= 128) {
459 // Exponent is so small that we are shifting away all significant bits.
460 // Answer will not be representable, even as a subnormal, so return a zero
461 // mantissa (which represents underflow).
462 *output_exact = true;
463 return 0;
464 }
465
466 *output_exact = true;
467 const uint128 shift_mask = (uint128(1) << shift) - 1;
468 const uint128 halfway_point = uint128(1) << (shift - 1);
469
470 const uint128 shifted_bits = value & shift_mask;
471 value >>= shift;
472 if (shifted_bits > halfway_point) {
473 // Shifted bits greater than 10000... require rounding up.
474 return static_cast<uint64_t>(value + 1);
475 }
476 if (shifted_bits == halfway_point) {
477 // In exact mode, shifted bits of 10000... mean we're exactly halfway
478 // between two numbers, and we must round to even. So only round up if
479 // the low bit of `value` is set.
480 //
481 // In inexact mode, the nonzero error means the actual value is greater
482 // than the halfway point and we must always round up.
483 if ((value & 1) == 1 || !input_exact) {
484 ++value;
485 }
486 return static_cast<uint64_t>(value);
487 }
488 if (!input_exact && shifted_bits == halfway_point - 1) {
489 // Rounding direction is unclear, due to error.
490 *output_exact = false;
491 }
492 // Otherwise, round down.
493 return static_cast<uint64_t>(value);
494 }
495
496 // Checks if a floating point guess needs to be rounded up, using high precision
497 // math.
498 //
499 // `guess_mantissa` and `guess_exponent` represent a candidate guess for the
500 // number represented by `parsed_decimal`.
501 //
502 // The exact number represented by `parsed_decimal` must lie between the two
503 // numbers:
504 // A = `guess_mantissa * 2**guess_exponent`
505 // B = `(guess_mantissa + 1) * 2**guess_exponent`
506 //
507 // This function returns false if `A` is the better guess, and true if `B` is
508 // the better guess, with rounding ties broken by rounding to even.
MustRoundUp(uint64_t guess_mantissa,int guess_exponent,const strings_internal::ParsedFloat & parsed_decimal)509 bool MustRoundUp(uint64_t guess_mantissa, int guess_exponent,
510 const strings_internal::ParsedFloat& parsed_decimal) {
511 // 768 is the number of digits needed in the worst case. We could determine a
512 // better limit dynamically based on the value of parsed_decimal.exponent.
513 // This would optimize pathological input cases only. (Sane inputs won't have
514 // hundreds of digits of mantissa.)
515 absl::strings_internal::BigUnsigned<84> exact_mantissa;
516 int exact_exponent = exact_mantissa.ReadFloatMantissa(parsed_decimal, 768);
517
518 // Adjust the `guess` arguments to be halfway between A and B.
519 guess_mantissa = guess_mantissa * 2 + 1;
520 guess_exponent -= 1;
521
522 // In our comparison:
523 // lhs = exact = exact_mantissa * 10**exact_exponent
524 // = exact_mantissa * 5**exact_exponent * 2**exact_exponent
525 // rhs = guess = guess_mantissa * 2**guess_exponent
526 //
527 // Because we are doing integer math, we can't directly deal with negative
528 // exponents. We instead move these to the other side of the inequality.
529 absl::strings_internal::BigUnsigned<84>& lhs = exact_mantissa;
530 int comparison;
531 if (exact_exponent >= 0) {
532 lhs.MultiplyByFiveToTheNth(exact_exponent);
533 absl::strings_internal::BigUnsigned<84> rhs(guess_mantissa);
534 // There are powers of 2 on both sides of the inequality; reduce this to
535 // a single bit-shift.
536 if (exact_exponent > guess_exponent) {
537 lhs.ShiftLeft(exact_exponent - guess_exponent);
538 } else {
539 rhs.ShiftLeft(guess_exponent - exact_exponent);
540 }
541 comparison = Compare(lhs, rhs);
542 } else {
543 // Move the power of 5 to the other side of the equation, giving us:
544 // lhs = exact_mantissa * 2**exact_exponent
545 // rhs = guess_mantissa * 5**(-exact_exponent) * 2**guess_exponent
546 absl::strings_internal::BigUnsigned<84> rhs =
547 absl::strings_internal::BigUnsigned<84>::FiveToTheNth(-exact_exponent);
548 rhs.MultiplyBy(guess_mantissa);
549 if (exact_exponent > guess_exponent) {
550 lhs.ShiftLeft(exact_exponent - guess_exponent);
551 } else {
552 rhs.ShiftLeft(guess_exponent - exact_exponent);
553 }
554 comparison = Compare(lhs, rhs);
555 }
556 if (comparison < 0) {
557 return false;
558 } else if (comparison > 0) {
559 return true;
560 } else {
561 // When lhs == rhs, the decimal input is exactly between A and B.
562 // Round towards even -- round up only if the low bit of the initial
563 // `guess_mantissa` was a 1. We shifted guess_mantissa left 1 bit at
564 // the beginning of this function, so test the 2nd bit here.
565 return (guess_mantissa & 2) == 2;
566 }
567 }
568
569 // Constructs a CalculatedFloat from a given mantissa and exponent, but
570 // with the following normalizations applied:
571 //
572 // If rounding has caused mantissa to increase just past the allowed bit
573 // width, shift and adjust exponent.
574 //
575 // If exponent is too high, sets kOverflow.
576 //
577 // If mantissa is zero (representing a non-zero value not representable, even
578 // as a subnormal), sets kUnderflow.
579 template <typename FloatType>
CalculatedFloatFromRawValues(uint64_t mantissa,int exponent)580 CalculatedFloat CalculatedFloatFromRawValues(uint64_t mantissa, int exponent) {
581 CalculatedFloat result;
582 if (mantissa == uint64_t{1} << FloatTraits<FloatType>::kTargetMantissaBits) {
583 mantissa >>= 1;
584 exponent += 1;
585 }
586 if (exponent > FloatTraits<FloatType>::kMaxExponent) {
587 result.exponent = kOverflow;
588 } else if (mantissa == 0) {
589 result.exponent = kUnderflow;
590 } else {
591 result.exponent = exponent;
592 result.mantissa = mantissa;
593 }
594 return result;
595 }
596
597 template <typename FloatType>
CalculateFromParsedHexadecimal(const strings_internal::ParsedFloat & parsed_hex)598 CalculatedFloat CalculateFromParsedHexadecimal(
599 const strings_internal::ParsedFloat& parsed_hex) {
600 uint64_t mantissa = parsed_hex.mantissa;
601 int exponent = parsed_hex.exponent;
602 // This static_cast is only needed when using a std::bit_width()
603 // implementation that does not have the fix for LWG 3656 applied.
604 int mantissa_width = static_cast<int>(bit_width(mantissa));
605 const int shift = NormalizedShiftSize<FloatType>(mantissa_width, exponent);
606 bool result_exact;
607 exponent += shift;
608 mantissa = ShiftRightAndRound(mantissa, shift,
609 /* input exact= */ true, &result_exact);
610 // ParseFloat handles rounding in the hexadecimal case, so we don't have to
611 // check `result_exact` here.
612 return CalculatedFloatFromRawValues<FloatType>(mantissa, exponent);
613 }
614
615 template <typename FloatType>
CalculateFromParsedDecimal(const strings_internal::ParsedFloat & parsed_decimal)616 CalculatedFloat CalculateFromParsedDecimal(
617 const strings_internal::ParsedFloat& parsed_decimal) {
618 CalculatedFloat result;
619
620 // Large or small enough decimal exponents will always result in overflow
621 // or underflow.
622 if (Power10Underflow(parsed_decimal.exponent)) {
623 result.exponent = kUnderflow;
624 return result;
625 } else if (Power10Overflow(parsed_decimal.exponent)) {
626 result.exponent = kOverflow;
627 return result;
628 }
629
630 // Otherwise convert our power of 10 into a power of 2 times an integer
631 // mantissa, and multiply this by our parsed decimal mantissa.
632 uint128 wide_binary_mantissa = parsed_decimal.mantissa;
633 wide_binary_mantissa *= Power10Mantissa(parsed_decimal.exponent);
634 int binary_exponent = Power10Exponent(parsed_decimal.exponent);
635
636 // Discard bits that are inaccurate due to truncation error. The magic
637 // `mantissa_width` constants below are justified in
638 // https://abseil.io/about/design/charconv. They represent the number of bits
639 // in `wide_binary_mantissa` that are guaranteed to be unaffected by error
640 // propagation.
641 bool mantissa_exact;
642 int mantissa_width;
643 if (parsed_decimal.subrange_begin) {
644 // Truncated mantissa
645 mantissa_width = 58;
646 mantissa_exact = false;
647 binary_exponent +=
648 TruncateToBitWidth(mantissa_width, &wide_binary_mantissa);
649 } else if (!Power10Exact(parsed_decimal.exponent)) {
650 // Exact mantissa, truncated power of ten
651 mantissa_width = 63;
652 mantissa_exact = false;
653 binary_exponent +=
654 TruncateToBitWidth(mantissa_width, &wide_binary_mantissa);
655 } else {
656 // Product is exact
657 mantissa_width = BitWidth(wide_binary_mantissa);
658 mantissa_exact = true;
659 }
660
661 // Shift into an FloatType-sized mantissa, and round to nearest.
662 const int shift =
663 NormalizedShiftSize<FloatType>(mantissa_width, binary_exponent);
664 bool result_exact;
665 binary_exponent += shift;
666 uint64_t binary_mantissa = ShiftRightAndRound(wide_binary_mantissa, shift,
667 mantissa_exact, &result_exact);
668 if (!result_exact) {
669 // We could not determine the rounding direction using int128 math. Use
670 // full resolution math instead.
671 if (MustRoundUp(binary_mantissa, binary_exponent, parsed_decimal)) {
672 binary_mantissa += 1;
673 }
674 }
675
676 return CalculatedFloatFromRawValues<FloatType>(binary_mantissa,
677 binary_exponent);
678 }
679
680 // As discussed in https://nigeltao.github.io/blog/2020/eisel-lemire.html the
681 // primary goal of the Eisel-Lemire algorithm is speed, for 99+% of the cases,
682 // not 100% coverage. As long as Eisel-Lemire doesn’t claim false positives,
683 // the combined approach (falling back to an alternative implementation when
684 // this function returns false) is both fast and correct.
685 template <typename FloatType>
EiselLemire(const strings_internal::ParsedFloat & input,bool negative,FloatType * value,std::errc * ec)686 bool EiselLemire(const strings_internal::ParsedFloat& input, bool negative,
687 FloatType* value, std::errc* ec) {
688 uint64_t man = input.mantissa;
689 int exp10 = input.exponent;
690 if (exp10 < FloatTraits<FloatType>::kEiselLemireMinInclusiveExp10) {
691 *value = negative ? -0.0 : 0.0;
692 *ec = std::errc::result_out_of_range;
693 return true;
694 } else if (exp10 >= FloatTraits<FloatType>::kEiselLemireMaxExclusiveExp10) {
695 // Return max (a finite value) consistent with from_chars and DR 3081. For
696 // SimpleAtod and SimpleAtof, post-processing will return infinity.
697 *value = negative ? -std::numeric_limits<FloatType>::max()
698 : std::numeric_limits<FloatType>::max();
699 *ec = std::errc::result_out_of_range;
700 return true;
701 }
702
703 // Assert kPower10TableMinInclusive <= exp10 < kPower10TableMaxExclusive.
704 // Equivalently, !Power10Underflow(exp10) and !Power10Overflow(exp10).
705 static_assert(
706 FloatTraits<FloatType>::kEiselLemireMinInclusiveExp10 >=
707 kPower10TableMinInclusive,
708 "(exp10-kPower10TableMinInclusive) in kPower10MantissaHighTable bounds");
709 static_assert(
710 FloatTraits<FloatType>::kEiselLemireMaxExclusiveExp10 <=
711 kPower10TableMaxExclusive,
712 "(exp10-kPower10TableMinInclusive) in kPower10MantissaHighTable bounds");
713
714 // The terse (+) comments in this function body refer to sections of the
715 // https://nigeltao.github.io/blog/2020/eisel-lemire.html blog post.
716 //
717 // That blog post discusses double precision (11 exponent bits with a -1023
718 // bias, 52 mantissa bits), but the same approach applies to single precision
719 // (8 exponent bits with a -127 bias, 23 mantissa bits). Either way, the
720 // computation here happens with 64-bit values (e.g. man) or 128-bit values
721 // (e.g. x) before finally converting to 64- or 32-bit floating point.
722 //
723 // See also "Number Parsing at a Gigabyte per Second, Software: Practice and
724 // Experience 51 (8), 2021" (https://arxiv.org/abs/2101.11408) for detail.
725
726 // (+) Normalization.
727 int clz = countl_zero(man);
728 man <<= static_cast<unsigned int>(clz);
729 // The 217706 etc magic numbers are from the Power10Exponent function.
730 uint64_t ret_exp2 =
731 static_cast<uint64_t>((217706 * exp10 >> 16) + 64 +
732 FloatTraits<FloatType>::kExponentBias - clz);
733
734 // (+) Multiplication.
735 uint128 x = static_cast<uint128>(man) *
736 static_cast<uint128>(
737 kPower10MantissaHighTable[exp10 - kPower10TableMinInclusive]);
738
739 // (+) Wider Approximation.
740 static constexpr uint64_t high64_mask =
741 FloatTraits<FloatType>::kEiselLemireMask;
742 if (((Uint128High64(x) & high64_mask) == high64_mask) &&
743 (man > (std::numeric_limits<uint64_t>::max() - Uint128Low64(x)))) {
744 uint128 y =
745 static_cast<uint128>(man) *
746 static_cast<uint128>(
747 kPower10MantissaLowTable[exp10 - kPower10TableMinInclusive]);
748 x += Uint128High64(y);
749 // For example, parsing "4503599627370497.5" will take the if-true
750 // branch here (for double precision), since:
751 // - x = 0x8000000000000BFF_FFFFFFFFFFFFFFFF
752 // - y = 0x8000000000000BFF_7FFFFFFFFFFFF400
753 // - man = 0xA000000000000F00
754 // Likewise, when parsing "0.0625" for single precision:
755 // - x = 0x7FFFFFFFFFFFFFFF_FFFFFFFFFFFFFFFF
756 // - y = 0x813FFFFFFFFFFFFF_8A00000000000000
757 // - man = 0x9C40000000000000
758 if (((Uint128High64(x) & high64_mask) == high64_mask) &&
759 ((Uint128Low64(x) + 1) == 0) &&
760 (man > (std::numeric_limits<uint64_t>::max() - Uint128Low64(y)))) {
761 return false;
762 }
763 }
764
765 // (+) Shifting to 54 Bits (or for single precision, to 25 bits).
766 uint64_t msb = Uint128High64(x) >> 63;
767 uint64_t ret_man =
768 Uint128High64(x) >> (msb + FloatTraits<FloatType>::kEiselLemireShift);
769 ret_exp2 -= 1 ^ msb;
770
771 // (+) Half-way Ambiguity.
772 //
773 // For example, parsing "1e+23" will take the if-true branch here (for double
774 // precision), since:
775 // - x = 0x54B40B1F852BDA00_0000000000000000
776 // - ret_man = 0x002A5A058FC295ED
777 // Likewise, when parsing "20040229.0" for single precision:
778 // - x = 0x4C72894000000000_0000000000000000
779 // - ret_man = 0x000000000131CA25
780 if ((Uint128Low64(x) == 0) && ((Uint128High64(x) & high64_mask) == 0) &&
781 ((ret_man & 3) == 1)) {
782 return false;
783 }
784
785 // (+) From 54 to 53 Bits (or for single precision, from 25 to 24 bits).
786 ret_man += ret_man & 1; // Line From54a.
787 ret_man >>= 1; // Line From54b.
788 // Incrementing ret_man (at line From54a) may have overflowed 54 bits (53
789 // bits after the right shift by 1 at line From54b), so adjust for that.
790 //
791 // For example, parsing "9223372036854775807" will take the if-true branch
792 // here (for double precision), since:
793 // - ret_man = 0x0020000000000000 = (1 << 53)
794 // Likewise, when parsing "2147483647.0" for single precision:
795 // - ret_man = 0x0000000001000000 = (1 << 24)
796 if ((ret_man >> FloatTraits<FloatType>::kTargetMantissaBits) > 0) {
797 ret_exp2 += 1;
798 // Conceptually, we need a "ret_man >>= 1" in this if-block to balance
799 // incrementing ret_exp2 in the line immediately above. However, we only
800 // get here when line From54a overflowed (after adding a 1), so ret_man
801 // here is (1 << 53). Its low 53 bits are therefore all zeroes. The only
802 // remaining use of ret_man is to mask it with ((1 << 52) - 1), so only its
803 // low 52 bits matter. A "ret_man >>= 1" would have no effect in practice.
804 //
805 // We omit the "ret_man >>= 1", even if it is cheap (and this if-branch is
806 // rarely taken) and technically 'more correct', so that mutation tests
807 // that would otherwise modify or omit that "ret_man >>= 1" don't complain
808 // that such code mutations have no observable effect.
809 }
810
811 // ret_exp2 is a uint64_t. Zero or underflow means that we're in subnormal
812 // space. max_exp2 (0x7FF for double precision, 0xFF for single precision) or
813 // above means that we're in Inf/NaN space.
814 //
815 // The if block is equivalent to (but has fewer branches than):
816 // if ((ret_exp2 <= 0) || (ret_exp2 >= max_exp2)) { etc }
817 //
818 // For example, parsing "4.9406564584124654e-324" will take the if-true
819 // branch here, since ret_exp2 = -51.
820 static constexpr uint64_t max_exp2 =
821 (1 << FloatTraits<FloatType>::kTargetExponentBits) - 1;
822 if ((ret_exp2 - 1) >= (max_exp2 - 1)) {
823 return false;
824 }
825
826 #ifndef ABSL_BIT_PACK_FLOATS
827 if (FloatTraits<FloatType>::kTargetBits == 64) {
828 *value = FloatTraits<FloatType>::Make(
829 (ret_man & 0x000FFFFFFFFFFFFFu) | 0x0010000000000000u,
830 static_cast<int>(ret_exp2) - 1023 - 52, negative);
831 return true;
832 } else if (FloatTraits<FloatType>::kTargetBits == 32) {
833 *value = FloatTraits<FloatType>::Make(
834 (static_cast<uint32_t>(ret_man) & 0x007FFFFFu) | 0x00800000u,
835 static_cast<int>(ret_exp2) - 127 - 23, negative);
836 return true;
837 }
838 #else
839 if (FloatTraits<FloatType>::kTargetBits == 64) {
840 uint64_t ret_bits = (ret_exp2 << 52) | (ret_man & 0x000FFFFFFFFFFFFFu);
841 if (negative) {
842 ret_bits |= 0x8000000000000000u;
843 }
844 *value = absl::bit_cast<double>(ret_bits);
845 return true;
846 } else if (FloatTraits<FloatType>::kTargetBits == 32) {
847 uint32_t ret_bits = (static_cast<uint32_t>(ret_exp2) << 23) |
848 (static_cast<uint32_t>(ret_man) & 0x007FFFFFu);
849 if (negative) {
850 ret_bits |= 0x80000000u;
851 }
852 *value = absl::bit_cast<float>(ret_bits);
853 return true;
854 }
855 #endif // ABSL_BIT_PACK_FLOATS
856 return false;
857 }
858
859 template <typename FloatType>
FromCharsImpl(const char * first,const char * last,FloatType & value,chars_format fmt_flags)860 from_chars_result FromCharsImpl(const char* first, const char* last,
861 FloatType& value, chars_format fmt_flags) {
862 from_chars_result result;
863 result.ptr = first; // overwritten on successful parse
864 result.ec = std::errc();
865
866 bool negative = false;
867 if (first != last && *first == '-') {
868 ++first;
869 negative = true;
870 }
871 // If the `hex` flag is *not* set, then we will accept a 0x prefix and try
872 // to parse a hexadecimal float.
873 if ((fmt_flags & chars_format::hex) == chars_format{} && last - first >= 2 &&
874 *first == '0' && (first[1] == 'x' || first[1] == 'X')) {
875 const char* hex_first = first + 2;
876 strings_internal::ParsedFloat hex_parse =
877 strings_internal::ParseFloat<16>(hex_first, last, fmt_flags);
878 if (hex_parse.end == nullptr ||
879 hex_parse.type != strings_internal::FloatType::kNumber) {
880 // Either we failed to parse a hex float after the "0x", or we read
881 // "0xinf" or "0xnan" which we don't want to match.
882 //
883 // However, a string that begins with "0x" also begins with "0", which
884 // is normally a valid match for the number zero. So we want these
885 // strings to match zero unless fmt_flags is `scientific`. (This flag
886 // means an exponent is required, which the string "0" does not have.)
887 if (fmt_flags == chars_format::scientific) {
888 result.ec = std::errc::invalid_argument;
889 } else {
890 result.ptr = first + 1;
891 value = negative ? -0.0 : 0.0;
892 }
893 return result;
894 }
895 // We matched a value.
896 result.ptr = hex_parse.end;
897 if (HandleEdgeCase(hex_parse, negative, &value)) {
898 return result;
899 }
900 CalculatedFloat calculated =
901 CalculateFromParsedHexadecimal<FloatType>(hex_parse);
902 EncodeResult(calculated, negative, &result, &value);
903 return result;
904 }
905 // Otherwise, we choose the number base based on the flags.
906 if ((fmt_flags & chars_format::hex) == chars_format::hex) {
907 strings_internal::ParsedFloat hex_parse =
908 strings_internal::ParseFloat<16>(first, last, fmt_flags);
909 if (hex_parse.end == nullptr) {
910 result.ec = std::errc::invalid_argument;
911 return result;
912 }
913 result.ptr = hex_parse.end;
914 if (HandleEdgeCase(hex_parse, negative, &value)) {
915 return result;
916 }
917 CalculatedFloat calculated =
918 CalculateFromParsedHexadecimal<FloatType>(hex_parse);
919 EncodeResult(calculated, negative, &result, &value);
920 return result;
921 } else {
922 strings_internal::ParsedFloat decimal_parse =
923 strings_internal::ParseFloat<10>(first, last, fmt_flags);
924 if (decimal_parse.end == nullptr) {
925 result.ec = std::errc::invalid_argument;
926 return result;
927 }
928 result.ptr = decimal_parse.end;
929 if (HandleEdgeCase(decimal_parse, negative, &value)) {
930 return result;
931 }
932 // A nullptr subrange_begin means that the decimal_parse.mantissa is exact
933 // (not truncated), a precondition of the Eisel-Lemire algorithm.
934 if ((decimal_parse.subrange_begin == nullptr) &&
935 EiselLemire<FloatType>(decimal_parse, negative, &value, &result.ec)) {
936 return result;
937 }
938 CalculatedFloat calculated =
939 CalculateFromParsedDecimal<FloatType>(decimal_parse);
940 EncodeResult(calculated, negative, &result, &value);
941 return result;
942 }
943 }
944 } // namespace
945
from_chars(const char * first,const char * last,double & value,chars_format fmt)946 from_chars_result from_chars(const char* first, const char* last, double& value,
947 chars_format fmt) {
948 return FromCharsImpl(first, last, value, fmt);
949 }
950
from_chars(const char * first,const char * last,float & value,chars_format fmt)951 from_chars_result from_chars(const char* first, const char* last, float& value,
952 chars_format fmt) {
953 return FromCharsImpl(first, last, value, fmt);
954 }
955
956 namespace {
957
958 // Table of powers of 10, from kPower10TableMinInclusive to
959 // kPower10TableMaxExclusive.
960 //
961 // kPower10MantissaHighTable[i - kPower10TableMinInclusive] stores the 64-bit
962 // mantissa. The high bit is always on.
963 //
964 // kPower10MantissaLowTable extends that 64-bit mantissa to 128 bits.
965 //
966 // Power10Exponent(i) calculates the power-of-two exponent.
967 //
968 // For a number i, this gives the unique mantissaHigh and exponent such that
969 // (mantissaHigh * 2**exponent) <= 10**i < ((mantissaHigh + 1) * 2**exponent).
970 //
971 // For example, Python can confirm that the exact hexadecimal value of 1e60 is:
972 // >>> a = 1000000000000000000000000000000000000000000000000000000000000
973 // >>> hex(a)
974 // '0x9f4f2726179a224501d762422c946590d91000000000000000'
975 // Adding underscores at every 8th hex digit shows 50 hex digits:
976 // '0x9f4f2726_179a2245_01d76242_2c946590_d9100000_00000000_00'.
977 // In this case, the high bit of the first hex digit, 9, is coincidentally set,
978 // so we do not have to do further shifting to deduce the 128-bit mantissa:
979 // - kPower10MantissaHighTable[60 - kP10TMI] = 0x9f4f2726179a2245U
980 // - kPower10MantissaLowTable[ 60 - kP10TMI] = 0x01d762422c946590U
981 // where kP10TMI is kPower10TableMinInclusive. The low 18 of those 50 hex
982 // digits are truncated.
983 //
984 // 50 hex digits (with the high bit set) is 200 bits and mantissaHigh holds 64
985 // bits, so Power10Exponent(60) = 200 - 64 = 136. Again, Python can confirm:
986 // >>> b = 0x9f4f2726179a2245
987 // >>> ((b+0)<<136) <= a
988 // True
989 // >>> ((b+1)<<136) <= a
990 // False
991 //
992 // The tables were generated by
993 // https://github.com/google/wuffs/blob/315b2e52625ebd7b02d8fac13e3cd85ea374fb80/script/print-mpb-powers-of-10.go
994 // after re-formatting its output into two arrays of N uint64_t values (instead
995 // of an N element array of uint64_t pairs).
996
997 const uint64_t kPower10MantissaHighTable[] = {
998 0xeef453d6923bd65aU, 0x9558b4661b6565f8U, 0xbaaee17fa23ebf76U,
999 0xe95a99df8ace6f53U, 0x91d8a02bb6c10594U, 0xb64ec836a47146f9U,
1000 0xe3e27a444d8d98b7U, 0x8e6d8c6ab0787f72U, 0xb208ef855c969f4fU,
1001 0xde8b2b66b3bc4723U, 0x8b16fb203055ac76U, 0xaddcb9e83c6b1793U,
1002 0xd953e8624b85dd78U, 0x87d4713d6f33aa6bU, 0xa9c98d8ccb009506U,
1003 0xd43bf0effdc0ba48U, 0x84a57695fe98746dU, 0xa5ced43b7e3e9188U,
1004 0xcf42894a5dce35eaU, 0x818995ce7aa0e1b2U, 0xa1ebfb4219491a1fU,
1005 0xca66fa129f9b60a6U, 0xfd00b897478238d0U, 0x9e20735e8cb16382U,
1006 0xc5a890362fddbc62U, 0xf712b443bbd52b7bU, 0x9a6bb0aa55653b2dU,
1007 0xc1069cd4eabe89f8U, 0xf148440a256e2c76U, 0x96cd2a865764dbcaU,
1008 0xbc807527ed3e12bcU, 0xeba09271e88d976bU, 0x93445b8731587ea3U,
1009 0xb8157268fdae9e4cU, 0xe61acf033d1a45dfU, 0x8fd0c16206306babU,
1010 0xb3c4f1ba87bc8696U, 0xe0b62e2929aba83cU, 0x8c71dcd9ba0b4925U,
1011 0xaf8e5410288e1b6fU, 0xdb71e91432b1a24aU, 0x892731ac9faf056eU,
1012 0xab70fe17c79ac6caU, 0xd64d3d9db981787dU, 0x85f0468293f0eb4eU,
1013 0xa76c582338ed2621U, 0xd1476e2c07286faaU, 0x82cca4db847945caU,
1014 0xa37fce126597973cU, 0xcc5fc196fefd7d0cU, 0xff77b1fcbebcdc4fU,
1015 0x9faacf3df73609b1U, 0xc795830d75038c1dU, 0xf97ae3d0d2446f25U,
1016 0x9becce62836ac577U, 0xc2e801fb244576d5U, 0xf3a20279ed56d48aU,
1017 0x9845418c345644d6U, 0xbe5691ef416bd60cU, 0xedec366b11c6cb8fU,
1018 0x94b3a202eb1c3f39U, 0xb9e08a83a5e34f07U, 0xe858ad248f5c22c9U,
1019 0x91376c36d99995beU, 0xb58547448ffffb2dU, 0xe2e69915b3fff9f9U,
1020 0x8dd01fad907ffc3bU, 0xb1442798f49ffb4aU, 0xdd95317f31c7fa1dU,
1021 0x8a7d3eef7f1cfc52U, 0xad1c8eab5ee43b66U, 0xd863b256369d4a40U,
1022 0x873e4f75e2224e68U, 0xa90de3535aaae202U, 0xd3515c2831559a83U,
1023 0x8412d9991ed58091U, 0xa5178fff668ae0b6U, 0xce5d73ff402d98e3U,
1024 0x80fa687f881c7f8eU, 0xa139029f6a239f72U, 0xc987434744ac874eU,
1025 0xfbe9141915d7a922U, 0x9d71ac8fada6c9b5U, 0xc4ce17b399107c22U,
1026 0xf6019da07f549b2bU, 0x99c102844f94e0fbU, 0xc0314325637a1939U,
1027 0xf03d93eebc589f88U, 0x96267c7535b763b5U, 0xbbb01b9283253ca2U,
1028 0xea9c227723ee8bcbU, 0x92a1958a7675175fU, 0xb749faed14125d36U,
1029 0xe51c79a85916f484U, 0x8f31cc0937ae58d2U, 0xb2fe3f0b8599ef07U,
1030 0xdfbdcece67006ac9U, 0x8bd6a141006042bdU, 0xaecc49914078536dU,
1031 0xda7f5bf590966848U, 0x888f99797a5e012dU, 0xaab37fd7d8f58178U,
1032 0xd5605fcdcf32e1d6U, 0x855c3be0a17fcd26U, 0xa6b34ad8c9dfc06fU,
1033 0xd0601d8efc57b08bU, 0x823c12795db6ce57U, 0xa2cb1717b52481edU,
1034 0xcb7ddcdda26da268U, 0xfe5d54150b090b02U, 0x9efa548d26e5a6e1U,
1035 0xc6b8e9b0709f109aU, 0xf867241c8cc6d4c0U, 0x9b407691d7fc44f8U,
1036 0xc21094364dfb5636U, 0xf294b943e17a2bc4U, 0x979cf3ca6cec5b5aU,
1037 0xbd8430bd08277231U, 0xece53cec4a314ebdU, 0x940f4613ae5ed136U,
1038 0xb913179899f68584U, 0xe757dd7ec07426e5U, 0x9096ea6f3848984fU,
1039 0xb4bca50b065abe63U, 0xe1ebce4dc7f16dfbU, 0x8d3360f09cf6e4bdU,
1040 0xb080392cc4349decU, 0xdca04777f541c567U, 0x89e42caaf9491b60U,
1041 0xac5d37d5b79b6239U, 0xd77485cb25823ac7U, 0x86a8d39ef77164bcU,
1042 0xa8530886b54dbdebU, 0xd267caa862a12d66U, 0x8380dea93da4bc60U,
1043 0xa46116538d0deb78U, 0xcd795be870516656U, 0x806bd9714632dff6U,
1044 0xa086cfcd97bf97f3U, 0xc8a883c0fdaf7df0U, 0xfad2a4b13d1b5d6cU,
1045 0x9cc3a6eec6311a63U, 0xc3f490aa77bd60fcU, 0xf4f1b4d515acb93bU,
1046 0x991711052d8bf3c5U, 0xbf5cd54678eef0b6U, 0xef340a98172aace4U,
1047 0x9580869f0e7aac0eU, 0xbae0a846d2195712U, 0xe998d258869facd7U,
1048 0x91ff83775423cc06U, 0xb67f6455292cbf08U, 0xe41f3d6a7377eecaU,
1049 0x8e938662882af53eU, 0xb23867fb2a35b28dU, 0xdec681f9f4c31f31U,
1050 0x8b3c113c38f9f37eU, 0xae0b158b4738705eU, 0xd98ddaee19068c76U,
1051 0x87f8a8d4cfa417c9U, 0xa9f6d30a038d1dbcU, 0xd47487cc8470652bU,
1052 0x84c8d4dfd2c63f3bU, 0xa5fb0a17c777cf09U, 0xcf79cc9db955c2ccU,
1053 0x81ac1fe293d599bfU, 0xa21727db38cb002fU, 0xca9cf1d206fdc03bU,
1054 0xfd442e4688bd304aU, 0x9e4a9cec15763e2eU, 0xc5dd44271ad3cdbaU,
1055 0xf7549530e188c128U, 0x9a94dd3e8cf578b9U, 0xc13a148e3032d6e7U,
1056 0xf18899b1bc3f8ca1U, 0x96f5600f15a7b7e5U, 0xbcb2b812db11a5deU,
1057 0xebdf661791d60f56U, 0x936b9fcebb25c995U, 0xb84687c269ef3bfbU,
1058 0xe65829b3046b0afaU, 0x8ff71a0fe2c2e6dcU, 0xb3f4e093db73a093U,
1059 0xe0f218b8d25088b8U, 0x8c974f7383725573U, 0xafbd2350644eeacfU,
1060 0xdbac6c247d62a583U, 0x894bc396ce5da772U, 0xab9eb47c81f5114fU,
1061 0xd686619ba27255a2U, 0x8613fd0145877585U, 0xa798fc4196e952e7U,
1062 0xd17f3b51fca3a7a0U, 0x82ef85133de648c4U, 0xa3ab66580d5fdaf5U,
1063 0xcc963fee10b7d1b3U, 0xffbbcfe994e5c61fU, 0x9fd561f1fd0f9bd3U,
1064 0xc7caba6e7c5382c8U, 0xf9bd690a1b68637bU, 0x9c1661a651213e2dU,
1065 0xc31bfa0fe5698db8U, 0xf3e2f893dec3f126U, 0x986ddb5c6b3a76b7U,
1066 0xbe89523386091465U, 0xee2ba6c0678b597fU, 0x94db483840b717efU,
1067 0xba121a4650e4ddebU, 0xe896a0d7e51e1566U, 0x915e2486ef32cd60U,
1068 0xb5b5ada8aaff80b8U, 0xe3231912d5bf60e6U, 0x8df5efabc5979c8fU,
1069 0xb1736b96b6fd83b3U, 0xddd0467c64bce4a0U, 0x8aa22c0dbef60ee4U,
1070 0xad4ab7112eb3929dU, 0xd89d64d57a607744U, 0x87625f056c7c4a8bU,
1071 0xa93af6c6c79b5d2dU, 0xd389b47879823479U, 0x843610cb4bf160cbU,
1072 0xa54394fe1eedb8feU, 0xce947a3da6a9273eU, 0x811ccc668829b887U,
1073 0xa163ff802a3426a8U, 0xc9bcff6034c13052U, 0xfc2c3f3841f17c67U,
1074 0x9d9ba7832936edc0U, 0xc5029163f384a931U, 0xf64335bcf065d37dU,
1075 0x99ea0196163fa42eU, 0xc06481fb9bcf8d39U, 0xf07da27a82c37088U,
1076 0x964e858c91ba2655U, 0xbbe226efb628afeaU, 0xeadab0aba3b2dbe5U,
1077 0x92c8ae6b464fc96fU, 0xb77ada0617e3bbcbU, 0xe55990879ddcaabdU,
1078 0x8f57fa54c2a9eab6U, 0xb32df8e9f3546564U, 0xdff9772470297ebdU,
1079 0x8bfbea76c619ef36U, 0xaefae51477a06b03U, 0xdab99e59958885c4U,
1080 0x88b402f7fd75539bU, 0xaae103b5fcd2a881U, 0xd59944a37c0752a2U,
1081 0x857fcae62d8493a5U, 0xa6dfbd9fb8e5b88eU, 0xd097ad07a71f26b2U,
1082 0x825ecc24c873782fU, 0xa2f67f2dfa90563bU, 0xcbb41ef979346bcaU,
1083 0xfea126b7d78186bcU, 0x9f24b832e6b0f436U, 0xc6ede63fa05d3143U,
1084 0xf8a95fcf88747d94U, 0x9b69dbe1b548ce7cU, 0xc24452da229b021bU,
1085 0xf2d56790ab41c2a2U, 0x97c560ba6b0919a5U, 0xbdb6b8e905cb600fU,
1086 0xed246723473e3813U, 0x9436c0760c86e30bU, 0xb94470938fa89bceU,
1087 0xe7958cb87392c2c2U, 0x90bd77f3483bb9b9U, 0xb4ecd5f01a4aa828U,
1088 0xe2280b6c20dd5232U, 0x8d590723948a535fU, 0xb0af48ec79ace837U,
1089 0xdcdb1b2798182244U, 0x8a08f0f8bf0f156bU, 0xac8b2d36eed2dac5U,
1090 0xd7adf884aa879177U, 0x86ccbb52ea94baeaU, 0xa87fea27a539e9a5U,
1091 0xd29fe4b18e88640eU, 0x83a3eeeef9153e89U, 0xa48ceaaab75a8e2bU,
1092 0xcdb02555653131b6U, 0x808e17555f3ebf11U, 0xa0b19d2ab70e6ed6U,
1093 0xc8de047564d20a8bU, 0xfb158592be068d2eU, 0x9ced737bb6c4183dU,
1094 0xc428d05aa4751e4cU, 0xf53304714d9265dfU, 0x993fe2c6d07b7fabU,
1095 0xbf8fdb78849a5f96U, 0xef73d256a5c0f77cU, 0x95a8637627989aadU,
1096 0xbb127c53b17ec159U, 0xe9d71b689dde71afU, 0x9226712162ab070dU,
1097 0xb6b00d69bb55c8d1U, 0xe45c10c42a2b3b05U, 0x8eb98a7a9a5b04e3U,
1098 0xb267ed1940f1c61cU, 0xdf01e85f912e37a3U, 0x8b61313bbabce2c6U,
1099 0xae397d8aa96c1b77U, 0xd9c7dced53c72255U, 0x881cea14545c7575U,
1100 0xaa242499697392d2U, 0xd4ad2dbfc3d07787U, 0x84ec3c97da624ab4U,
1101 0xa6274bbdd0fadd61U, 0xcfb11ead453994baU, 0x81ceb32c4b43fcf4U,
1102 0xa2425ff75e14fc31U, 0xcad2f7f5359a3b3eU, 0xfd87b5f28300ca0dU,
1103 0x9e74d1b791e07e48U, 0xc612062576589ddaU, 0xf79687aed3eec551U,
1104 0x9abe14cd44753b52U, 0xc16d9a0095928a27U, 0xf1c90080baf72cb1U,
1105 0x971da05074da7beeU, 0xbce5086492111aeaU, 0xec1e4a7db69561a5U,
1106 0x9392ee8e921d5d07U, 0xb877aa3236a4b449U, 0xe69594bec44de15bU,
1107 0x901d7cf73ab0acd9U, 0xb424dc35095cd80fU, 0xe12e13424bb40e13U,
1108 0x8cbccc096f5088cbU, 0xafebff0bcb24aafeU, 0xdbe6fecebdedd5beU,
1109 0x89705f4136b4a597U, 0xabcc77118461cefcU, 0xd6bf94d5e57a42bcU,
1110 0x8637bd05af6c69b5U, 0xa7c5ac471b478423U, 0xd1b71758e219652bU,
1111 0x83126e978d4fdf3bU, 0xa3d70a3d70a3d70aU, 0xccccccccccccccccU,
1112 0x8000000000000000U, 0xa000000000000000U, 0xc800000000000000U,
1113 0xfa00000000000000U, 0x9c40000000000000U, 0xc350000000000000U,
1114 0xf424000000000000U, 0x9896800000000000U, 0xbebc200000000000U,
1115 0xee6b280000000000U, 0x9502f90000000000U, 0xba43b74000000000U,
1116 0xe8d4a51000000000U, 0x9184e72a00000000U, 0xb5e620f480000000U,
1117 0xe35fa931a0000000U, 0x8e1bc9bf04000000U, 0xb1a2bc2ec5000000U,
1118 0xde0b6b3a76400000U, 0x8ac7230489e80000U, 0xad78ebc5ac620000U,
1119 0xd8d726b7177a8000U, 0x878678326eac9000U, 0xa968163f0a57b400U,
1120 0xd3c21bcecceda100U, 0x84595161401484a0U, 0xa56fa5b99019a5c8U,
1121 0xcecb8f27f4200f3aU, 0x813f3978f8940984U, 0xa18f07d736b90be5U,
1122 0xc9f2c9cd04674edeU, 0xfc6f7c4045812296U, 0x9dc5ada82b70b59dU,
1123 0xc5371912364ce305U, 0xf684df56c3e01bc6U, 0x9a130b963a6c115cU,
1124 0xc097ce7bc90715b3U, 0xf0bdc21abb48db20U, 0x96769950b50d88f4U,
1125 0xbc143fa4e250eb31U, 0xeb194f8e1ae525fdU, 0x92efd1b8d0cf37beU,
1126 0xb7abc627050305adU, 0xe596b7b0c643c719U, 0x8f7e32ce7bea5c6fU,
1127 0xb35dbf821ae4f38bU, 0xe0352f62a19e306eU, 0x8c213d9da502de45U,
1128 0xaf298d050e4395d6U, 0xdaf3f04651d47b4cU, 0x88d8762bf324cd0fU,
1129 0xab0e93b6efee0053U, 0xd5d238a4abe98068U, 0x85a36366eb71f041U,
1130 0xa70c3c40a64e6c51U, 0xd0cf4b50cfe20765U, 0x82818f1281ed449fU,
1131 0xa321f2d7226895c7U, 0xcbea6f8ceb02bb39U, 0xfee50b7025c36a08U,
1132 0x9f4f2726179a2245U, 0xc722f0ef9d80aad6U, 0xf8ebad2b84e0d58bU,
1133 0x9b934c3b330c8577U, 0xc2781f49ffcfa6d5U, 0xf316271c7fc3908aU,
1134 0x97edd871cfda3a56U, 0xbde94e8e43d0c8ecU, 0xed63a231d4c4fb27U,
1135 0x945e455f24fb1cf8U, 0xb975d6b6ee39e436U, 0xe7d34c64a9c85d44U,
1136 0x90e40fbeea1d3a4aU, 0xb51d13aea4a488ddU, 0xe264589a4dcdab14U,
1137 0x8d7eb76070a08aecU, 0xb0de65388cc8ada8U, 0xdd15fe86affad912U,
1138 0x8a2dbf142dfcc7abU, 0xacb92ed9397bf996U, 0xd7e77a8f87daf7fbU,
1139 0x86f0ac99b4e8dafdU, 0xa8acd7c0222311bcU, 0xd2d80db02aabd62bU,
1140 0x83c7088e1aab65dbU, 0xa4b8cab1a1563f52U, 0xcde6fd5e09abcf26U,
1141 0x80b05e5ac60b6178U, 0xa0dc75f1778e39d6U, 0xc913936dd571c84cU,
1142 0xfb5878494ace3a5fU, 0x9d174b2dcec0e47bU, 0xc45d1df942711d9aU,
1143 0xf5746577930d6500U, 0x9968bf6abbe85f20U, 0xbfc2ef456ae276e8U,
1144 0xefb3ab16c59b14a2U, 0x95d04aee3b80ece5U, 0xbb445da9ca61281fU,
1145 0xea1575143cf97226U, 0x924d692ca61be758U, 0xb6e0c377cfa2e12eU,
1146 0xe498f455c38b997aU, 0x8edf98b59a373fecU, 0xb2977ee300c50fe7U,
1147 0xdf3d5e9bc0f653e1U, 0x8b865b215899f46cU, 0xae67f1e9aec07187U,
1148 0xda01ee641a708de9U, 0x884134fe908658b2U, 0xaa51823e34a7eedeU,
1149 0xd4e5e2cdc1d1ea96U, 0x850fadc09923329eU, 0xa6539930bf6bff45U,
1150 0xcfe87f7cef46ff16U, 0x81f14fae158c5f6eU, 0xa26da3999aef7749U,
1151 0xcb090c8001ab551cU, 0xfdcb4fa002162a63U, 0x9e9f11c4014dda7eU,
1152 0xc646d63501a1511dU, 0xf7d88bc24209a565U, 0x9ae757596946075fU,
1153 0xc1a12d2fc3978937U, 0xf209787bb47d6b84U, 0x9745eb4d50ce6332U,
1154 0xbd176620a501fbffU, 0xec5d3fa8ce427affU, 0x93ba47c980e98cdfU,
1155 0xb8a8d9bbe123f017U, 0xe6d3102ad96cec1dU, 0x9043ea1ac7e41392U,
1156 0xb454e4a179dd1877U, 0xe16a1dc9d8545e94U, 0x8ce2529e2734bb1dU,
1157 0xb01ae745b101e9e4U, 0xdc21a1171d42645dU, 0x899504ae72497ebaU,
1158 0xabfa45da0edbde69U, 0xd6f8d7509292d603U, 0x865b86925b9bc5c2U,
1159 0xa7f26836f282b732U, 0xd1ef0244af2364ffU, 0x8335616aed761f1fU,
1160 0xa402b9c5a8d3a6e7U, 0xcd036837130890a1U, 0x802221226be55a64U,
1161 0xa02aa96b06deb0fdU, 0xc83553c5c8965d3dU, 0xfa42a8b73abbf48cU,
1162 0x9c69a97284b578d7U, 0xc38413cf25e2d70dU, 0xf46518c2ef5b8cd1U,
1163 0x98bf2f79d5993802U, 0xbeeefb584aff8603U, 0xeeaaba2e5dbf6784U,
1164 0x952ab45cfa97a0b2U, 0xba756174393d88dfU, 0xe912b9d1478ceb17U,
1165 0x91abb422ccb812eeU, 0xb616a12b7fe617aaU, 0xe39c49765fdf9d94U,
1166 0x8e41ade9fbebc27dU, 0xb1d219647ae6b31cU, 0xde469fbd99a05fe3U,
1167 0x8aec23d680043beeU, 0xada72ccc20054ae9U, 0xd910f7ff28069da4U,
1168 0x87aa9aff79042286U, 0xa99541bf57452b28U, 0xd3fa922f2d1675f2U,
1169 0x847c9b5d7c2e09b7U, 0xa59bc234db398c25U, 0xcf02b2c21207ef2eU,
1170 0x8161afb94b44f57dU, 0xa1ba1ba79e1632dcU, 0xca28a291859bbf93U,
1171 0xfcb2cb35e702af78U, 0x9defbf01b061adabU, 0xc56baec21c7a1916U,
1172 0xf6c69a72a3989f5bU, 0x9a3c2087a63f6399U, 0xc0cb28a98fcf3c7fU,
1173 0xf0fdf2d3f3c30b9fU, 0x969eb7c47859e743U, 0xbc4665b596706114U,
1174 0xeb57ff22fc0c7959U, 0x9316ff75dd87cbd8U, 0xb7dcbf5354e9beceU,
1175 0xe5d3ef282a242e81U, 0x8fa475791a569d10U, 0xb38d92d760ec4455U,
1176 0xe070f78d3927556aU, 0x8c469ab843b89562U, 0xaf58416654a6babbU,
1177 0xdb2e51bfe9d0696aU, 0x88fcf317f22241e2U, 0xab3c2fddeeaad25aU,
1178 0xd60b3bd56a5586f1U, 0x85c7056562757456U, 0xa738c6bebb12d16cU,
1179 0xd106f86e69d785c7U, 0x82a45b450226b39cU, 0xa34d721642b06084U,
1180 0xcc20ce9bd35c78a5U, 0xff290242c83396ceU, 0x9f79a169bd203e41U,
1181 0xc75809c42c684dd1U, 0xf92e0c3537826145U, 0x9bbcc7a142b17ccbU,
1182 0xc2abf989935ddbfeU, 0xf356f7ebf83552feU, 0x98165af37b2153deU,
1183 0xbe1bf1b059e9a8d6U, 0xeda2ee1c7064130cU, 0x9485d4d1c63e8be7U,
1184 0xb9a74a0637ce2ee1U, 0xe8111c87c5c1ba99U, 0x910ab1d4db9914a0U,
1185 0xb54d5e4a127f59c8U, 0xe2a0b5dc971f303aU, 0x8da471a9de737e24U,
1186 0xb10d8e1456105dadU, 0xdd50f1996b947518U, 0x8a5296ffe33cc92fU,
1187 0xace73cbfdc0bfb7bU, 0xd8210befd30efa5aU, 0x8714a775e3e95c78U,
1188 0xa8d9d1535ce3b396U, 0xd31045a8341ca07cU, 0x83ea2b892091e44dU,
1189 0xa4e4b66b68b65d60U, 0xce1de40642e3f4b9U, 0x80d2ae83e9ce78f3U,
1190 0xa1075a24e4421730U, 0xc94930ae1d529cfcU, 0xfb9b7cd9a4a7443cU,
1191 0x9d412e0806e88aa5U, 0xc491798a08a2ad4eU, 0xf5b5d7ec8acb58a2U,
1192 0x9991a6f3d6bf1765U, 0xbff610b0cc6edd3fU, 0xeff394dcff8a948eU,
1193 0x95f83d0a1fb69cd9U, 0xbb764c4ca7a4440fU, 0xea53df5fd18d5513U,
1194 0x92746b9be2f8552cU, 0xb7118682dbb66a77U, 0xe4d5e82392a40515U,
1195 0x8f05b1163ba6832dU, 0xb2c71d5bca9023f8U, 0xdf78e4b2bd342cf6U,
1196 0x8bab8eefb6409c1aU, 0xae9672aba3d0c320U, 0xda3c0f568cc4f3e8U,
1197 0x8865899617fb1871U, 0xaa7eebfb9df9de8dU, 0xd51ea6fa85785631U,
1198 0x8533285c936b35deU, 0xa67ff273b8460356U, 0xd01fef10a657842cU,
1199 0x8213f56a67f6b29bU, 0xa298f2c501f45f42U, 0xcb3f2f7642717713U,
1200 0xfe0efb53d30dd4d7U, 0x9ec95d1463e8a506U, 0xc67bb4597ce2ce48U,
1201 0xf81aa16fdc1b81daU, 0x9b10a4e5e9913128U, 0xc1d4ce1f63f57d72U,
1202 0xf24a01a73cf2dccfU, 0x976e41088617ca01U, 0xbd49d14aa79dbc82U,
1203 0xec9c459d51852ba2U, 0x93e1ab8252f33b45U, 0xb8da1662e7b00a17U,
1204 0xe7109bfba19c0c9dU, 0x906a617d450187e2U, 0xb484f9dc9641e9daU,
1205 0xe1a63853bbd26451U, 0x8d07e33455637eb2U, 0xb049dc016abc5e5fU,
1206 0xdc5c5301c56b75f7U, 0x89b9b3e11b6329baU, 0xac2820d9623bf429U,
1207 0xd732290fbacaf133U, 0x867f59a9d4bed6c0U, 0xa81f301449ee8c70U,
1208 0xd226fc195c6a2f8cU, 0x83585d8fd9c25db7U, 0xa42e74f3d032f525U,
1209 0xcd3a1230c43fb26fU, 0x80444b5e7aa7cf85U, 0xa0555e361951c366U,
1210 0xc86ab5c39fa63440U, 0xfa856334878fc150U, 0x9c935e00d4b9d8d2U,
1211 0xc3b8358109e84f07U, 0xf4a642e14c6262c8U, 0x98e7e9cccfbd7dbdU,
1212 0xbf21e44003acdd2cU, 0xeeea5d5004981478U, 0x95527a5202df0ccbU,
1213 0xbaa718e68396cffdU, 0xe950df20247c83fdU, 0x91d28b7416cdd27eU,
1214 0xb6472e511c81471dU, 0xe3d8f9e563a198e5U, 0x8e679c2f5e44ff8fU,
1215 };
1216
1217 const uint64_t kPower10MantissaLowTable[] = {
1218 0x113faa2906a13b3fU, 0x4ac7ca59a424c507U, 0x5d79bcf00d2df649U,
1219 0xf4d82c2c107973dcU, 0x79071b9b8a4be869U, 0x9748e2826cdee284U,
1220 0xfd1b1b2308169b25U, 0xfe30f0f5e50e20f7U, 0xbdbd2d335e51a935U,
1221 0xad2c788035e61382U, 0x4c3bcb5021afcc31U, 0xdf4abe242a1bbf3dU,
1222 0xd71d6dad34a2af0dU, 0x8672648c40e5ad68U, 0x680efdaf511f18c2U,
1223 0x0212bd1b2566def2U, 0x014bb630f7604b57U, 0x419ea3bd35385e2dU,
1224 0x52064cac828675b9U, 0x7343efebd1940993U, 0x1014ebe6c5f90bf8U,
1225 0xd41a26e077774ef6U, 0x8920b098955522b4U, 0x55b46e5f5d5535b0U,
1226 0xeb2189f734aa831dU, 0xa5e9ec7501d523e4U, 0x47b233c92125366eU,
1227 0x999ec0bb696e840aU, 0xc00670ea43ca250dU, 0x380406926a5e5728U,
1228 0xc605083704f5ecf2U, 0xf7864a44c633682eU, 0x7ab3ee6afbe0211dU,
1229 0x5960ea05bad82964U, 0x6fb92487298e33bdU, 0xa5d3b6d479f8e056U,
1230 0x8f48a4899877186cU, 0x331acdabfe94de87U, 0x9ff0c08b7f1d0b14U,
1231 0x07ecf0ae5ee44dd9U, 0xc9e82cd9f69d6150U, 0xbe311c083a225cd2U,
1232 0x6dbd630a48aaf406U, 0x092cbbccdad5b108U, 0x25bbf56008c58ea5U,
1233 0xaf2af2b80af6f24eU, 0x1af5af660db4aee1U, 0x50d98d9fc890ed4dU,
1234 0xe50ff107bab528a0U, 0x1e53ed49a96272c8U, 0x25e8e89c13bb0f7aU,
1235 0x77b191618c54e9acU, 0xd59df5b9ef6a2417U, 0x4b0573286b44ad1dU,
1236 0x4ee367f9430aec32U, 0x229c41f793cda73fU, 0x6b43527578c1110fU,
1237 0x830a13896b78aaa9U, 0x23cc986bc656d553U, 0x2cbfbe86b7ec8aa8U,
1238 0x7bf7d71432f3d6a9U, 0xdaf5ccd93fb0cc53U, 0xd1b3400f8f9cff68U,
1239 0x23100809b9c21fa1U, 0xabd40a0c2832a78aU, 0x16c90c8f323f516cU,
1240 0xae3da7d97f6792e3U, 0x99cd11cfdf41779cU, 0x40405643d711d583U,
1241 0x482835ea666b2572U, 0xda3243650005eecfU, 0x90bed43e40076a82U,
1242 0x5a7744a6e804a291U, 0x711515d0a205cb36U, 0x0d5a5b44ca873e03U,
1243 0xe858790afe9486c2U, 0x626e974dbe39a872U, 0xfb0a3d212dc8128fU,
1244 0x7ce66634bc9d0b99U, 0x1c1fffc1ebc44e80U, 0xa327ffb266b56220U,
1245 0x4bf1ff9f0062baa8U, 0x6f773fc3603db4a9U, 0xcb550fb4384d21d3U,
1246 0x7e2a53a146606a48U, 0x2eda7444cbfc426dU, 0xfa911155fefb5308U,
1247 0x793555ab7eba27caU, 0x4bc1558b2f3458deU, 0x9eb1aaedfb016f16U,
1248 0x465e15a979c1cadcU, 0x0bfacd89ec191ec9U, 0xcef980ec671f667bU,
1249 0x82b7e12780e7401aU, 0xd1b2ecb8b0908810U, 0x861fa7e6dcb4aa15U,
1250 0x67a791e093e1d49aU, 0xe0c8bb2c5c6d24e0U, 0x58fae9f773886e18U,
1251 0xaf39a475506a899eU, 0x6d8406c952429603U, 0xc8e5087ba6d33b83U,
1252 0xfb1e4a9a90880a64U, 0x5cf2eea09a55067fU, 0xf42faa48c0ea481eU,
1253 0xf13b94daf124da26U, 0x76c53d08d6b70858U, 0x54768c4b0c64ca6eU,
1254 0xa9942f5dcf7dfd09U, 0xd3f93b35435d7c4cU, 0xc47bc5014a1a6dafU,
1255 0x359ab6419ca1091bU, 0xc30163d203c94b62U, 0x79e0de63425dcf1dU,
1256 0x985915fc12f542e4U, 0x3e6f5b7b17b2939dU, 0xa705992ceecf9c42U,
1257 0x50c6ff782a838353U, 0xa4f8bf5635246428U, 0x871b7795e136be99U,
1258 0x28e2557b59846e3fU, 0x331aeada2fe589cfU, 0x3ff0d2c85def7621U,
1259 0x0fed077a756b53a9U, 0xd3e8495912c62894U, 0x64712dd7abbbd95cU,
1260 0xbd8d794d96aacfb3U, 0xecf0d7a0fc5583a0U, 0xf41686c49db57244U,
1261 0x311c2875c522ced5U, 0x7d633293366b828bU, 0xae5dff9c02033197U,
1262 0xd9f57f830283fdfcU, 0xd072df63c324fd7bU, 0x4247cb9e59f71e6dU,
1263 0x52d9be85f074e608U, 0x67902e276c921f8bU, 0x00ba1cd8a3db53b6U,
1264 0x80e8a40eccd228a4U, 0x6122cd128006b2cdU, 0x796b805720085f81U,
1265 0xcbe3303674053bb0U, 0xbedbfc4411068a9cU, 0xee92fb5515482d44U,
1266 0x751bdd152d4d1c4aU, 0xd262d45a78a0635dU, 0x86fb897116c87c34U,
1267 0xd45d35e6ae3d4da0U, 0x8974836059cca109U, 0x2bd1a438703fc94bU,
1268 0x7b6306a34627ddcfU, 0x1a3bc84c17b1d542U, 0x20caba5f1d9e4a93U,
1269 0x547eb47b7282ee9cU, 0xe99e619a4f23aa43U, 0x6405fa00e2ec94d4U,
1270 0xde83bc408dd3dd04U, 0x9624ab50b148d445U, 0x3badd624dd9b0957U,
1271 0xe54ca5d70a80e5d6U, 0x5e9fcf4ccd211f4cU, 0x7647c3200069671fU,
1272 0x29ecd9f40041e073U, 0xf468107100525890U, 0x7182148d4066eeb4U,
1273 0xc6f14cd848405530U, 0xb8ada00e5a506a7cU, 0xa6d90811f0e4851cU,
1274 0x908f4a166d1da663U, 0x9a598e4e043287feU, 0x40eff1e1853f29fdU,
1275 0xd12bee59e68ef47cU, 0x82bb74f8301958ceU, 0xe36a52363c1faf01U,
1276 0xdc44e6c3cb279ac1U, 0x29ab103a5ef8c0b9U, 0x7415d448f6b6f0e7U,
1277 0x111b495b3464ad21U, 0xcab10dd900beec34U, 0x3d5d514f40eea742U,
1278 0x0cb4a5a3112a5112U, 0x47f0e785eaba72abU, 0x59ed216765690f56U,
1279 0x306869c13ec3532cU, 0x1e414218c73a13fbU, 0xe5d1929ef90898faU,
1280 0xdf45f746b74abf39U, 0x6b8bba8c328eb783U, 0x066ea92f3f326564U,
1281 0xc80a537b0efefebdU, 0xbd06742ce95f5f36U, 0x2c48113823b73704U,
1282 0xf75a15862ca504c5U, 0x9a984d73dbe722fbU, 0xc13e60d0d2e0ebbaU,
1283 0x318df905079926a8U, 0xfdf17746497f7052U, 0xfeb6ea8bedefa633U,
1284 0xfe64a52ee96b8fc0U, 0x3dfdce7aa3c673b0U, 0x06bea10ca65c084eU,
1285 0x486e494fcff30a62U, 0x5a89dba3c3efccfaU, 0xf89629465a75e01cU,
1286 0xf6bbb397f1135823U, 0x746aa07ded582e2cU, 0xa8c2a44eb4571cdcU,
1287 0x92f34d62616ce413U, 0x77b020baf9c81d17U, 0x0ace1474dc1d122eU,
1288 0x0d819992132456baU, 0x10e1fff697ed6c69U, 0xca8d3ffa1ef463c1U,
1289 0xbd308ff8a6b17cb2U, 0xac7cb3f6d05ddbdeU, 0x6bcdf07a423aa96bU,
1290 0x86c16c98d2c953c6U, 0xe871c7bf077ba8b7U, 0x11471cd764ad4972U,
1291 0xd598e40d3dd89bcfU, 0x4aff1d108d4ec2c3U, 0xcedf722a585139baU,
1292 0xc2974eb4ee658828U, 0x733d226229feea32U, 0x0806357d5a3f525fU,
1293 0xca07c2dcb0cf26f7U, 0xfc89b393dd02f0b5U, 0xbbac2078d443ace2U,
1294 0xd54b944b84aa4c0dU, 0x0a9e795e65d4df11U, 0x4d4617b5ff4a16d5U,
1295 0x504bced1bf8e4e45U, 0xe45ec2862f71e1d6U, 0x5d767327bb4e5a4cU,
1296 0x3a6a07f8d510f86fU, 0x890489f70a55368bU, 0x2b45ac74ccea842eU,
1297 0x3b0b8bc90012929dU, 0x09ce6ebb40173744U, 0xcc420a6a101d0515U,
1298 0x9fa946824a12232dU, 0x47939822dc96abf9U, 0x59787e2b93bc56f7U,
1299 0x57eb4edb3c55b65aU, 0xede622920b6b23f1U, 0xe95fab368e45ecedU,
1300 0x11dbcb0218ebb414U, 0xd652bdc29f26a119U, 0x4be76d3346f0495fU,
1301 0x6f70a4400c562ddbU, 0xcb4ccd500f6bb952U, 0x7e2000a41346a7a7U,
1302 0x8ed400668c0c28c8U, 0x728900802f0f32faU, 0x4f2b40a03ad2ffb9U,
1303 0xe2f610c84987bfa8U, 0x0dd9ca7d2df4d7c9U, 0x91503d1c79720dbbU,
1304 0x75a44c6397ce912aU, 0xc986afbe3ee11abaU, 0xfbe85badce996168U,
1305 0xfae27299423fb9c3U, 0xdccd879fc967d41aU, 0x5400e987bbc1c920U,
1306 0x290123e9aab23b68U, 0xf9a0b6720aaf6521U, 0xf808e40e8d5b3e69U,
1307 0xb60b1d1230b20e04U, 0xb1c6f22b5e6f48c2U, 0x1e38aeb6360b1af3U,
1308 0x25c6da63c38de1b0U, 0x579c487e5a38ad0eU, 0x2d835a9df0c6d851U,
1309 0xf8e431456cf88e65U, 0x1b8e9ecb641b58ffU, 0xe272467e3d222f3fU,
1310 0x5b0ed81dcc6abb0fU, 0x98e947129fc2b4e9U, 0x3f2398d747b36224U,
1311 0x8eec7f0d19a03aadU, 0x1953cf68300424acU, 0x5fa8c3423c052dd7U,
1312 0x3792f412cb06794dU, 0xe2bbd88bbee40bd0U, 0x5b6aceaeae9d0ec4U,
1313 0xf245825a5a445275U, 0xeed6e2f0f0d56712U, 0x55464dd69685606bU,
1314 0xaa97e14c3c26b886U, 0xd53dd99f4b3066a8U, 0xe546a8038efe4029U,
1315 0xde98520472bdd033U, 0x963e66858f6d4440U, 0xdde7001379a44aa8U,
1316 0x5560c018580d5d52U, 0xaab8f01e6e10b4a6U, 0xcab3961304ca70e8U,
1317 0x3d607b97c5fd0d22U, 0x8cb89a7db77c506aU, 0x77f3608e92adb242U,
1318 0x55f038b237591ed3U, 0x6b6c46dec52f6688U, 0x2323ac4b3b3da015U,
1319 0xabec975e0a0d081aU, 0x96e7bd358c904a21U, 0x7e50d64177da2e54U,
1320 0xdde50bd1d5d0b9e9U, 0x955e4ec64b44e864U, 0xbd5af13bef0b113eU,
1321 0xecb1ad8aeacdd58eU, 0x67de18eda5814af2U, 0x80eacf948770ced7U,
1322 0xa1258379a94d028dU, 0x096ee45813a04330U, 0x8bca9d6e188853fcU,
1323 0x775ea264cf55347dU, 0x95364afe032a819dU, 0x3a83ddbd83f52204U,
1324 0xc4926a9672793542U, 0x75b7053c0f178293U, 0x5324c68b12dd6338U,
1325 0xd3f6fc16ebca5e03U, 0x88f4bb1ca6bcf584U, 0x2b31e9e3d06c32e5U,
1326 0x3aff322e62439fcfU, 0x09befeb9fad487c2U, 0x4c2ebe687989a9b3U,
1327 0x0f9d37014bf60a10U, 0x538484c19ef38c94U, 0x2865a5f206b06fb9U,
1328 0xf93f87b7442e45d3U, 0xf78f69a51539d748U, 0xb573440e5a884d1bU,
1329 0x31680a88f8953030U, 0xfdc20d2b36ba7c3dU, 0x3d32907604691b4cU,
1330 0xa63f9a49c2c1b10fU, 0x0fcf80dc33721d53U, 0xd3c36113404ea4a8U,
1331 0x645a1cac083126e9U, 0x3d70a3d70a3d70a3U, 0xccccccccccccccccU,
1332 0x0000000000000000U, 0x0000000000000000U, 0x0000000000000000U,
1333 0x0000000000000000U, 0x0000000000000000U, 0x0000000000000000U,
1334 0x0000000000000000U, 0x0000000000000000U, 0x0000000000000000U,
1335 0x0000000000000000U, 0x0000000000000000U, 0x0000000000000000U,
1336 0x0000000000000000U, 0x0000000000000000U, 0x0000000000000000U,
1337 0x0000000000000000U, 0x0000000000000000U, 0x0000000000000000U,
1338 0x0000000000000000U, 0x0000000000000000U, 0x0000000000000000U,
1339 0x0000000000000000U, 0x0000000000000000U, 0x0000000000000000U,
1340 0x0000000000000000U, 0x0000000000000000U, 0x0000000000000000U,
1341 0x0000000000000000U, 0x4000000000000000U, 0x5000000000000000U,
1342 0xa400000000000000U, 0x4d00000000000000U, 0xf020000000000000U,
1343 0x6c28000000000000U, 0xc732000000000000U, 0x3c7f400000000000U,
1344 0x4b9f100000000000U, 0x1e86d40000000000U, 0x1314448000000000U,
1345 0x17d955a000000000U, 0x5dcfab0800000000U, 0x5aa1cae500000000U,
1346 0xf14a3d9e40000000U, 0x6d9ccd05d0000000U, 0xe4820023a2000000U,
1347 0xdda2802c8a800000U, 0xd50b2037ad200000U, 0x4526f422cc340000U,
1348 0x9670b12b7f410000U, 0x3c0cdd765f114000U, 0xa5880a69fb6ac800U,
1349 0x8eea0d047a457a00U, 0x72a4904598d6d880U, 0x47a6da2b7f864750U,
1350 0x999090b65f67d924U, 0xfff4b4e3f741cf6dU, 0xbff8f10e7a8921a4U,
1351 0xaff72d52192b6a0dU, 0x9bf4f8a69f764490U, 0x02f236d04753d5b4U,
1352 0x01d762422c946590U, 0x424d3ad2b7b97ef5U, 0xd2e0898765a7deb2U,
1353 0x63cc55f49f88eb2fU, 0x3cbf6b71c76b25fbU, 0x8bef464e3945ef7aU,
1354 0x97758bf0e3cbb5acU, 0x3d52eeed1cbea317U, 0x4ca7aaa863ee4bddU,
1355 0x8fe8caa93e74ef6aU, 0xb3e2fd538e122b44U, 0x60dbbca87196b616U,
1356 0xbc8955e946fe31cdU, 0x6babab6398bdbe41U, 0xc696963c7eed2dd1U,
1357 0xfc1e1de5cf543ca2U, 0x3b25a55f43294bcbU, 0x49ef0eb713f39ebeU,
1358 0x6e3569326c784337U, 0x49c2c37f07965404U, 0xdc33745ec97be906U,
1359 0x69a028bb3ded71a3U, 0xc40832ea0d68ce0cU, 0xf50a3fa490c30190U,
1360 0x792667c6da79e0faU, 0x577001b891185938U, 0xed4c0226b55e6f86U,
1361 0x544f8158315b05b4U, 0x696361ae3db1c721U, 0x03bc3a19cd1e38e9U,
1362 0x04ab48a04065c723U, 0x62eb0d64283f9c76U, 0x3ba5d0bd324f8394U,
1363 0xca8f44ec7ee36479U, 0x7e998b13cf4e1ecbU, 0x9e3fedd8c321a67eU,
1364 0xc5cfe94ef3ea101eU, 0xbba1f1d158724a12U, 0x2a8a6e45ae8edc97U,
1365 0xf52d09d71a3293bdU, 0x593c2626705f9c56U, 0x6f8b2fb00c77836cU,
1366 0x0b6dfb9c0f956447U, 0x4724bd4189bd5eacU, 0x58edec91ec2cb657U,
1367 0x2f2967b66737e3edU, 0xbd79e0d20082ee74U, 0xecd8590680a3aa11U,
1368 0xe80e6f4820cc9495U, 0x3109058d147fdcddU, 0xbd4b46f0599fd415U,
1369 0x6c9e18ac7007c91aU, 0x03e2cf6bc604ddb0U, 0x84db8346b786151cU,
1370 0xe612641865679a63U, 0x4fcb7e8f3f60c07eU, 0xe3be5e330f38f09dU,
1371 0x5cadf5bfd3072cc5U, 0x73d9732fc7c8f7f6U, 0x2867e7fddcdd9afaU,
1372 0xb281e1fd541501b8U, 0x1f225a7ca91a4226U, 0x3375788de9b06958U,
1373 0x0052d6b1641c83aeU, 0xc0678c5dbd23a49aU, 0xf840b7ba963646e0U,
1374 0xb650e5a93bc3d898U, 0xa3e51f138ab4cebeU, 0xc66f336c36b10137U,
1375 0xb80b0047445d4184U, 0xa60dc059157491e5U, 0x87c89837ad68db2fU,
1376 0x29babe4598c311fbU, 0xf4296dd6fef3d67aU, 0x1899e4a65f58660cU,
1377 0x5ec05dcff72e7f8fU, 0x76707543f4fa1f73U, 0x6a06494a791c53a8U,
1378 0x0487db9d17636892U, 0x45a9d2845d3c42b6U, 0x0b8a2392ba45a9b2U,
1379 0x8e6cac7768d7141eU, 0x3207d795430cd926U, 0x7f44e6bd49e807b8U,
1380 0x5f16206c9c6209a6U, 0x36dba887c37a8c0fU, 0xc2494954da2c9789U,
1381 0xf2db9baa10b7bd6cU, 0x6f92829494e5acc7U, 0xcb772339ba1f17f9U,
1382 0xff2a760414536efbU, 0xfef5138519684abaU, 0x7eb258665fc25d69U,
1383 0xef2f773ffbd97a61U, 0xaafb550ffacfd8faU, 0x95ba2a53f983cf38U,
1384 0xdd945a747bf26183U, 0x94f971119aeef9e4U, 0x7a37cd5601aab85dU,
1385 0xac62e055c10ab33aU, 0x577b986b314d6009U, 0xed5a7e85fda0b80bU,
1386 0x14588f13be847307U, 0x596eb2d8ae258fc8U, 0x6fca5f8ed9aef3bbU,
1387 0x25de7bb9480d5854U, 0xaf561aa79a10ae6aU, 0x1b2ba1518094da04U,
1388 0x90fb44d2f05d0842U, 0x353a1607ac744a53U, 0x42889b8997915ce8U,
1389 0x69956135febada11U, 0x43fab9837e699095U, 0x94f967e45e03f4bbU,
1390 0x1d1be0eebac278f5U, 0x6462d92a69731732U, 0x7d7b8f7503cfdcfeU,
1391 0x5cda735244c3d43eU, 0x3a0888136afa64a7U, 0x088aaa1845b8fdd0U,
1392 0x8aad549e57273d45U, 0x36ac54e2f678864bU, 0x84576a1bb416a7ddU,
1393 0x656d44a2a11c51d5U, 0x9f644ae5a4b1b325U, 0x873d5d9f0dde1feeU,
1394 0xa90cb506d155a7eaU, 0x09a7f12442d588f2U, 0x0c11ed6d538aeb2fU,
1395 0x8f1668c8a86da5faU, 0xf96e017d694487bcU, 0x37c981dcc395a9acU,
1396 0x85bbe253f47b1417U, 0x93956d7478ccec8eU, 0x387ac8d1970027b2U,
1397 0x06997b05fcc0319eU, 0x441fece3bdf81f03U, 0xd527e81cad7626c3U,
1398 0x8a71e223d8d3b074U, 0xf6872d5667844e49U, 0xb428f8ac016561dbU,
1399 0xe13336d701beba52U, 0xecc0024661173473U, 0x27f002d7f95d0190U,
1400 0x31ec038df7b441f4U, 0x7e67047175a15271U, 0x0f0062c6e984d386U,
1401 0x52c07b78a3e60868U, 0xa7709a56ccdf8a82U, 0x88a66076400bb691U,
1402 0x6acff893d00ea435U, 0x0583f6b8c4124d43U, 0xc3727a337a8b704aU,
1403 0x744f18c0592e4c5cU, 0x1162def06f79df73U, 0x8addcb5645ac2ba8U,
1404 0x6d953e2bd7173692U, 0xc8fa8db6ccdd0437U, 0x1d9c9892400a22a2U,
1405 0x2503beb6d00cab4bU, 0x2e44ae64840fd61dU, 0x5ceaecfed289e5d2U,
1406 0x7425a83e872c5f47U, 0xd12f124e28f77719U, 0x82bd6b70d99aaa6fU,
1407 0x636cc64d1001550bU, 0x3c47f7e05401aa4eU, 0x65acfaec34810a71U,
1408 0x7f1839a741a14d0dU, 0x1ede48111209a050U, 0x934aed0aab460432U,
1409 0xf81da84d5617853fU, 0x36251260ab9d668eU, 0xc1d72b7c6b426019U,
1410 0xb24cf65b8612f81fU, 0xdee033f26797b627U, 0x169840ef017da3b1U,
1411 0x8e1f289560ee864eU, 0xf1a6f2bab92a27e2U, 0xae10af696774b1dbU,
1412 0xacca6da1e0a8ef29U, 0x17fd090a58d32af3U, 0xddfc4b4cef07f5b0U,
1413 0x4abdaf101564f98eU, 0x9d6d1ad41abe37f1U, 0x84c86189216dc5edU,
1414 0x32fd3cf5b4e49bb4U, 0x3fbc8c33221dc2a1U, 0x0fabaf3feaa5334aU,
1415 0x29cb4d87f2a7400eU, 0x743e20e9ef511012U, 0x914da9246b255416U,
1416 0x1ad089b6c2f7548eU, 0xa184ac2473b529b1U, 0xc9e5d72d90a2741eU,
1417 0x7e2fa67c7a658892U, 0xddbb901b98feeab7U, 0x552a74227f3ea565U,
1418 0xd53a88958f87275fU, 0x8a892abaf368f137U, 0x2d2b7569b0432d85U,
1419 0x9c3b29620e29fc73U, 0x8349f3ba91b47b8fU, 0x241c70a936219a73U,
1420 0xed238cd383aa0110U, 0xf4363804324a40aaU, 0xb143c6053edcd0d5U,
1421 0xdd94b7868e94050aU, 0xca7cf2b4191c8326U, 0xfd1c2f611f63a3f0U,
1422 0xbc633b39673c8cecU, 0xd5be0503e085d813U, 0x4b2d8644d8a74e18U,
1423 0xddf8e7d60ed1219eU, 0xcabb90e5c942b503U, 0x3d6a751f3b936243U,
1424 0x0cc512670a783ad4U, 0x27fb2b80668b24c5U, 0xb1f9f660802dedf6U,
1425 0x5e7873f8a0396973U, 0xdb0b487b6423e1e8U, 0x91ce1a9a3d2cda62U,
1426 0x7641a140cc7810fbU, 0xa9e904c87fcb0a9dU, 0x546345fa9fbdcd44U,
1427 0xa97c177947ad4095U, 0x49ed8eabcccc485dU, 0x5c68f256bfff5a74U,
1428 0x73832eec6fff3111U, 0xc831fd53c5ff7eabU, 0xba3e7ca8b77f5e55U,
1429 0x28ce1bd2e55f35ebU, 0x7980d163cf5b81b3U, 0xd7e105bcc332621fU,
1430 0x8dd9472bf3fefaa7U, 0xb14f98f6f0feb951U, 0x6ed1bf9a569f33d3U,
1431 0x0a862f80ec4700c8U, 0xcd27bb612758c0faU, 0x8038d51cb897789cU,
1432 0xe0470a63e6bd56c3U, 0x1858ccfce06cac74U, 0x0f37801e0c43ebc8U,
1433 0xd30560258f54e6baU, 0x47c6b82ef32a2069U, 0x4cdc331d57fa5441U,
1434 0xe0133fe4adf8e952U, 0x58180fddd97723a6U, 0x570f09eaa7ea7648U,
1435 };
1436
1437 } // namespace
1438 ABSL_NAMESPACE_END
1439 } // namespace absl
1440