sizeof(kPower10ExponentTable) = 651 * sizeof(int16_t) = 1302 bytes.
Their equivalence can be confirmed by this test program:
```
const int minIncl = -342;
const int maxExcl = 309;
const int kPower10ExponentTable[] = { etc };
int Power10Exponent(int n) {
return kPower10ExponentTable[n - minIncl];
}
int main(int argc, char** argv) {
for (int n = minIncl; n < maxExcl; n++) {
int formula = (217706 * n >> 16) - 63;
int table = Power10Exponent(n);
if (formula != table) {
return 1;
}
}
return 0;
}
```
Tested by atod_manual_test over the parse-number-fxx-test-data test
cases, with and without manually disabling the EiselLemire code path,
noting that changing the magic 217706 value causes test failures.
PiperOrigin-RevId: 478646550
Change-Id: Icaaf106f9aa36e2de057f3bc9aeddc3ae0efade6
| Name |
Last commit
|
Last Update |
|---|---|---|
| .. | ||
| internal | Loading commit data... | |
| BUILD.bazel | Loading commit data... | |
| CMakeLists.txt | Loading commit data... | |
| ascii.cc | Loading commit data... | |
| ascii.h | Loading commit data... | |
| ascii_benchmark.cc | Loading commit data... | |
| ascii_test.cc | Loading commit data... | |
| atod_manual_test.cc | Loading commit data... | |
| charconv.cc | Loading commit data... | |
| charconv.h | Loading commit data... | |
| charconv_benchmark.cc | Loading commit data... | |
| charconv_test.cc | Loading commit data... | |
| cord.cc | Loading commit data... | |
| cord.h | Loading commit data... | |
| cord_analysis.cc | Loading commit data... | |
| cord_analysis.h | Loading commit data... | |
| cord_buffer.cc | Loading commit data... | |
| cord_buffer.h | Loading commit data... | |
| cord_buffer_test.cc | Loading commit data... | |
| cord_ring_reader_test.cc | Loading commit data... | |
| cord_ring_test.cc | Loading commit data... | |
| cord_test.cc | Loading commit data... | |
| cord_test_helpers.h | Loading commit data... | |
| cordz_test.cc | Loading commit data... | |
| cordz_test_helpers.h | Loading commit data... | |
| escaping.cc | Loading commit data... | |
| escaping.h | Loading commit data... | |
| escaping_benchmark.cc | Loading commit data... | |
| escaping_test.cc | Loading commit data... | |
| match.cc | Loading commit data... | |
| match.h | Loading commit data... | |
| match_test.cc | Loading commit data... | |
| numbers.cc | Loading commit data... | |
| numbers.h | Loading commit data... | |
| numbers_benchmark.cc | Loading commit data... | |
| numbers_test.cc | Loading commit data... | |
| str_cat.cc | Loading commit data... | |
| str_cat.h | Loading commit data... | |
| str_cat_benchmark.cc | Loading commit data... | |
| str_cat_test.cc | Loading commit data... | |
| str_format.h | Loading commit data... | |
| str_format_test.cc | Loading commit data... | |
| str_join.h | Loading commit data... | |
| str_join_benchmark.cc | Loading commit data... | |
| str_join_test.cc | Loading commit data... | |
| str_replace.cc | Loading commit data... | |
| str_replace.h | Loading commit data... | |
| str_replace_benchmark.cc | Loading commit data... | |
| str_replace_test.cc | Loading commit data... | |
| str_split.cc | Loading commit data... | |
| str_split.h | Loading commit data... | |
| str_split_benchmark.cc | Loading commit data... | |
| str_split_test.cc | Loading commit data... | |
| string_view.cc | Loading commit data... | |
| string_view.h | Loading commit data... | |
| string_view_benchmark.cc | Loading commit data... | |
| string_view_test.cc | Loading commit data... | |
| strip.h | Loading commit data... | |
| strip_test.cc | Loading commit data... | |
| substitute.cc | Loading commit data... | |
| substitute.h | Loading commit data... | |
| substitute_test.cc | Loading commit data... |