├── util ├── .gitignore ├── Makefile ├── README.md ├── mkdata.cc └── raw_data.cc ├── _config.yml ├── AUTHORS ├── TODO.md ├── .gitignore ├── .clang-format ├── scripts └── fakelint.sh ├── misc └── license_template.h ├── include └── count │ ├── hll_limits.h │ ├── c.h │ └── hll.h ├── count ├── hll_data.h ├── utility.h ├── utility.cc ├── empirical_data.h ├── c.cc ├── empirical_data_test.cc ├── empirical_data.cc ├── hll.cc └── hll_data.cc ├── examples ├── c_example.c ├── cc_example.cc ├── merge_example.cc └── certify.cc ├── Makefile ├── README.md └── LICENSE.md /util/.gitignore: -------------------------------------------------------------------------------- 1 | mkdata 2 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-slate -------------------------------------------------------------------------------- /AUTHORS: -------------------------------------------------------------------------------- 1 | # Initial version authors 2 | Tom Dial 3 | -------------------------------------------------------------------------------- /TODO.md: -------------------------------------------------------------------------------- 1 | ## TODO List 2 | 3 | # Required 4 | 5 | * Provide better unit test coverage. 6 | 7 | * Create manpages, add them to install. 8 | 9 | # Optional 10 | * Document downloading and building OpenSSL for MacOSX 11 | -------------------------------------------------------------------------------- /util/Makefile: -------------------------------------------------------------------------------- 1 | CXX=g++ 2 | CXXFLAGS=-Werror -Wall -g 3 | 4 | mkdata: mkdata.o raw_data.o 5 | $(CXX) $(CXXFLAGS) -o mkdata $^ 6 | 7 | .cc.o: 8 | $(CXX) $(CXXFLAGS) -c $< 9 | 10 | .PHONY: 11 | clean: 12 | -rm -f mkdata *.o 13 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore files generated by the build 2 | build_config.mk 3 | 4 | # Ignore build targets 5 | c_example 6 | cc_example 7 | check 8 | libcount.a 9 | merge_example 10 | *_test 11 | 12 | # Ignore object files 13 | *.o 14 | 15 | # Ignore editor temporary files 16 | *~ 17 | .*~ 18 | .*.swp 19 | -------------------------------------------------------------------------------- /util/README.md: -------------------------------------------------------------------------------- 1 | About 2 | ===== 3 | 4 | The mkdata program is a quick and dirty utility that generates the 5 | empirical data in sorted order. The data set provided by the authors 6 | of the HyperLogLog++ paper was *not* sorted, which makes it more 7 | difficult that necessary to perform interpolation. 8 | 9 | -------------------------------------------------------------------------------- /.clang-format: -------------------------------------------------------------------------------- 1 | # We'll start with the Google standard, ensuring that we stay with an 2 | # indent width of 2, column limit of 80. 3 | BasedOnStyle: Google 4 | Language: Cpp 5 | IndentWidth: 2 6 | ColumnLimit: 80 7 | 8 | # Deviations from Google standard start below 9 | 10 | #AllowShortCaseLabelsOnASingleLine: true 11 | 12 | #AllowShortFunctionsOnASingleLine: false 13 | 14 | AllowShortIfStatementsOnASingleLine: false 15 | 16 | AllowShortLoopsOnASingleLine: false 17 | 18 | #BreakBeforeBraces: Linux 19 | 20 | -------------------------------------------------------------------------------- /scripts/fakelint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # Copyright 2015 The libcount Authors. 3 | # 4 | # Licensed under the Apache License, Version 2.0 (the "License"); 5 | # you may not use this file except in compliance with the License. 6 | # You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. See the AUTHORS file for names of 15 | # contributors. 16 | 17 | echo "fakelint: $@" 18 | -------------------------------------------------------------------------------- /misc/license_template.h: -------------------------------------------------------------------------------- 1 | // Copyright 2015 The libcount 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 | // http://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. See the AUTHORS file for names of 14 | // contributors. 15 | 16 | #ifndef INCLUDE_COUNT_LICENSE_TEMPLATE_H_ 17 | #define INCLUDE_COUNT_LICENSE_TEMPLATE_H_ 18 | 19 | #endif // INCLUDE_COUNT_LICENSE_TEMPLATE_H_ 20 | -------------------------------------------------------------------------------- /include/count/hll_limits.h: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2015-2022 The libcount Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. See the AUTHORS file for names of 15 | contributors. 16 | */ 17 | 18 | #ifndef INCLUDE_COUNT_HLL_LIMITS_H_ 19 | #define INCLUDE_COUNT_HLL_LIMITS_H_ 20 | 21 | #ifdef __cplusplus 22 | namespace libcount { 23 | #endif 24 | 25 | enum { 26 | /* Minimum and maximum precision values allowed. */ 27 | HLL_MIN_PRECISION = 4, 28 | HLL_MAX_PRECISION = 18 29 | }; 30 | 31 | #ifdef __cplusplus 32 | } // namespace libcount 33 | #endif 34 | 35 | #endif // INCLUDE_COUNT_HLL_LIMITS_H_ 36 | -------------------------------------------------------------------------------- /count/hll_data.h: -------------------------------------------------------------------------------- 1 | // Copyright 2015-2022 The libcount 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 | // http://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. See the AUTHORS file for names of 14 | // contributors. 15 | 16 | #ifndef INCLUDE_COUNT_HLL_DATA_H_ 17 | #define INCLUDE_COUNT_HLL_DATA_H_ 18 | 19 | // Array of threshold values at each precision value. 20 | extern const double THRESHOLD_DATA[15]; 21 | 22 | // Two dimensional array containing estimate data at each precision level. 23 | extern const double ESTIMATE_DATA[15][201]; 24 | 25 | // Two dimensional array containing bias for each estimate at each precision 26 | // level. The indices into this array correspond 1:1 to the indices fof the 27 | // data in ESTIMATE_DATA. 28 | extern const double BIAS_DATA[15][201]; 29 | 30 | #endif // INCLUDE_COUNT_HLL_DATA_H_ 31 | -------------------------------------------------------------------------------- /count/utility.h: -------------------------------------------------------------------------------- 1 | // Copyright 2015-2022 The libcount 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 | // http://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. See the AUTHORS file for names of 14 | // contributors. 15 | 16 | #ifndef COUNT_UTILITY_H_ 17 | #define COUNT_UTILITY_H_ 18 | 19 | #include 20 | 21 | namespace libcount { 22 | 23 | // Return the number of leading zero bits in the unsigned value. 24 | uint8_t CountLeadingZeroes(uint64_t value); 25 | 26 | // Equality test for doubles. Returns true if ((a - b) < epsilon). 27 | bool IsDoubleEqual(double a, double b, double epsilon); 28 | 29 | // If the destination pointer is valid, copy the source value to it. 30 | // Returns true if a value was copied. Returns false otherwise. 31 | template 32 | bool MaybeAssign(Type* dest, const Type& src) { 33 | if (dest) { 34 | *dest = src; 35 | return true; 36 | } 37 | return false; 38 | } 39 | 40 | } // namespace libcount 41 | 42 | #endif // COUNT_UTILITY_H_ 43 | -------------------------------------------------------------------------------- /count/utility.cc: -------------------------------------------------------------------------------- 1 | // Copyright 2015-2022 The libcount 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 | // http://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. See the AUTHORS file for names of 14 | // contributors. 15 | 16 | #include "count/utility.h" 17 | 18 | #include 19 | 20 | namespace libcount { 21 | 22 | uint8_t CountLeadingZeroes(uint64_t x) { 23 | uint64_t y = 0; 24 | uint64_t n = 64; 25 | y = x >> 32; 26 | if (y != 0) { 27 | n = n - 32; 28 | x = y; 29 | } 30 | y = x >> 16; 31 | if (y != 0) { 32 | n = n - 16; 33 | x = y; 34 | } 35 | y = x >> 8; 36 | if (y != 0) { 37 | n = n - 8; 38 | x = y; 39 | } 40 | y = x >> 4; 41 | if (y != 0) { 42 | n = n - 4; 43 | x = y; 44 | } 45 | y = x >> 2; 46 | if (y != 0) { 47 | n = n - 2; 48 | x = y; 49 | } 50 | y = x >> 1; 51 | if (y != 0) { 52 | return static_cast(n - 2); 53 | } 54 | return static_cast(n - x); 55 | } 56 | 57 | bool IsDoubleEqual(double a, double b, double epsilon) { 58 | return (fabs(a - b) < epsilon); 59 | } 60 | 61 | } // namespace libcount 62 | -------------------------------------------------------------------------------- /count/empirical_data.h: -------------------------------------------------------------------------------- 1 | // Copyright 2015-2022 The libcount 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 | // http://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. See the AUTHORS file for names of 14 | // contributors. 15 | 16 | #ifndef COUNT_EMPIRICAL_DATA_H_ 17 | #define COUNT_EMPIRICAL_DATA_H_ 18 | 19 | namespace libcount { 20 | 21 | // Return the empirical alpha value used for scaling harmonic means. 22 | double EmpiricalAlpha(int precision); 23 | 24 | // Return the cardinality threshold for the given precision value. 25 | // Valid values for precision are [4..18] inclusive. 26 | double EmpiricalThreshold(int precision); 27 | 28 | // Return the empirical bias value for the raw estimate and precision. 29 | double EmpiricalBias(double raw_estimate, int precision); 30 | 31 | // Scan the array to determine the number of valid entries; The assumption 32 | // is made that a value of zero marks the last entry. This is used internally 33 | // by the implementation of the interpolation routine and is exposed so that 34 | // it can be tested properly. 35 | int ValidTableEntries(const double *array, int max_size); 36 | 37 | } // namespace libcount 38 | 39 | #endif // COUNT_EMPIRICAL_DATA_H_ 40 | -------------------------------------------------------------------------------- /include/count/c.h: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2015-2022 The libcount Authors. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. See the AUTHORS file for names of 15 | contributors. 16 | */ 17 | 18 | #ifndef INCLUDE_COUNT_C_H_ 19 | #define INCLUDE_COUNT_C_H_ 20 | 21 | #ifdef __cplusplus 22 | extern "C" { 23 | #endif 24 | 25 | #include 26 | 27 | #include "count/hll_limits.h" 28 | 29 | /* Exported types */ 30 | 31 | typedef struct hll_t hll_t; 32 | 33 | /* HLL Operations */ 34 | 35 | /* Create a HyperLogLog context object to estimate the cardinality of a set. */ 36 | extern hll_t* HLL_create(int precision, int* opt_error); 37 | 38 | /* Update a context to record the observation of an element in the set. */ 39 | extern void HLL_update(hll_t* ctx, uint64_t hash); 40 | 41 | /* Merge 'src' context with 'dest', storing the resulting state in 'dest'. */ 42 | extern int HLL_merge(hll_t* dest, const hll_t* src); 43 | 44 | /* Return an estimate of the cardinality of the set using HyperLogLog++ */ 45 | extern uint64_t HLL_estimate(hll_t* ctx); 46 | 47 | /* Free resources associated with a context. */ 48 | extern void HLL_free(hll_t* ctx); 49 | 50 | #ifdef __cplusplus 51 | } /* end extern "C" */ 52 | #endif 53 | 54 | #endif /* INCLUDE_COUNT_C_H_ */ 55 | -------------------------------------------------------------------------------- /count/c.cc: -------------------------------------------------------------------------------- 1 | /* Copyright 2015-2022 The libcount 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 | http://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. See the AUTHORS file for names of 14 | contributors. 15 | */ 16 | 17 | #include "count/c.h" 18 | 19 | #include 20 | #include 21 | 22 | #include "count/hll.h" 23 | 24 | #ifdef __cplusplus 25 | extern "C" { 26 | #endif 27 | 28 | using libcount::HLL; 29 | 30 | #include 31 | 32 | /* Exported types */ 33 | 34 | struct hll_t { 35 | HLL* rep; 36 | }; 37 | 38 | /* HLL Operations */ 39 | 40 | hll_t* HLL_create(int precision, int* opt_error) { 41 | HLL* rep = HLL::Create(precision, opt_error); 42 | if (rep == NULL) { 43 | return NULL; 44 | } 45 | 46 | hll_t* obj = reinterpret_cast(malloc(sizeof(hll_t))); 47 | if (obj == NULL) { 48 | delete rep; 49 | return NULL; 50 | } 51 | 52 | obj->rep = rep; 53 | return obj; 54 | } 55 | 56 | void HLL_update(hll_t* ctx, uint64_t hash) { 57 | assert(ctx != NULL); 58 | ctx->rep->Update(hash); 59 | } 60 | 61 | int HLL_merge(hll_t* dest, const hll_t* src) { 62 | assert(dest != NULL); 63 | assert(src != NULL); 64 | return dest->rep->Merge(src->rep); 65 | } 66 | 67 | uint64_t HLL_estimate(hll_t* ctx) { 68 | assert(ctx != NULL); 69 | return ctx->rep->Estimate(); 70 | } 71 | 72 | void HLL_free(hll_t* ctx) { 73 | assert(ctx != NULL); 74 | assert(ctx->rep != NULL); 75 | delete ctx->rep; 76 | ctx->rep = NULL; 77 | free(ctx); 78 | } 79 | 80 | #ifdef __cplusplus 81 | } /* end extern "C" */ 82 | #endif 83 | -------------------------------------------------------------------------------- /examples/c_example.c: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright 2015-2022 The libcount Authors. 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 | http://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. See the AUTHORS file for names of 14 | contributors. 15 | */ 16 | 17 | #include 18 | #include 19 | #include 20 | #include "count/c.h" 21 | 22 | uint64_t hash(int i) { 23 | // Structure that is 160 bits wide used to extract 64 bits from a SHA-1. 24 | struct hashval { 25 | uint64_t high64; 26 | char low96[12]; 27 | } hash; 28 | 29 | // Calculate the SHA-1 hash of the integer. 30 | SHA_CTX ctx; 31 | SHA1_Init(&ctx); 32 | SHA1_Update(&ctx, (unsigned char*)&i, sizeof(i)); 33 | SHA1_Final((unsigned char*)&hash, &ctx); 34 | 35 | // Return 64 bits of the hash. 36 | return hash.high64; 37 | } 38 | 39 | int main(int argc, char* argv[]) { 40 | const int kPrecision = 9; 41 | int error = 0; 42 | 43 | // Create an HLL object to track set cardinality. 44 | hll_t* hll = HLL_create(kPrecision, &error); 45 | 46 | // Count 'kIterations' elements with 'kTrueCardinality' cardinality. 47 | const uint64_t kIterations = 1000000; 48 | const uint64_t kTrueCardinality = 100; 49 | uint64_t i; 50 | for (i = 0; i < kIterations; ++i) { 51 | HLL_update(hll, hash(i % kTrueCardinality)); 52 | } 53 | 54 | // Obtain the cardinality estimate. 55 | const uint64_t estimate = HLL_estimate(hll); 56 | 57 | // Display results. 58 | printf("actual cardinality: %" PRIuFAST64 "\n", kTrueCardinality); 59 | printf("estimated cardinality: %" PRIuFAST64 "\n", estimate); 60 | 61 | // Free object. 62 | HLL_free(hll); 63 | 64 | return 0; 65 | } 66 | -------------------------------------------------------------------------------- /count/empirical_data_test.cc: -------------------------------------------------------------------------------- 1 | // Copyright 2015-2022 The libcount 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 | // http://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. See the AUTHORS file for names of 14 | // contributors. 15 | 16 | #include "count/empirical_data.h" 17 | 18 | #include 19 | #include 20 | #include 21 | 22 | #include "count/hll_data.h" 23 | #include "count/hll_limits.h" 24 | 25 | using libcount::HLL_MAX_PRECISION; 26 | using libcount::HLL_MIN_PRECISION; 27 | using libcount::ValidTableEntries; 28 | 29 | // Ensure that the empirical data set is sorted properly. 30 | 31 | int main(int argc, char* argv[]) { 32 | // Sweep through all precision levels. 33 | for (int p = HLL_MIN_PRECISION; p <= HLL_MAX_PRECISION; ++p) { 34 | // The arrays are zero indexed; calculate the array index for the 35 | // associated precision level. 36 | const int precision_index = p - HLL_MIN_PRECISION; 37 | 38 | // How many valid entries will there be? 39 | const int kMax = 201; 40 | const int size = ValidTableEntries(ESTIMATE_DATA[precision_index], kMax); 41 | 42 | double last = 0.0; 43 | for (int i = 0; i < size; ++i) { 44 | const double curr = ESTIMATE_DATA[precision_index][i]; 45 | // Iff we assert here, the empirical estimate data is not sorted. This 46 | // is a serious problem because the linear interpolation algorithm 47 | // assumes that the estimate values increase monotonically with their 48 | // array index. 49 | assert(curr >= last); 50 | if (curr < last) { 51 | return EXIT_FAILURE; 52 | } 53 | last = curr; 54 | } 55 | } 56 | return EXIT_SUCCESS; 57 | } 58 | -------------------------------------------------------------------------------- /examples/cc_example.cc: -------------------------------------------------------------------------------- 1 | // Copyright 2015-2022 The libcount 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 | // http://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. See the AUTHORS file for names of 14 | // contributors. 15 | 16 | #include 17 | #include 18 | 19 | #include 20 | 21 | #include "count/hll.h" 22 | 23 | using libcount::HLL; 24 | using std::cout; 25 | using std::endl; 26 | 27 | uint64_t hash(int i) { 28 | // Structure that is 160 bits wide used to extract 64 bits from a SHA-1. 29 | struct hashval { 30 | uint64_t high64; 31 | char low96[12]; 32 | } hash; 33 | 34 | // Calculate the SHA-1 hash of the integer. 35 | SHA_CTX ctx; 36 | SHA1_Init(&ctx); 37 | SHA1_Update(&ctx, (unsigned char*)&i, sizeof(i)); 38 | SHA1_Final((unsigned char*)&hash, &ctx); 39 | 40 | // Return 64 bits of the hash. 41 | return hash.high64; 42 | } 43 | 44 | int main(int argc, char* argv[]) { 45 | const int kPrecision = 9; 46 | 47 | // Create an HLL object to track set cardinality. 48 | HLL* hll = HLL::Create(kPrecision); 49 | 50 | // Count 'kIterations' elements with 'kTrueCardinality' cardinality. 51 | const uint64_t kIterations = 1000000; 52 | const uint64_t kTrueCardinality = 100; 53 | for (uint64_t i = 0; i < kIterations; ++i) { 54 | hll->Update(hash(i % kTrueCardinality)); 55 | } 56 | 57 | // Obtain the cardinality estimate. 58 | const uint64_t estimate = hll->Estimate(); 59 | 60 | // Display results. 61 | cout << "actual cardinality: " << kTrueCardinality << endl; 62 | cout << "estimated cardinality: " << estimate << endl; 63 | 64 | // Delete object. 65 | delete hll; 66 | 67 | return 0; 68 | } 69 | -------------------------------------------------------------------------------- /examples/merge_example.cc: -------------------------------------------------------------------------------- 1 | // Copyright 2015-2022 The libcount 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 | // http://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. See the AUTHORS file for names of 14 | // contributors. 15 | 16 | #include 17 | #include 18 | 19 | #include 20 | 21 | #include "count/hll.h" 22 | 23 | using libcount::HLL; 24 | using std::cout; 25 | using std::endl; 26 | 27 | uint64_t hash(int i) { 28 | // Structure that is 160 bits wide used to extract 64 bits from a SHA-1. 29 | struct hashval { 30 | uint64_t high64; 31 | char low96[12]; 32 | } hash; 33 | 34 | // Calculate the SHA-1 hash of the integer. 35 | SHA_CTX ctx; 36 | SHA1_Init(&ctx); 37 | SHA1_Update(&ctx, (unsigned char*)&i, sizeof(i)); 38 | SHA1_Final((unsigned char*)&hash, &ctx); 39 | 40 | // Return 64 bits of the hash. 41 | return hash.high64; 42 | } 43 | 44 | int main(int argc, char* argv[]) { 45 | const int kPrecision = 14; 46 | 47 | // Create two HLL objects to track set cardinality. 48 | HLL* hll_1 = HLL::Create(kPrecision); 49 | HLL* hll_2 = HLL::Create(kPrecision); 50 | 51 | // Count 'kIterations' elements with 'kTrueCardinality' cardinality. In our 52 | // simulation, each object will get unique items, so that when we perform 53 | // the merge operation, we can expect the estimated cardinality to be about 54 | // double the value of 'kTrueCardinality'. 55 | const uint64_t kIterations = 10000000; 56 | const uint64_t kTrueCardinality = 1000; 57 | for (uint64_t i = 0; i < kIterations; ++i) { 58 | hll_1->Update(hash(i % kTrueCardinality)); 59 | hll_2->Update(hash((i % kTrueCardinality) + kTrueCardinality)); 60 | } 61 | 62 | // Merge contents of hll_2 into hll_1. 63 | hll_1->Merge(hll_2); 64 | 65 | // Obtain the cardinality estimate. 66 | const uint64_t estimate = hll_1->Estimate(); 67 | 68 | // Display results. 69 | cout << "actual cardinality: " << (kTrueCardinality * 2) << endl; 70 | cout << "estimated cardinality: " << estimate << endl; 71 | 72 | // Delete object. 73 | delete hll_2; 74 | delete hll_1; 75 | 76 | return 0; 77 | } 78 | -------------------------------------------------------------------------------- /include/count/hll.h: -------------------------------------------------------------------------------- 1 | // Copyright 2015-2022 The libcount 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 | // http://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. See the AUTHORS file for names of 14 | // contributors. 15 | 16 | #ifndef INCLUDE_COUNT_HLL_H_ 17 | #define INCLUDE_COUNT_HLL_H_ 18 | 19 | #include 20 | 21 | #include "count/hll_limits.h" 22 | 23 | namespace libcount { 24 | 25 | class HLL { 26 | public: 27 | ~HLL(); 28 | 29 | // Create an instance of a HyperLogLog++ cardinality estimator. Valid values 30 | // for precision are [4..18] inclusive, and govern the precision of the 31 | // estimate. Returns NULL on failure. In the event of failure, the caller 32 | // may provide a pointer to an integer to learn the reason. 33 | static HLL* Create(int precision, int* error = 0); 34 | 35 | // Update the instance to record the observation of an element. It is 36 | // assumed that the caller uses a high-quality 64-bit hash function that 37 | // is free of bias. Empirically, using a subset of bits from a well-known 38 | // cryptographic hash function such as SHA1, is a good choice. 39 | void Update(uint64_t hash); 40 | 41 | // Merge count tracking information from another instance into the object. 42 | // The object being merged in must have been instantiated with the same 43 | // precision. Returns 0 on success, EINVAL otherwise. 44 | int Merge(const HLL* other); 45 | 46 | // Compute the bias-corrected estimate using the HyperLogLog++ algorithm. 47 | uint64_t Estimate() const; 48 | 49 | private: 50 | // No copying allowed 51 | HLL(const HLL& no_copy); 52 | HLL& operator=(const HLL& no_assign); 53 | 54 | // Constructor is private: we validate the precision in the Create function. 55 | explicit HLL(int precision); 56 | 57 | // Compute the raw estimate based on the HyperLogLog algorithm. 58 | double RawEstimate() const; 59 | 60 | // Return the number of registers equal to zero; used in LinearCounting. 61 | int RegistersEqualToZero() const; 62 | 63 | int precision_; 64 | int register_count_; 65 | uint8_t* registers_; 66 | }; 67 | 68 | } // namespace libcount 69 | 70 | #endif // INCLUDE_COUNT_HLL_H_ 71 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | # Copyright 2015-2022 The libcount 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 | # http://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. See the AUTHORS file for names of 14 | # contributors. 15 | 16 | # Uncomment exactly one of the lines labelled (A), (B), and (C) below 17 | # to switch between compilation modes. 18 | 19 | # A: Production use (full optimizations) 20 | #OPT ?= -O3 -DNDEBUG 21 | 22 | # B: Debug mode, with full line-level debugging symbols 23 | OPT ?= -g2 24 | 25 | # C: Profiling mode: optimizations, but w/debugging symbols 26 | #OPT ?= -O3 -g2 -DNDEBUG 27 | 28 | PREFIX ?= /usr/local 29 | 30 | # Warning Flags 31 | WARNINGFLAGS = -Wall -Werror 32 | 33 | # Detect what platform we're building on 34 | $(shell CXX="$(CXX)" TARGET_OS="$(TARGET_OS)" \ 35 | ./build_config build_config.mk .) 36 | 37 | # Include the file generated by the previous line to set build flags, sources 38 | include build_config.mk 39 | 40 | AR = ar 41 | RANLIB = ranlib 42 | CXXFLAGS += -I. -I./include $(PLATFORM_CXXFLAGS) $(OPT) $(WARNINGFLAGS) 43 | COUNT_OBJECTS = $(COUNT_FILES:.cc=.o) 44 | TESTS = empirical_data_test 45 | 46 | # Targets 47 | all: libcount.a 48 | 49 | .PHONY: 50 | check: $(TESTS) 51 | for t in $(TESTS); do echo "** Running $$t"; ./$$t || exit 1; done 52 | 53 | .PHONY: 54 | clean: 55 | -rm -f */*.o build_config.mk *.a c_example cc_example merge_example $(TESTS) 56 | 57 | c_example: examples/c_example.o libcount.a 58 | $(CXX) $(CXXFLAGS) examples/c_example.o libcount.a -o $@ -lcrypto 59 | 60 | cc_example: examples/cc_example.o libcount.a 61 | $(CXX) $(CXXFLAGS) examples/cc_example.o libcount.a -o $@ -lcrypto 62 | 63 | certify: examples/certify.o libcount.a 64 | $(CXX) $(CXXFLAGS) examples/certify.o libcount.a -o $@ -lcrypto 65 | ./certify 66 | 67 | empirical_data_test: count/empirical_data_test.o libcount.a 68 | $(CXX) $(CXXFLAGS) count/empirical_data_test.o libcount.a -o $@ 69 | 70 | merge_example: examples/merge_example.o libcount.a 71 | $(CXX) $(CXXFLAGS) examples/merge_example.o libcount.a -o $@ -lcrypto 72 | 73 | .PHONY: 74 | examples: c_example cc_example merge_example 75 | 76 | .PHONY: install 77 | install: libcount.a 78 | cp libcount.a "$(PREFIX)/lib" 79 | mkdir -p "$(PREFIX)/include/count" 80 | cp include/count/*.h "$(PREFIX)/include/count" 81 | 82 | libcount.a: $(COUNT_OBJECTS) 83 | $(AR) rcs libcount.a $(COUNT_OBJECTS) 84 | $(RANLIB) libcount.a 85 | 86 | .PHONY: 87 | linecount: 88 | wc -l $(CPPLINT_SOURCES) 89 | 90 | .PHONY: 91 | lint: 92 | $(LINT_TOOL) $(CPPLINT_SOURCES) 93 | 94 | .PHONY: 95 | neat: clean 96 | -rm -f *~ .*~ */*~ ./include/*/*~ 97 | 98 | .PHONY: 99 | reformat: 100 | clang-format -i $(CPPLINT_SOURCES) 101 | 102 | # Suffix Rules 103 | .c.o: 104 | $(CC) $(CXXFLAGS) -c $< -o $@ 105 | 106 | .cc.o: 107 | $(CXX) $(CXXFLAGS) -c $< -o $@ 108 | 109 | -------------------------------------------------------------------------------- /util/mkdata.cc: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | using std::map; 9 | using std::multimap; 10 | 11 | const size_t MIN_PRECISION = 4; 12 | const size_t MAX_PRECISION = 18; 13 | 14 | typedef std::pair Estimate; 15 | typedef std::set Estimates; 16 | typedef std::map EstimateDataSet; 17 | 18 | extern const double rawEstimateData[15][201]; 19 | extern const double biasData[15][201]; 20 | 21 | size_t ArrayLength(const double *arr, size_t maxlen) { 22 | const double EPSILON = 0.00001; 23 | const double ZERO = 0.0; 24 | for (size_t i = 0; i < maxlen; ++i) { 25 | if (fabs(arr[i] - ZERO) < EPSILON) { 26 | return i; 27 | } 28 | } 29 | return maxlen; 30 | } 31 | 32 | int main(int argc, char *argv[]) { 33 | // The Estimate dataset is a map; the key is the precision level, the value 34 | // is an Estimates set that contains a sorted list of all estimates for that 35 | // precision level. 36 | EstimateDataSet dataset; 37 | 38 | // For every precision level... 39 | for (size_t p = MIN_PRECISION; p <= MAX_PRECISION; ++p) { 40 | // Determine the index into the two dimenensional rawEstimateData array 41 | // that holds the series of data associated with precision 'p'. 42 | const size_t p_index = (p - MIN_PRECISION); 43 | 44 | // Determine how many elements are in the series. Most series have 200, 45 | // but the first few precision levels have fewer. 46 | const size_t subarray_len = ArrayLength(rawEstimateData[p_index], 201); 47 | 48 | // Construct a set to hold all the estimates and their positions in the 49 | // array, which is kept sorted in increasing order of the estimate value, 50 | // with index being the tie-breaker. 51 | Estimates estimates; 52 | for (size_t elem = 0; elem < subarray_len; ++elem) { 53 | estimates.insert(Estimate(rawEstimateData[p_index][elem], elem)); 54 | } 55 | 56 | // Store all sorted estimates into the master dataset map. 57 | dataset[p] = estimates; 58 | } 59 | 60 | // Generate C code for the sorted estimate data, written to standard output. 61 | 62 | // Preamble. 63 | printf("extern const double ESTIMATE_DATA[15][201] = {\n"); 64 | 65 | for (size_t p = MIN_PRECISION; p <= MAX_PRECISION; ++p) { 66 | // Get an alias to the estimates for this precision level. 67 | const Estimates &estimates = dataset[p]; 68 | assert(estimates.size() > 0); 69 | printf(" // Precision %lu\n", p); 70 | printf(" { "); 71 | 72 | Estimates::const_iterator ei = estimates.begin(); 73 | Estimates::const_iterator ee = estimates.end(); 74 | 75 | printf("%f", ei->first); 76 | ++ei; 77 | 78 | for (; ei != ee; ++ei) { 79 | printf(", %f", ei->first); 80 | } 81 | 82 | printf(" }"); 83 | if (p != MAX_PRECISION) { 84 | printf(","); 85 | } 86 | 87 | printf("\n\n"); 88 | } 89 | 90 | printf("};\n\n"); 91 | 92 | // Generate C code for the sorted bias data, written to standard output. 93 | 94 | printf("extern const double BIAS_DATA[15][201] = {\n"); 95 | 96 | for (size_t p = MIN_PRECISION; p <= MAX_PRECISION; ++p) { 97 | const Estimates &estimates = dataset[p]; 98 | assert(estimates.size() > 0); 99 | printf(" // Precision %lu\n", p); 100 | printf(" { "); 101 | 102 | Estimates::const_iterator ei = estimates.begin(); 103 | Estimates::const_iterator ee = estimates.end(); 104 | 105 | double bias = biasData[p - MIN_PRECISION][ei->second]; 106 | printf("%f", bias); 107 | ++ei; 108 | 109 | for (; ei != ee; ++ei) { 110 | double bias = biasData[p - MIN_PRECISION][ei->second]; 111 | printf(", %f", bias); 112 | } 113 | 114 | printf(" }"); 115 | if (p != MAX_PRECISION) { 116 | printf(","); 117 | } 118 | printf("\n\n"); 119 | } 120 | 121 | printf("};\n\n"); 122 | 123 | return 0; 124 | } 125 | -------------------------------------------------------------------------------- /examples/certify.cc: -------------------------------------------------------------------------------- 1 | // Copyright 2015-2022 The libcount 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 | // http://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. See the AUTHORS file for names of 14 | // contributors. 15 | 16 | #include 17 | #include 18 | #include 19 | #include 20 | #include 21 | #include 22 | 23 | #include 24 | 25 | #include "count/hll.h" 26 | #include "count/hll_limits.h" 27 | 28 | using std::cerr; 29 | using std::cout; 30 | using std::endl; 31 | 32 | using libcount::HLL; 33 | using libcount::HLL_MAX_PRECISION; 34 | using libcount::HLL_MIN_PRECISION; 35 | 36 | // Hash function that hashes an integer to uint64_t, using 64 bits of SHA-1. 37 | uint64_t hash(int i) { 38 | // Structure that is 160 bits wide used to extract 64 bits from a SHA-1. 39 | struct hashval { 40 | uint64_t high64; 41 | char low96[12]; 42 | } hash; 43 | 44 | // Calculate the SHA-1 hash of the integer. 45 | SHA_CTX ctx; 46 | SHA1_Init(&ctx); 47 | SHA1_Update(&ctx, (unsigned char*)&i, sizeof(i)); 48 | SHA1_Final((unsigned char*)&hash, &ctx); 49 | 50 | // Return 64 bits of the hash. 51 | return hash.high64; 52 | } 53 | 54 | struct TestResults { 55 | int precision; 56 | uint64_t size; 57 | uint64_t cardinality; 58 | uint64_t estimate; 59 | double percent_error; 60 | }; 61 | 62 | std::ostream& operator<<(std::ostream& os, const TestResults& results) { 63 | char buffer[1000]; 64 | snprintf(buffer, sizeof(buffer), 65 | "Precision:%2d Size:%8lu Actual:%8lu Estimate:%8lu, Error: " 66 | "%7.2lf %%", 67 | results.precision, results.size, results.cardinality, 68 | results.estimate, results.percent_error); 69 | os << buffer; 70 | return os; 71 | } 72 | 73 | int certify(int precision, uint64_t size, uint64_t cardinality, 74 | TestResults* results) { 75 | assert(results != NULL); 76 | // The precision must be 4..18 inclusive. 77 | if ((precision < HLL_MIN_PRECISION) || (precision > HLL_MAX_PRECISION)) { 78 | return EINVAL; 79 | } 80 | 81 | // The cardinality must be 1..size inclusive. 82 | if ((cardinality == 0) || (cardinality > size)) { 83 | return EINVAL; 84 | } 85 | 86 | // Initialize the results structure. 87 | results->precision = precision; 88 | results->size = size; 89 | results->cardinality = cardinality; 90 | results->estimate = 0; 91 | results->percent_error = 0.0; 92 | 93 | HLL* hll = HLL::Create(precision); 94 | if (!hll) { 95 | return EINVAL; 96 | } 97 | 98 | // Push 'size' elements through the counter. We are guaranteed exactly 99 | // 'cardinality' unique hash values. 100 | for (uint64_t i = 0; i < size; ++i) { 101 | hll->Update(hash(i % cardinality)); 102 | } 103 | 104 | // Calculate the estimate 105 | results->estimate = hll->Estimate(); 106 | 107 | // Calculate percentage difference. 108 | const double actual = static_cast(results->cardinality); 109 | const double estimated = static_cast(results->estimate); 110 | const double percent = ((estimated - actual) / actual) * 100.0; 111 | 112 | // Report percentage error. 113 | results->percent_error = percent; 114 | 115 | // Cleanup. 116 | delete hll; 117 | 118 | return 0; 119 | } 120 | 121 | int main(int argc, char* argv[]) { 122 | const int kMaxCardinality = 1000000; 123 | const int kMaxSize = kMaxCardinality * 10; 124 | size_t tests = 0; 125 | // For every precision level... 126 | for (int p = HLL_MIN_PRECISION; p <= HLL_MAX_PRECISION; ++p) { 127 | for (int c = 1; c <= kMaxCardinality; c *= 10) { 128 | for (int s = c; s <= kMaxSize; s *= 10) { 129 | TestResults results; 130 | int status = certify(p, s, c, &results); 131 | if (status < 0) { 132 | cerr << "certify: the certify() function returned an error" << endl; 133 | exit(EXIT_FAILURE); 134 | } 135 | cout << results << endl; 136 | ++tests; 137 | } 138 | } 139 | } 140 | return EXIT_SUCCESS; 141 | } 142 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # libcount 2 | 3 | The goal of libcount is to provide a complete C/C++ implementation of the 4 | HyperLogLog++ cardinality estimation algorithm, as described in the paper: 5 | "HyperLogLog in Practice: Algorithmic Engineering of a State of the Art 6 | Cardinality Estimation Algorithm" by Heule, Nunkesser, and Hall. 7 | 8 | The current (alpha) implementation does not implement sparse register 9 | storage as described in the paper referenced above; it employs a flat 10 | array of 8 bit registers, and thus the storage required to calculate 11 | cardinality is approximately (precision ^ 2) bytes. 12 | 13 | The author of the library is investigating whether there is substantial 14 | benefit to sparse storage for normal use cases. Since the worst case 15 | usage is approximately 256Kb, in light of today's typical memory 16 | configurations, it is not a priority at this time. 17 | 18 | This library has not been thoroughly reviewed or tested at this time. 19 | 20 | Both C and C++ interfaces are available. The examples below demonstrate use. 21 | 22 | ## Current Status 23 | 24 | This library is currently in ALPHA. 25 | 26 | ## Building 27 | 28 | git clone https://github.com/dialtr/libcount 29 | cd libcount 30 | make 31 | sudo make install 32 | 33 | ## Testing 34 | 35 | At the present time, **libcount** doesn't have a significant number of unit 36 | tests. This will be rectified in a forthcoming version. At present, there 37 | is one unit test that validates the empirical data table used internally. 38 | To run this test, simply type: 39 | 40 | make check 41 | 42 | You can also run a suite that runs several simulations at every precision 43 | value to certify that libcount is doing a reasonable job estimating the 44 | cardinality of sets. Just type: 45 | 46 | make certify 47 | 48 | ## Minimal Examples 49 | 50 | Below are two minimal examples that demonstrate using the C++ and C APIs, 51 | respectively. More realistic examples that employ a high quality hash 52 | algorithm can be found in the examples/ directory at the root of the repo. 53 | 54 | To build the examples, simply: 55 | 56 | make examples 57 | 58 | They are not built by default because they depend on the OpenSSL libraries 59 | being available on the system, and since those libraries are not installed 60 | by default on many systems, building them is "opt-in." On Ubuntu, the SSL 61 | package required is: 'libssl-dev'. 62 | 63 | ### C++ 64 | ```C++ 65 | #include 66 | 67 | using libcount::HLL; 68 | 69 | uint64_t Hash(int x) { 70 | // Users of this library should provide a good hash function 71 | // for hashing objects that are being counted. One suggestion 72 | // is to use a cryptographic hash function (SHA1, MD5, etc) 73 | // and return a subset of those bits. 74 | return x; 75 | } 76 | 77 | int main(int argc, char* argv[]) { 78 | const int kPrecision = 8; 79 | 80 | // Create an HLL object to track set cardinality. 81 | HLL* hll = HLL::Create(kPrecision); 82 | 83 | // Update object with hash of each element in your set. 84 | const kNumItems = 10000; 85 | for (int i = 0; i < kNumItems; ++i) { 86 | hll->Update(Hash(i)); 87 | } 88 | 89 | // Obtain the cardinality estimate. 90 | uint64_t estimate = hll->Estimate(); 91 | 92 | // Delete object. 93 | delete hll; 94 | 95 | return 0; 96 | } 97 | ``` 98 | 99 | ### C 100 | ```C 101 | #include 102 | 103 | uint64_t Hash(int x) { 104 | // Users of this library should provide a good hash function 105 | // for hashing objects that are being counted. One suggestion 106 | // is to use a cryptographic hash function (SHA1, MD5, etc) 107 | // and return a subset of those bits. 108 | return x; 109 | } 110 | 111 | int main(int argc, char* argv[]) { 112 | const int kPrecision = 8; 113 | int error = 0; 114 | 115 | // Create an HLL object to track set cardinality. 116 | hll_t* hll = HLL_create(kPrecision, &error); 117 | 118 | // Update object with hash of each element in your set. 119 | const kNumItems = 10000; 120 | for (int i = 0; i < kNumItems; ++i) { 121 | HLL_update(hll, Hash(i)); 122 | } 123 | 124 | // Obtain the cardinality estimate. 125 | uint64_t estimate = HLL_estimate(hll); 126 | 127 | // Free object 128 | HLL_free(hll); 129 | 130 | return 0; 131 | } 132 | ``` 133 | 134 | ## Contact 135 | Please see AUTHORS in the root of the repository for contact information. 136 | 137 | ## Contributing 138 | I would enjoy working with people who may be interested in contributing. I am 139 | also interested in learning how the library is being used and whether any 140 | other features may be desirable. 141 | 142 | ## Dependencies 143 | The libcount.a library has no dependencies outside of the standard C/C++ 144 | libraries. Maintaining this property is a design goal. 145 | 146 | The examples currently require OpenSSL/crypto due to their use of the SHA1 147 | hash functions. Future unit tests will also likely require this library. 148 | 149 | ## Future Planned Development 150 | * Additional tests 151 | * Rethink the interface(s) for Version 2 152 | * Examine whether changes are needed or desirable for modern C++. 153 | * Sparse "register" storage 154 | -------------------------------------------------------------------------------- /count/empirical_data.cc: -------------------------------------------------------------------------------- 1 | // 2 | // Copyright 2015-2022 The libcount Authors. 3 | // 4 | // Licensed under the Apache License, Version 2.0 (the "License"); 5 | // you may not use this file except in compliance with the License. 6 | // You may obtain a copy of the License at 7 | // 8 | // http://www.apache.org/licenses/LICENSE-2.0 9 | // 10 | // Unless required by applicable law or agreed to in writing, software 11 | // distributed under the License is distributed on an "AS IS" BASIS, 12 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | // See the License for the specific language governing permissions and 14 | // limitations under the License. See the AUTHORS file for names of 15 | // contributors. 16 | 17 | #include "count/empirical_data.h" 18 | 19 | #include 20 | #include 21 | 22 | #include 23 | #include 24 | 25 | #include "count/hll_data.h" 26 | #include "count/hll_limits.h" 27 | #include "count/utility.h" 28 | 29 | namespace libcount { 30 | 31 | double EmpiricalAlpha(int precision) { 32 | assert(precision >= HLL_MIN_PRECISION); 33 | assert(precision <= HLL_MAX_PRECISION); 34 | switch (precision) { 35 | case 4: 36 | return 0.673; 37 | case 5: 38 | return 0.697; 39 | case 6: 40 | return 0.709; 41 | default: 42 | return (0.7213 / (1.0 + (1.079 / static_cast(1 << precision)))); 43 | } 44 | } 45 | 46 | double EmpiricalThreshold(int precision) { 47 | assert(precision >= HLL_MIN_PRECISION); 48 | assert(precision <= HLL_MAX_PRECISION); 49 | if ((precision < HLL_MIN_PRECISION) || (precision > HLL_MAX_PRECISION)) { 50 | return 0.0; 51 | } 52 | return THRESHOLD_DATA[precision - HLL_MIN_PRECISION]; 53 | } 54 | 55 | double EmpiricalBias(double raw_estimate, int precision) { 56 | assert(precision >= HLL_MIN_PRECISION); 57 | assert(precision <= HLL_MAX_PRECISION); 58 | if ((precision < HLL_MIN_PRECISION) || (precision > HLL_MAX_PRECISION)) { 59 | return 0.0; 60 | } 61 | 62 | // There are separate raw estimate range and bias tables for each precision 63 | // level. The table starts at precision 4, which is at index 0. 64 | const int index = (precision - HLL_MIN_PRECISION); 65 | 66 | // Make aliases for the estimate, bias arrays we're interested in. 67 | const double* const estimates = ESTIMATE_DATA[index]; 68 | const double* const biases = BIAS_DATA[index]; 69 | 70 | // There up to 201 data points in each table of raw estimates, but the 71 | // number of points varies depending on the precision. Determine the 72 | // actual number of valid entries in the table. 73 | const int kMaxEntries = 201; 74 | const int kNumValidEntries = ValidTableEntries(estimates, kMaxEntries); 75 | 76 | // The raw estimate tables are sorted in ascending order. Search for the 77 | // pair of values in the table that straddle the input, 'raw_estimate'. We 78 | // do this by searching (linearly) for the first value in the estimate 79 | // table that is greater than 'raw_estimate'. We consider this to be the 80 | // "right-hand-side" of the pair that straddle the value. 81 | int rhs = 0; 82 | for (; rhs < kNumValidEntries; ++rhs) { 83 | if (estimates[rhs] > raw_estimate) { 84 | break; 85 | } 86 | } 87 | 88 | // Two boundary cases exist: if we exit the loop above and rhs is equal to 89 | // zero OR kNumValidEntries, then we'll return the first OR last element 90 | // of the bias table, respectively. 91 | if (rhs == 0) { 92 | return biases[0]; 93 | } else if (rhs == kNumValidEntries) { 94 | return biases[kNumValidEntries - 1]; 95 | } 96 | 97 | // Use linear interpolation to find a bias value. 98 | 99 | // Get values of left, right straddling table entries. 100 | const double left_neighbor = estimates[rhs - 1]; 101 | const double right_neighbor = estimates[rhs]; 102 | 103 | // Compute range (difference between entries) and scale factor. 104 | const double range = right_neighbor - left_neighbor; 105 | const double scale = (raw_estimate - left_neighbor) / range; 106 | 107 | // Get values of corresponding left, right bias values. 108 | const double left_bias = biases[rhs - 1]; 109 | const double right_bias = biases[rhs]; 110 | 111 | // Compute range of bias values and find interpolated value using 112 | // the scale factor computed above. 113 | const double bias_range = right_bias - left_bias; 114 | const double interpolated_bias = (scale * bias_range) + left_bias; 115 | 116 | // Sanity Check the interpolated bias. We assert in debug mode, and abort 117 | // in release mode. This seems extreme, but recognize that if the value 118 | // we interpolated above does not lie between the left, right entries in 119 | // the bias table that this reflects a programmer error in the above 120 | // code that intends to interpolate a value. 121 | if (left_bias < right_bias) { 122 | assert(interpolated_bias >= left_bias); 123 | assert(interpolated_bias <= right_bias); 124 | if ((interpolated_bias < left_bias) || (interpolated_bias > right_bias)) { 125 | abort(); 126 | } 127 | } else { 128 | assert(interpolated_bias <= left_bias); 129 | assert(interpolated_bias >= right_bias); 130 | if ((interpolated_bias > left_bias) || (interpolated_bias < right_bias)) { 131 | abort(); 132 | } 133 | } 134 | 135 | return interpolated_bias; 136 | } 137 | 138 | // The empirical bias tables contain varying numbers of entries, depending 139 | // on the precision level. Unused table entries (occuring at the end of the 140 | // arrays) are zero filled. This function returns the actual number of 141 | // valid elements in such an array. 142 | int ValidTableEntries(const double* array, int size) { 143 | const double EPSILON = 0.0001; 144 | for (int i = 0; i < size; ++i) { 145 | if (libcount::IsDoubleEqual(array[i], 0.0, EPSILON)) { 146 | return i; 147 | } 148 | } 149 | return size; 150 | } 151 | 152 | } // namespace libcount 153 | -------------------------------------------------------------------------------- /count/hll.cc: -------------------------------------------------------------------------------- 1 | // Copyright 2015-2022 The libcount 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 | // http://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. See the AUTHORS file for names of 14 | // contributors. 15 | 16 | #include "count/hll.h" 17 | 18 | #include 19 | #include 20 | #include 21 | #include 22 | #include 23 | 24 | #include 25 | 26 | #include "count/empirical_data.h" 27 | #include "count/utility.h" 28 | 29 | namespace { 30 | 31 | using libcount::CountLeadingZeroes; 32 | using std::max; 33 | 34 | // Helper that calculates cardinality according to LinearCounting 35 | double LinearCounting(double register_count, double zeroed_registers) { 36 | return register_count * log(register_count / zeroed_registers); 37 | } 38 | 39 | // Helper to calculate the index into the table of registers from the hash 40 | inline int RegisterIndexOf(uint64_t hash, int precision) { 41 | return (hash >> (64 - precision)); 42 | } 43 | 44 | // Helper to count the leading zeros (less the bits used for the reg. index) 45 | inline uint8_t ZeroCountOf(uint64_t hash, int precision) { 46 | // Make a mask for isolating the leading bits used for the register index. 47 | const uint64_t ONE = 1; 48 | const uint64_t mask = ~(((ONE << precision) - ONE) << (64 - precision)); 49 | 50 | // Count zeroes, less the index bits we're masking off. 51 | return (CountLeadingZeroes(hash & mask) - static_cast(precision)); 52 | } 53 | 54 | } // namespace 55 | 56 | namespace libcount { 57 | 58 | HLL::HLL(int precision) 59 | : precision_(precision), register_count_(0), registers_(NULL) { 60 | // The precision is vetted by the Create() function. Assertions nonetheless. 61 | assert(precision >= HLL_MIN_PRECISION); 62 | assert(precision <= HLL_MAX_PRECISION); 63 | 64 | // We employ (2 ^ precision) "registers" to store max leading zeroes. 65 | register_count_ = (1 << precision); 66 | 67 | // Allocate space for the registers. We can safely economize by using bytes 68 | // for the counters because we know the value can't ever exceed ~60. 69 | registers_ = new uint8_t[register_count_]; 70 | memset(registers_, 0, register_count_ * sizeof(registers_[0])); 71 | } 72 | 73 | HLL::~HLL() { delete[] registers_; } 74 | 75 | HLL* HLL::Create(int precision, int* error) { 76 | if ((precision < HLL_MIN_PRECISION) || (precision > HLL_MAX_PRECISION)) { 77 | MaybeAssign(error, EINVAL); 78 | return NULL; 79 | } 80 | return new HLL(precision); 81 | } 82 | 83 | void HLL::Update(uint64_t hash) { 84 | // Which register will potentially receive the zero count of this hash? 85 | const int index = RegisterIndexOf(hash, precision_); 86 | assert(index < register_count_); 87 | 88 | // Count the zeroes for the hash, and add one, per the algorithm spec. 89 | const uint8_t count = ZeroCountOf(hash, precision_) + 1; 90 | assert(count <= 64); 91 | 92 | // Update the appropriate register if the new count is greater than current. 93 | if (count > registers_[index]) { 94 | registers_[index] = count; 95 | } 96 | } 97 | 98 | int HLL::Merge(const HLL* other) { 99 | assert(other != NULL); 100 | if (other == NULL) { 101 | return EINVAL; 102 | } 103 | 104 | // Ensure that the precision values of the two objects match. 105 | if (precision_ != other->precision_) { 106 | return EINVAL; 107 | } 108 | 109 | // Choose the maximum of corresponding registers from self, other and 110 | // store it back in self, effectively merging the state of the counters. 111 | for (int i = 0; i < register_count_; ++i) { 112 | registers_[i] = max(registers_[i], other->registers_[i]); 113 | } 114 | 115 | return 0; 116 | } 117 | 118 | double HLL::RawEstimate() const { 119 | // Let 'm' be the number of registers. 120 | const double m = static_cast(register_count_); 121 | 122 | // For each register, let 'max' be the contents of the register. 123 | // Let 'term' be the reciprocal of 2 ^ max. 124 | // Finally, let 'sum' be the sum of all terms. 125 | double sum = 0.0; 126 | for (int i = 0; i < register_count_; ++i) { 127 | const double max = static_cast(registers_[i]); 128 | const double term = pow(2.0, -max); 129 | sum += term; 130 | } 131 | 132 | // Next, calculate the harmonic mean 133 | const double harmonic_mean = m * (1.0 / sum); 134 | assert(harmonic_mean >= 0.0); 135 | 136 | // The harmonic mean is scaled by a constant that depends on the precision. 137 | const double estimate = EmpiricalAlpha(precision_) * m * harmonic_mean; 138 | assert(estimate >= 0.0); 139 | 140 | return estimate; 141 | } 142 | 143 | uint64_t HLL::Estimate() const { 144 | // TODO(tdial): The logic below was more or less copied from the research 145 | // paper, less the handling of the sparse register array, which is not 146 | // implemented at this time. It is correct, but seems a little awkward. 147 | // Have someone else review this. 148 | 149 | // First, calculate the raw estimate per original HyperLogLog. 150 | const double E = RawEstimate(); 151 | 152 | // Determine the threshold under which we apply a bias correction. 153 | const double BiasThreshold = 5 * register_count_; 154 | 155 | // Calculate E', the bias corrected estimate. 156 | const double EP = 157 | (E < BiasThreshold) ? (E - EmpiricalBias(E, precision_)) : E; 158 | 159 | // The number of zeroed registers decides whether we use LinearCounting. 160 | const int V = RegistersEqualToZero(); 161 | 162 | // H is either the LinearCounting estimate or the bias-corrected estimate. 163 | double H = 0.0; 164 | if (V != 0) { 165 | H = LinearCounting(register_count_, V); 166 | } else { 167 | H = EP; 168 | } 169 | 170 | // Under an empirically-determined threshold we return H, otherwise E'. 171 | if (H < EmpiricalThreshold(precision_)) { 172 | return H; 173 | } else { 174 | return EP; 175 | } 176 | } 177 | 178 | int HLL::RegistersEqualToZero() const { 179 | int zeroed_registers = 0; 180 | for (int i = 0; i < register_count_; ++i) { 181 | if (registers_[i] == 0) { 182 | ++zeroed_registers; 183 | } 184 | } 185 | return zeroed_registers; 186 | } 187 | 188 | } // namespace libcount 189 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | 2 | Apache License 3 | Version 2.0, January 2004 4 | http://www.apache.org/licenses/ 5 | 6 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 7 | 8 | 1. Definitions. 9 | 10 | "License" shall mean the terms and conditions for use, reproduction, 11 | and distribution as defined by Sections 1 through 9 of this document. 12 | 13 | "Licensor" shall mean the copyright owner or entity authorized by 14 | the copyright owner that is granting the License. 15 | 16 | "Legal Entity" shall mean the union of the acting entity and all 17 | other entities that control, are controlled by, or are under common 18 | control with that entity. For the purposes of this definition, 19 | "control" means (i) the power, direct or indirect, to cause the 20 | direction or management of such entity, whether by contract or 21 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 22 | outstanding shares, or (iii) beneficial ownership of such entity. 23 | 24 | "You" (or "Your") shall mean an individual or Legal Entity 25 | exercising permissions granted by this License. 26 | 27 | "Source" form shall mean the preferred form for making modifications, 28 | including but not limited to software source code, documentation 29 | source, and configuration files. 30 | 31 | "Object" form shall mean any form resulting from mechanical 32 | transformation or translation of a Source form, including but 33 | not limited to compiled object code, generated documentation, 34 | and conversions to other media types. 35 | 36 | "Work" shall mean the work of authorship, whether in Source or 37 | Object form, made available under the License, as indicated by a 38 | copyright notice that is included in or attached to the work 39 | (an example is provided in the Appendix below). 40 | 41 | "Derivative Works" shall mean any work, whether in Source or Object 42 | form, that is based on (or derived from) the Work and for which the 43 | editorial revisions, annotations, elaborations, or other modifications 44 | represent, as a whole, an original work of authorship. For the purposes 45 | of this License, Derivative Works shall not include works that remain 46 | separable from, or merely link (or bind by name) to the interfaces of, 47 | the Work and Derivative Works thereof. 48 | 49 | "Contribution" shall mean any work of authorship, including 50 | the original version of the Work and any modifications or additions 51 | to that Work or Derivative Works thereof, that is intentionally 52 | submitted to Licensor for inclusion in the Work by the copyright owner 53 | or by an individual or Legal Entity authorized to submit on behalf of 54 | the copyright owner. For the purposes of this definition, "submitted" 55 | means any form of electronic, verbal, or written communication sent 56 | to the Licensor or its representatives, including but not limited to 57 | communication on electronic mailing lists, source code control systems, 58 | and issue tracking systems that are managed by, or on behalf of, the 59 | Licensor for the purpose of discussing and improving the Work, but 60 | excluding communication that is conspicuously marked or otherwise 61 | designated in writing by the copyright owner as "Not a Contribution." 62 | 63 | "Contributor" shall mean Licensor and any individual or Legal Entity 64 | on behalf of whom a Contribution has been received by Licensor and 65 | subsequently incorporated within the Work. 66 | 67 | 2. Grant of Copyright License. Subject to the terms and conditions of 68 | this License, each Contributor hereby grants to You a perpetual, 69 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 70 | copyright license to reproduce, prepare Derivative Works of, 71 | publicly display, publicly perform, sublicense, and distribute the 72 | Work and such Derivative Works in Source or Object form. 73 | 74 | 3. Grant of Patent License. Subject to the terms and conditions of 75 | this License, each Contributor hereby grants to You a perpetual, 76 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 77 | (except as stated in this section) patent license to make, have made, 78 | use, offer to sell, sell, import, and otherwise transfer the Work, 79 | where such license applies only to those patent claims licensable 80 | by such Contributor that are necessarily infringed by their 81 | Contribution(s) alone or by combination of their Contribution(s) 82 | with the Work to which such Contribution(s) was submitted. If You 83 | institute patent litigation against any entity (including a 84 | cross-claim or counterclaim in a lawsuit) alleging that the Work 85 | or a Contribution incorporated within the Work constitutes direct 86 | or contributory patent infringement, then any patent licenses 87 | granted to You under this License for that Work shall terminate 88 | as of the date such litigation is filed. 89 | 90 | 4. Redistribution. You may reproduce and distribute copies of the 91 | Work or Derivative Works thereof in any medium, with or without 92 | modifications, and in Source or Object form, provided that You 93 | meet the following conditions: 94 | 95 | (a) You must give any other recipients of the Work or 96 | Derivative Works a copy of this License; and 97 | 98 | (b) You must cause any modified files to carry prominent notices 99 | stating that You changed the files; and 100 | 101 | (c) You must retain, in the Source form of any Derivative Works 102 | that You distribute, all copyright, patent, trademark, and 103 | attribution notices from the Source form of the Work, 104 | excluding those notices that do not pertain to any part of 105 | the Derivative Works; and 106 | 107 | (d) If the Work includes a "NOTICE" text file as part of its 108 | distribution, then any Derivative Works that You distribute must 109 | include a readable copy of the attribution notices contained 110 | within such NOTICE file, excluding those notices that do not 111 | pertain to any part of the Derivative Works, in at least one 112 | of the following places: within a NOTICE text file distributed 113 | as part of the Derivative Works; within the Source form or 114 | documentation, if provided along with the Derivative Works; or, 115 | within a display generated by the Derivative Works, if and 116 | wherever such third-party notices normally appear. The contents 117 | of the NOTICE file are for informational purposes only and 118 | do not modify the License. You may add Your own attribution 119 | notices within Derivative Works that You distribute, alongside 120 | or as an addendum to the NOTICE text from the Work, provided 121 | that such additional attribution notices cannot be construed 122 | as modifying the License. 123 | 124 | You may add Your own copyright statement to Your modifications and 125 | may provide additional or different license terms and conditions 126 | for use, reproduction, or distribution of Your modifications, or 127 | for any such Derivative Works as a whole, provided Your use, 128 | reproduction, and distribution of the Work otherwise complies with 129 | the conditions stated in this License. 130 | 131 | 5. Submission of Contributions. Unless You explicitly state otherwise, 132 | any Contribution intentionally submitted for inclusion in the Work 133 | by You to the Licensor shall be under the terms and conditions of 134 | this License, without any additional terms or conditions. 135 | Notwithstanding the above, nothing herein shall supersede or modify 136 | the terms of any separate license agreement you may have executed 137 | with Licensor regarding such Contributions. 138 | 139 | 6. Trademarks. This License does not grant permission to use the trade 140 | names, trademarks, service marks, or product names of the Licensor, 141 | except as required for reasonable and customary use in describing the 142 | origin of the Work and reproducing the content of the NOTICE file. 143 | 144 | 7. Disclaimer of Warranty. Unless required by applicable law or 145 | agreed to in writing, Licensor provides the Work (and each 146 | Contributor provides its Contributions) on an "AS IS" BASIS, 147 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 148 | implied, including, without limitation, any warranties or conditions 149 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 150 | PARTICULAR PURPOSE. You are solely responsible for determining the 151 | appropriateness of using or redistributing the Work and assume any 152 | risks associated with Your exercise of permissions under this License. 153 | 154 | 8. Limitation of Liability. In no event and under no legal theory, 155 | whether in tort (including negligence), contract, or otherwise, 156 | unless required by applicable law (such as deliberate and grossly 157 | negligent acts) or agreed to in writing, shall any Contributor be 158 | liable to You for damages, including any direct, indirect, special, 159 | incidental, or consequential damages of any character arising as a 160 | result of this License or out of the use or inability to use the 161 | Work (including but not limited to damages for loss of goodwill, 162 | work stoppage, computer failure or malfunction, or any and all 163 | other commercial damages or losses), even if such Contributor 164 | has been advised of the possibility of such damages. 165 | 166 | 9. Accepting Warranty or Additional Liability. While redistributing 167 | the Work or Derivative Works thereof, You may choose to offer, 168 | and charge a fee for, acceptance of support, warranty, indemnity, 169 | or other liability obligations and/or rights consistent with this 170 | License. However, in accepting such obligations, You may act only 171 | on Your own behalf and on Your sole responsibility, not on behalf 172 | of any other Contributor, and only if You agree to indemnify, 173 | defend, and hold each Contributor harmless for any liability 174 | incurred by, or claims asserted against, such Contributor by reason 175 | of your accepting any such warranty or additional liability. 176 | 177 | END OF TERMS AND CONDITIONS 178 | 179 | APPENDIX: How to apply the Apache License to your work. 180 | 181 | To apply the Apache License to your work, attach the following 182 | boilerplate notice, with the fields enclosed by brackets "[]" 183 | replaced with your own identifying information. (Don't include 184 | the brackets!) The text should be enclosed in the appropriate 185 | comment syntax for the file format. We also recommend that a 186 | file or class name and description of purpose be included on the 187 | same "printed page" as the copyright notice for easier 188 | identification within third-party archives. 189 | 190 | Copyright [yyyy] [name of copyright owner] 191 | 192 | Licensed under the Apache License, Version 2.0 (the "License"); 193 | you may not use this file except in compliance with the License. 194 | You may obtain a copy of the License at 195 | 196 | http://www.apache.org/licenses/LICENSE-2.0 197 | 198 | Unless required by applicable law or agreed to in writing, software 199 | distributed under the License is distributed on an "AS IS" BASIS, 200 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 201 | See the License for the specific language governing permissions and 202 | limitations under the License. 203 | -------------------------------------------------------------------------------- /util/raw_data.cc: -------------------------------------------------------------------------------- 1 | extern const double rawEstimateData[15][201] = { 2 | // precision 4 3 | { 11, 11.717, 12.207, 12.7896, 13.2882, 13.8204, 14.3772, 14.9342, 15.5202, 16.161, 16.7722, 17.4636, 18.0396, 18.6766, 19.3566, 20.0454, 20.7936, 21.4856, 22.2666, 22.9946, 23.766, 24.4692, 25.3638, 26.0764, 26.7864, 27.7602, 28.4814, 29.433, 30.2926, 31.0664, 31.9996, 32.7956, 33.5366, 34.5894, 35.5738, 36.2698, 37.3682, 38.0544, 39.2342, 40.0108, 40.7966, 41.9298, 42.8704, 43.6358, 44.5194, 45.773, 46.6772, 47.6174, 48.4888, 49.3304, 50.2506, 51.4996, 52.3824, 53.3078, 54.3984, 55.5838, 56.6618, 57.2174, 58.3514, 59.0802, 60.1482, 61.0376, 62.3598, 62.8078, 63.9744, 64.914, 65.781, 67.1806, 68.0594, 68.8446, 69.7928, 70.8248, 71.8324, 72.8598, 73.6246, 74.7014, 75.393, 76.6708, 77.2394, }, 4 | // precision 5 5 | { 23, 23.1194, 23.8208, 24.2318, 24.77, 25.2436, 25.7774, 26.2848, 26.8224, 27.3742, 27.9336, 28.503, 29.0494, 29.6292, 30.2124, 30.798, 31.367, 31.9728, 32.5944, 33.217, 33.8438, 34.3696, 35.0956, 35.7044, 36.324, 37.0668, 37.6698, 38.3644, 39.049, 39.6918, 40.4146, 41.082, 41.687, 42.5398, 43.2462, 43.857, 44.6606, 45.4168, 46.1248, 46.9222, 47.6804, 48.447, 49.3454, 49.9594, 50.7636, 51.5776, 52.331, 53.19, 53.9676, 54.7564, 55.5314, 56.4442, 57.3708, 57.9774, 58.9624, 59.8796, 60.755, 61.472, 62.2076, 63.1024, 63.8908, 64.7338, 65.7728, 66.629, 67.413, 68.3266, 69.1524, 70.2642, 71.1806, 72.0566, 72.9192, 73.7598, 74.3516, 75.5802, 76.4386, 77.4916, 78.1524, 79.1892, 79.8414, 80.8798, 81.8376, 82.4698, 83.7656, 84.331, 85.5914, 86.6012, 87.7016, 88.5582, 89.3394, 90.3544, 91.4912, 92.308, 93.3552, 93.9746, 95.2052, 95.727, 97.1322, 98.3944, 98.7588, 100.242, 101.1914, 102.2538, 102.8776, 103.6292, 105.1932, 105.9152, 107.0868, 107.6728, 108.7144, 110.3114, 110.8716, 111.245, 112.7908, 113.7064, 114.636, 115.7464, 116.1788, 117.7464, 118.4896, 119.6166, 120.5082, 121.7798, 122.9028, 123.4426, 124.8854, 125.705, 126.4652, 128.3464, 128.3462, 130.0398, 131.0342, 131.0042, 132.4766, 133.511, 134.7252, 135.425, 136.5172, 138.0572, 138.6694, 139.3712, 140.8598, 141.4594, 142.554, 143.4006, 144.7374, 146.1634, 146.8994, 147.605, 147.9304, 149.1636, 150.2468, 151.5876, 152.2096, 153.7032, 154.7146, 155.807, 156.9228, 157.0372, 158.5852, }, 6 | // precision 6 7 | { 46, 46.1902, 47.271, 47.8358, 48.8142, 49.2854, 50.317, 51.354, 51.8924, 52.9436, 53.4596, 54.5262, 55.6248, 56.1574, 57.2822, 57.837, 58.9636, 60.074, 60.7042, 61.7976, 62.4772, 63.6564, 64.7942, 65.5004, 66.686, 67.291, 68.5672, 69.8556, 70.4982, 71.8204, 72.4252, 73.7744, 75.0786, 75.8344, 77.0294, 77.8098, 79.0794, 80.5732, 81.1878, 82.5648, 83.2902, 84.6784, 85.3352, 86.8946, 88.3712, 89.0852, 90.499, 91.2686, 92.6844, 94.2234, 94.9732, 96.3356, 97.2286, 98.7262, 100.3284, 101.1048, 102.5962, 103.3562, 105.1272, 106.4184, 107.4974, 109.0822, 109.856, 111.48, 113.2834, 114.0208, 115.637, 116.5174, 118.0576, 119.7476, 120.427, 122.1326, 123.2372, 125.2788, 126.6776, 127.7926, 129.1952, 129.9564, 131.6454, 133.87, 134.5428, 136.2, 137.0294, 138.6278, 139.6782, 141.792, 143.3516, 144.2832, 146.0394, 147.0748, 148.4912, 150.849, 151.696, 153.5404, 154.073, 156.3714, 157.7216, 158.7328, 160.4208, 161.4184, 163.9424, 165.2772, 166.411, 168.1308, 168.769, 170.9258, 172.6828, 173.7502, 175.706, 176.3886, 179.0186, 180.4518, 181.927, 183.4172, 184.4114, 186.033, 188.5124, 189.5564, 191.6008, 192.4172, 193.8044, 194.997, 197.4548, 198.8948, 200.2346, 202.3086, 203.1548, 204.8842, 206.6508, 206.6772, 209.7254, 210.4752, 212.7228, 214.6614, 215.1676, 217.793, 218.0006, 219.9052, 221.66, 223.5588, 225.1636, 225.6882, 227.7126, 229.4502, 231.1978, 232.9756, 233.1654, 236.727, 238.1974, 237.7474, 241.1346, 242.3048, 244.1948, 245.3134, 246.879, 249.1204, 249.853, 252.6792, 253.857, 254.4486, 257.2362, 257.9534, 260.0286, 260.5632, 262.663, 264.723, 265.7566, 267.2566, 267.1624, 270.62, 272.8216, 273.2166, 275.2056, 276.2202, 278.3726, 280.3344, 281.9284, 283.9728, 284.1924, 286.4872, 287.587, 289.807, 291.1206, 292.769, 294.8708, 296.665, 297.1182, 299.4012, 300.6352, 302.1354, 304.1756, 306.1606, 307.3462, 308.5214, 309.4134, 310.8352, 313.9684, 315.837, 316.7796, 318.9858, }, 8 | // precision 7 9 | { 92, 93.4934, 94.9758, 96.4574, 97.9718, 99.4954, 101.5302, 103.0756, 104.6374, 106.1782, 107.7888, 109.9522, 111.592, 113.2532, 114.9086, 116.5938, 118.9474, 120.6796, 122.4394, 124.2176, 125.9768, 128.4214, 130.2528, 132.0102, 133.8658, 135.7278, 138.3044, 140.1316, 142.093, 144.0032, 145.9092, 148.6306, 150.5294, 152.5756, 154.6508, 156.662, 159.552, 161.3724, 163.617, 165.5754, 167.7872, 169.8444, 172.7988, 174.8606, 177.2118, 179.3566, 181.4476, 184.5882, 186.6816, 189.0824, 191.0258, 193.6048, 196.4436, 198.7274, 200.957, 203.147, 205.4364, 208.7592, 211.3386, 213.781, 215.8028, 218.656, 221.6544, 223.996, 226.4718, 229.1544, 231.6098, 234.5956, 237.0616, 239.5758, 242.4878, 244.5244, 248.2146, 250.724, 252.8722, 255.5198, 258.0414, 261.941, 264.9048, 266.87, 269.4304, 272.028, 274.4708, 278.37, 281.0624, 283.4668, 286.5532, 289.4352, 293.2564, 295.2744, 298.2118, 300.7472, 304.1456, 307.2928, 309.7504, 312.5528, 315.979, 318.2102, 322.1834, 324.3494, 327.325, 330.6614, 332.903, 337.2544, 339.9042, 343.215, 345.2864, 348.0814, 352.6764, 355.301, 357.139, 360.658, 363.1732, 366.5902, 369.9538, 373.0828, 375.922, 378.9902, 382.7328, 386.4538, 388.1136, 391.2234, 394.0878, 396.708, 401.1556, 404.1852, 406.6372, 409.6822, 412.7796, 416.6078, 418.4916, 422.131, 424.5376, 428.1988, 432.211, 434.4502, 438.5282, 440.912, 444.0448, 447.7432, 450.8524, 453.7988, 456.7858, 458.8868, 463.9886, 466.5064, 468.9124, 472.6616, 475.4682, 478.582, 481.304, 485.2738, 488.6894, 490.329, 496.106, 497.6908, 501.1374, 504.5322, 506.8848, 510.3324, 513.4512, 516.179, 520.4412, 522.6066, 526.167, 528.7794, 533.379, 536.067, 538.46, 542.9116, 545.692, 547.9546, 552.493, 555.2722, 557.335, 562.449, 564.2014, 569.0738, 571.0974, 574.8564, 578.2996, 581.409, 583.9704, 585.8098, 589.6528, 594.5998, 595.958, 600.068, 603.3278, 608.2016, 609.9632, 612.864, 615.43, 620.7794, 621.272, 625.8644, 629.206, 633.219, 634.5154, 638.6102, }, 10 | // precision 8 11 | { 184.2152, 187.2454, 190.2096, 193.6652, 196.6312, 199.6822, 203.249, 206.3296, 210.0038, 213.2074, 216.4612, 220.27, 223.5178, 227.4412, 230.8032, 234.1634, 238.1688, 241.6074, 245.6946, 249.2664, 252.8228, 257.0432, 260.6824, 264.9464, 268.6268, 272.2626, 276.8376, 280.4034, 284.8956, 288.8522, 292.7638, 297.3552, 301.3556, 305.7526, 309.9292, 313.8954, 318.8198, 322.7668, 327.298, 331.6688, 335.9466, 340.9746, 345.1672, 349.3474, 354.3028, 358.8912, 364.114, 368.4646, 372.9744, 378.4092, 382.6022, 387.843, 392.5684, 397.1652, 402.5426, 407.4152, 412.5388, 417.3592, 422.1366, 427.486, 432.3918, 437.5076, 442.509, 447.3834, 453.3498, 458.0668, 463.7346, 469.1228, 473.4528, 479.7, 484.644, 491.0518, 495.5774, 500.9068, 506.432, 512.1666, 517.434, 522.6644, 527.4894, 533.6312, 538.3804, 544.292, 550.5496, 556.0234, 562.8206, 566.6146, 572.4188, 579.117, 583.6762, 590.6576, 595.7864, 601.509, 607.5334, 612.9204, 619.772, 624.2924, 630.8654, 636.1836, 642.745, 649.1316, 655.0386, 660.0136, 666.6342, 671.6196, 678.1866, 684.4282, 689.3324, 695.4794, 702.5038, 708.129, 713.528, 720.3204, 726.463, 732.7928, 739.123, 744.7418, 751.2192, 756.5102, 762.6066, 769.0184, 775.2224, 781.4014, 787.7618, 794.1436, 798.6506, 805.6378, 811.766, 819.7514, 824.5776, 828.7322, 837.8048, 843.6302, 849.9336, 854.4798, 861.3388, 867.9894, 873.8196, 880.3136, 886.2308, 892.4588, 899.0816, 905.4076, 912.0064, 917.3878, 923.619, 929.998, 937.3482, 943.9506, 947.991, 955.1144, 962.203, 968.8222, 975.7324, 981.7826, 988.7666, 994.2648, 1000.3128, 1007.4082, 1013.7536, 1020.3376, 1026.7156, 1031.7478, 1037.4292, 1045.393, 1051.2278, 1058.3434, 1062.8726, 1071.884, 1076.806, 1082.9176, 1089.1678, 1095.5032, 1102.525, 1107.2264, 1115.315, 1120.93, 1127.252, 1134.1496, 1139.0408, 1147.5448, 1153.3296, 1158.1974, 1166.5262, 1174.3328, 1175.657, 1184.4222, 1190.9172, 1197.1292, 1204.4606, 1210.4578, 1218.8728, 1225.3336, 1226.6592, 1236.5768, 1241.363, 1249.4074, 1254.6566, 1260.8014, 1266.5454, 1274.5192, }, 12 | // precision 9 13 | { 369, 374.8294, 381.2452, 387.6698, 394.1464, 400.2024, 406.8782, 413.6598, 420.462, 427.2826, 433.7102, 440.7416, 447.9366, 455.1046, 462.285, 469.0668, 476.306, 483.8448, 491.301, 498.9886, 506.2422, 513.8138, 521.7074, 529.7428, 537.8402, 545.1664, 553.3534, 561.594, 569.6886, 577.7876, 585.65, 594.228, 602.8036, 611.1666, 620.0818, 628.0824, 637.2574, 646.302, 655.1644, 664.0056, 672.3802, 681.7192, 690.5234, 700.2084, 708.831, 718.485, 728.1112, 737.4764, 746.76, 756.3368, 766.5538, 775.5058, 785.2646, 795.5902, 804.3818, 814.8998, 824.9532, 835.2062, 845.2798, 854.4728, 864.9582, 875.3292, 886.171, 896.781, 906.5716, 916.7048, 927.5322, 937.875, 949.3972, 958.3464, 969.7274, 980.2834, 992.1444, 1003.4264, 1013.0166, 1024.018, 1035.0438, 1046.34, 1057.6856, 1068.9836, 1079.0312, 1091.677, 1102.3188, 1113.4846, 1124.4424, 1135.739, 1147.1488, 1158.9202, 1169.406, 1181.5342, 1193.2834, 1203.8954, 1216.3286, 1226.2146, 1239.6684, 1251.9946, 1262.123, 1275.4338, 1285.7378, 1296.076, 1308.9692, 1320.4964, 1333.0998, 1343.9864, 1357.7754, 1368.3208, 1380.4838, 1392.7388, 1406.0758, 1416.9098, 1428.9728, 1440.9228, 1453.9292, 1462.617, 1476.05, 1490.2996, 1500.6128, 1513.7392, 1524.5174, 1536.6322, 1548.2584, 1562.3766, 1572.423, 1587.1232, 1596.5164, 1610.5938, 1622.5972, 1633.1222, 1647.7674, 1658.5044, 1671.57, 1683.7044, 1695.4142, 1708.7102, 1720.6094, 1732.6522, 1747.841, 1756.4072, 1769.9786, 1782.3276, 1797.5216, 1808.3186, 1819.0694, 1834.354, 1844.575, 1856.2808, 1871.1288, 1880.7852, 1893.9622, 1906.3418, 1920.6548, 1932.9302, 1945.8584, 1955.473, 1968.8248, 1980.6446, 1995.9598, 2008.349, 2019.8556, 2033.0334, 2044.0206, 2059.3956, 2069.9174, 2082.6084, 2093.7036, 2106.6108, 2118.9124, 2132.301, 2144.7628, 2159.8422, 2171.0212, 2183.101, 2193.5112, 2208.052, 2221.3194, 2233.3282, 2247.295, 2257.7222, 2273.342, 2286.5638, 2299.6786, 2310.8114, 2322.3312, 2335.516, 2349.874, 2363.5968, 2373.865, 2387.1918, 2401.8328, 2414.8496, 2424.544, 2436.7592, 2447.1682, 2464.1958, 2474.3438, 2489.0006, 2497.4526, 2513.6586, 2527.19, 2540.7028, 2553.768, }, 14 | // precision 10 15 | { 738.1256, 750.4234, 763.1064, 775.4732, 788.4636, 801.0644, 814.488, 827.9654, 841.0832, 854.7864, 868.1992, 882.2176, 896.5228, 910.1716, 924.7752, 938.899, 953.6126, 968.6492, 982.9474, 998.5214, 1013.1064, 1028.6364, 1044.2468, 1059.4588, 1075.3832, 1091.0584, 1106.8606, 1123.3868, 1139.5062, 1156.1862, 1172.463, 1189.339, 1206.1936, 1223.1292, 1240.1854, 1257.2908, 1275.3324, 1292.8518, 1310.5204, 1328.4854, 1345.9318, 1364.552, 1381.4658, 1400.4256, 1419.849, 1438.152, 1456.8956, 1474.8792, 1494.118, 1513.62, 1532.5132, 1551.9322, 1570.7726, 1590.6086, 1610.5332, 1630.5918, 1650.4294, 1669.7662, 1690.4106, 1710.7338, 1730.9012, 1750.4486, 1770.1556, 1791.6338, 1812.7312, 1833.6264, 1853.9526, 1874.8742, 1896.8326, 1918.1966, 1939.5594, 1961.07, 1983.037, 2003.1804, 2026.071, 2047.4884, 2070.0848, 2091.2944, 2114.333, 2135.9626, 2158.2902, 2181.0814, 2202.0334, 2224.4832, 2246.39, 2269.7202, 2292.1714, 2314.2358, 2338.9346, 2360.891, 2384.0264, 2408.3834, 2430.1544, 2454.8684, 2476.9896, 2501.4368, 2522.8702, 2548.0408, 2570.6738, 2593.5208, 2617.0158, 2640.2302, 2664.0962, 2687.4986, 2714.2588, 2735.3914, 2759.6244, 2781.8378, 2808.0072, 2830.6516, 2856.2454, 2877.2136, 2903.4546, 2926.785, 2951.2294, 2976.468, 3000.867, 3023.6508, 3049.91, 3073.5984, 3098.162, 3121.5564, 3146.2328, 3170.9484, 3195.5902, 3221.3346, 3242.7032, 3271.6112, 3296.5546, 3317.7376, 3345.072, 3369.9518, 3394.326, 3418.1818, 3444.6926, 3469.086, 3494.2754, 3517.8698, 3544.248, 3565.3768, 3588.7234, 3616.979, 3643.7504, 3668.6812, 3695.72, 3719.7392, 3742.6224, 3770.4456, 3795.6602, 3819.9058, 3844.002, 3869.517, 3895.6824, 3920.8622, 3947.1364, 3973.985, 3995.4772, 4021.62, 4046.628, 4074.65, 4096.2256, 4121.831, 4146.6406, 4173.276, 4195.0744, 4223.9696, 4251.3708, 4272.9966, 4300.8046, 4326.302, 4353.1248, 4374.312, 4403.0322, 4426.819, 4450.0598, 4478.5206, 4504.8116, 4528.8928, 4553.9584, 4578.8712, 4603.8384, 4632.3872, 4655.5128, 4675.821, 4704.6222, 4731.9862, 4755.4174, 4781.2628, 4804.332, 4832.3048, 4862.8752, 4883.4148, 4906.9544, 4935.3516, 4954.3532, 4984.0248, 5011.217, 5035.3258, 5057.3672, 5084.1828, }, 16 | // precision 11 17 | { 1477, 1501.6014, 1526.5802, 1551.7942, 1577.3042, 1603.2062, 1629.8402, 1656.2292, 1682.9462, 1709.9926, 1737.3026, 1765.4252, 1793.0578, 1821.6092, 1849.626, 1878.5568, 1908.527, 1937.5154, 1967.1874, 1997.3878, 2027.37, 2058.1972, 2089.5728, 2120.1012, 2151.9668, 2183.292, 2216.0772, 2247.8578, 2280.6562, 2313.041, 2345.714, 2380.3112, 2414.1806, 2447.9854, 2481.656, 2516.346, 2551.5154, 2586.8378, 2621.7448, 2656.6722, 2693.5722, 2729.1462, 2765.4124, 2802.8728, 2838.898, 2876.408, 2913.4926, 2951.4938, 2989.6776, 3026.282, 3065.7704, 3104.1012, 3143.7388, 3181.6876, 3221.1872, 3261.5048, 3300.0214, 3339.806, 3381.409, 3421.4144, 3461.4294, 3502.2286, 3544.651, 3586.6156, 3627.337, 3670.083, 3711.1538, 3753.5094, 3797.01, 3838.6686, 3882.1678, 3922.8116, 3967.9978, 4009.9204, 4054.3286, 4097.5706, 4140.6014, 4185.544, 4229.5976, 4274.583, 4316.9438, 4361.672, 4406.2786, 4451.8628, 4496.1834, 4543.505, 4589.1816, 4632.5188, 4678.2294, 4724.8908, 4769.0194, 4817.052, 4861.4588, 4910.1596, 4956.4344, 5002.5238, 5048.13, 5093.6374, 5142.8162, 5187.7894, 5237.3984, 5285.6078, 5331.0858, 5379.1036, 5428.6258, 5474.6018, 5522.7618, 5571.5822, 5618.59, 5667.9992, 5714.88, 5763.454, 5808.6982, 5860.3644, 5910.2914, 5953.571, 6005.9232, 6055.1914, 6104.5882, 6154.5702, 6199.7036, 6251.1764, 6298.7596, 6350.0302, 6398.061, 6448.4694, 6495.933, 6548.0474, 6597.7166, 6646.9416, 6695.9208, 6742.6328, 6793.5276, 6842.1934, 6894.2372, 6945.3864, 6996.9228, 7044.2372, 7094.1374, 7142.2272, 7192.2942, 7238.8338, 7288.9006, 7344.0908, 7394.8544, 7443.5176, 7490.4148, 7542.9314, 7595.6738, 7641.9878, 7694.3688, 7743.0448, 7797.522, 7845.53, 7899.594, 7950.3132, 7996.455, 8050.9442, 8092.9114, 8153.1374, 8197.4472, 8252.8278, 8301.8728, 8348.6776, 8401.4698, 8453.551, 8504.6598, 8553.8944, 8604.1276, 8657.6514, 8710.3062, 8758.908, 8807.8706, 8862.1702, 8910.4668, 8960.77, 9007.2766, 9063.164, 9121.0534, 9164.1354, 9218.1594, 9267.767, 9319.0594, 9372.155, 9419.7126, 9474.3722, 9520.1338, 9572.368, 9622.7702, 9675.8448, 9726.5396, 9778.7378, 9827.6554, 9878.1922, 9928.7782, 9978.3984, 10026.578, 10076.5626, 10137.1618, 10177.5244, 10229.9176, }, 18 | // precision 12 19 | { 2954, 3003.4782, 3053.3568, 3104.3666, 3155.324, 3206.9598, 3259.648, 3312.539, 3366.1474, 3420.2576, 3474.8376, 3530.6076, 3586.451, 3643.38, 3700.4104, 3757.5638, 3815.9676, 3875.193, 3934.838, 3994.8548, 4055.018, 4117.1742, 4178.4482, 4241.1294, 4304.4776, 4367.4044, 4431.8724, 4496.3732, 4561.4304, 4627.5326, 4693.949, 4761.5532, 4828.7256, 4897.6182, 4965.5186, 5034.4528, 5104.865, 5174.7164, 5244.6828, 5316.6708, 5387.8312, 5459.9036, 5532.476, 5604.8652, 5679.6718, 5753.757, 5830.2072, 5905.2828, 5980.0434, 6056.6264, 6134.3192, 6211.5746, 6290.0816, 6367.1176, 6447.9796, 6526.5576, 6606.1858, 6686.9144, 6766.1142, 6847.0818, 6927.9664, 7010.9096, 7091.0816, 7175.3962, 7260.3454, 7344.018, 7426.4214, 7511.3106, 7596.0686, 7679.8094, 7765.818, 7852.4248, 7936.834, 8022.363, 8109.5066, 8200.4554, 8288.5832, 8373.366, 8463.4808, 8549.7682, 8642.0522, 8728.3288, 8820.9528, 8907.727, 9001.0794, 9091.2522, 9179.988, 9269.852, 9362.6394, 9453.642, 9546.9024, 9640.6616, 9732.6622, 9824.3254, 9917.7484, 10007.9392, 10106.7508, 10196.2152, 10289.8114, 10383.5494, 10482.3064, 10576.8734, 10668.7872, 10764.7156, 10862.0196, 10952.793, 11049.9748, 11146.0702, 11241.4492, 11339.2772, 11434.2336, 11530.741, 11627.6136, 11726.311, 11821.5964, 11918.837, 12015.3724, 12113.0162, 12213.0424, 12306.9804, 12408.4518, 12504.8968, 12604.586, 12700.9332, 12798.705, 12898.5142, 12997.0488, 13094.788, 13198.475, 13292.7764, 13392.9698, 13486.8574, 13590.1616, 13686.5838, 13783.6264, 13887.2638, 13992.0978, 14081.0844, 14189.9956, 14280.0912, 14382.4956, 14486.4384, 14588.1082, 14686.2392, 14782.276, 14888.0284, 14985.1864, 15088.8596, 15187.0998, 15285.027, 15383.6694, 15495.8266, 15591.3736, 15694.2008, 15790.3246, 15898.4116, 15997.4522, 16095.5014, 16198.8514, 16291.7492, 16402.6424, 16499.1266, 16606.2436, 16697.7186, 16796.3946, 16902.3376, 17005.7672, 17100.814, 17206.8282, 17305.8262, 17416.0744, 17508.4092, 17617.0178, 17715.4554, 17816.758, 17920.1748, 18012.9236, 18119.7984, 18223.2248, 18324.2482, 18426.6276, 18525.0932, 18629.8976, 18733.2588, 18831.0466, 18940.1366, 19032.2696, 19131.729, 19243.4864, 19349.6932, 19442.866, 19547.9448, 19653.2798, 19754.4034, 19854.0692, 19965.1224, 20065.1774, 20158.2212, 20253.353, 20366.3264, 20463.22, }, 20 | // precision 13 21 | { 5908.5052, 6007.2672, 6107.347, 6208.5794, 6311.2622, 6414.5514, 6519.3376, 6625.6952, 6732.5988, 6841.3552, 6950.5972, 7061.3082, 7173.5646, 7287.109, 7401.8216, 7516.4344, 7633.3802, 7751.2962, 7870.3784, 7990.292, 8110.79, 8233.4574, 8356.6036, 8482.2712, 8607.7708, 8735.099, 8863.1858, 8993.4746, 9123.8496, 9255.6794, 9388.5448, 9522.7516, 9657.3106, 9792.6094, 9930.5642, 10068.794, 10206.7256, 10347.81, 10490.3196, 10632.0778, 10775.9916, 10920.4662, 11066.124, 11213.073, 11358.0362, 11508.1006, 11659.1716, 11808.7514, 11959.4884, 12112.1314, 12265.037, 12420.3756, 12578.933, 12734.311, 12890.0006, 13047.2144, 13207.3096, 13368.5144, 13528.024, 13689.847, 13852.7528, 14018.3168, 14180.5372, 14346.9668, 14513.5074, 14677.867, 14846.2186, 15017.4186, 15184.9716, 15356.339, 15529.2972, 15697.3578, 15871.8686, 16042.187, 16216.4094, 16389.4188, 16565.9126, 16742.3272, 16919.0042, 17094.7592, 17273.965, 17451.8342, 17634.4254, 17810.5984, 17988.9242, 18171.051, 18354.7938, 18539.466, 18721.0408, 18904.9972, 19081.867, 19271.9118, 19451.8694, 19637.9816, 19821.2922, 20013.1292, 20199.3858, 20387.8726, 20572.9514, 20770.7764, 20955.1714, 21144.751, 21329.9952, 21520.709, 21712.7016, 21906.3868, 22096.2626, 22286.0524, 22475.051, 22665.5098, 22862.8492, 23055.5294, 23249.6138, 23437.848, 23636.273, 23826.093, 24020.3296, 24213.3896, 24411.7392, 24602.9614, 24805.7952, 24998.1552, 25193.9588, 25389.0166, 25585.8392, 25780.6976, 25981.2728, 26175.977, 26376.5252, 26570.1964, 26773.387, 26962.9812, 27163.0586, 27368.164, 27565.0534, 27758.7428, 27961.1276, 28163.2324, 28362.3816, 28565.7668, 28758.644, 28956.9768, 29163.4722, 29354.7026, 29561.1186, 29767.9948, 29959.9986, 30164.0492, 30366.9818, 30562.5338, 30762.9928, 30976.1592, 31166.274, 31376.722, 31570.3734, 31770.809, 31974.8934, 32179.5286, 32387.5442, 32582.3504, 32794.076, 32989.9528, 33191.842, 33392.4684, 33595.659, 33801.8672, 34000.3414, 34200.0922, 34402.6792, 34610.0638, 34804.0084, 35011.13, 35218.669, 35418.6634, 35619.0792, 35830.6534, 36028.4966, 36229.7902, 36438.6422, 36630.7764, 36833.3102, 37048.6728, 37247.3916, 37453.5904, 37669.3614, 37854.5526, 38059.305, 38268.0936, 38470.2516, 38674.7064, 38876.167, 39068.3794, 39281.9144, 39492.8566, 39684.8628, 39898.4108, 40093.1836, 40297.6858, 40489.7086, 40717.2424, }, 22 | // precision 14 23 | { 11817.475, 12015.0046, 12215.3792, 12417.7504, 12623.1814, 12830.0086, 13040.0072, 13252.503, 13466.178, 13683.2738, 13902.0344, 14123.9798, 14347.394, 14573.7784, 14802.6894, 15033.6824, 15266.9134, 15502.8624, 15741.4944, 15980.7956, 16223.8916, 16468.6316, 16715.733, 16965.5726, 17217.204, 17470.666, 17727.8516, 17986.7886, 18247.6902, 18510.9632, 18775.304, 19044.7486, 19314.4408, 19587.202, 19862.2576, 20135.924, 20417.0324, 20697.9788, 20979.6112, 21265.0274, 21550.723, 21841.6906, 22132.162, 22428.1406, 22722.127, 23020.5606, 23319.7394, 23620.4014, 23925.2728, 24226.9224, 24535.581, 24845.505, 25155.9618, 25470.3828, 25785.9702, 26103.7764, 26420.4132, 26742.0186, 27062.8852, 27388.415, 27714.6024, 28042.296, 28365.4494, 28701.1526, 29031.8008, 29364.2156, 29704.497, 30037.1458, 30380.111, 30723.8168, 31059.5114, 31404.9498, 31751.6752, 32095.2686, 32444.7792, 32794.767, 33145.204, 33498.4226, 33847.6502, 34209.006, 34560.849, 34919.4838, 35274.9778, 35635.1322, 35996.3266, 36359.1394, 36722.8266, 37082.8516, 37447.7354, 37815.9606, 38191.0692, 38559.4106, 38924.8112, 39294.6726, 39663.973, 40042.261, 40416.2036, 40779.2036, 41161.6436, 41540.9014, 41921.1998, 42294.7698, 42678.5264, 43061.3464, 43432.375, 43818.432, 44198.6598, 44583.0138, 44970.4794, 45353.924, 45729.858, 46118.2224, 46511.5724, 46900.7386, 47280.6964, 47668.1472, 48055.6796, 48446.9436, 48838.7146, 49217.7296, 49613.7796, 50010.7508, 50410.0208, 50793.7886, 51190.2456, 51583.1882, 51971.0796, 52376.5338, 52763.319, 53165.5534, 53556.5594, 53948.2702, 54346.352, 54748.7914, 55138.577, 55543.4824, 55941.1748, 56333.7746, 56745.1552, 57142.7944, 57545.2236, 57935.9956, 58348.5268, 58737.5474, 59158.5962, 59542.6896, 59958.8004, 60349.3788, 60755.0212, 61147.6144, 61548.194, 61946.0696, 62348.6042, 62763.603, 63162.781, 63560.635, 63974.3482, 64366.4908, 64771.5876, 65176.7346, 65597.3916, 65995.915, 66394.0384, 66822.9396, 67203.6336, 67612.2032, 68019.0078, 68420.0388, 68821.22, 69235.8388, 69640.0724, 70055.155, 70466.357, 70863.4266, 71276.2482, 71677.0306, 72080.2006, 72493.0214, 72893.5952, 73314.5856, 73714.9852, 74125.3022, 74521.2122, 74933.6814, 75341.5904, 75743.0244, 76166.0278, 76572.1322, 76973.1028, 77381.6284, 77800.6092, 78189.328, 78607.0962, 79012.2508, 79407.8358, 79825.725, 80238.701, 80646.891, 81035.6436, 81460.0448, 81876.3884, }, 24 | // precision 15 25 | { 23635.0036, 24030.8034, 24431.4744, 24837.1524, 25246.7928, 25661.326, 26081.3532, 26505.2806, 26933.9892, 27367.7098, 27805.318, 28248.799, 28696.4382, 29148.8244, 29605.5138, 30066.8668, 30534.2344, 31006.32, 31480.778, 31962.2418, 32447.3324, 32938.0232, 33432.731, 33930.728, 34433.9896, 34944.1402, 35457.5588, 35974.5958, 36497.3296, 37021.9096, 37554.326, 38088.0826, 38628.8816, 39171.3192, 39723.2326, 40274.5554, 40832.3142, 41390.613, 41959.5908, 42532.5466, 43102.0344, 43683.5072, 44266.694, 44851.2822, 45440.7862, 46038.0586, 46640.3164, 47241.064, 47846.155, 48454.7396, 49076.9168, 49692.542, 50317.4778, 50939.65, 51572.5596, 52210.2906, 52843.7396, 53481.3996, 54127.236, 54770.406, 55422.6598, 56078.7958, 56736.7174, 57397.6784, 58064.5784, 58730.308, 59404.9784, 60077.0864, 60751.9158, 61444.1386, 62115.817, 62808.7742, 63501.4774, 64187.5454, 64883.6622, 65582.7468, 66274.5318, 66976.9276, 67688.7764, 68402.138, 69109.6274, 69822.9706, 70543.6108, 71265.5202, 71983.3848, 72708.4656, 73433.384, 74158.4664, 74896.4868, 75620.9564, 76362.1434, 77098.3204, 77835.7662, 78582.6114, 79323.9902, 80067.8658, 80814.9246, 81567.0136, 82310.8536, 83061.9952, 83821.4096, 84580.8608, 85335.547, 86092.5802, 86851.6506, 87612.311, 88381.2016, 89146.3296, 89907.8974, 90676.846, 91451.4152, 92224.5518, 92995.8686, 93763.5066, 94551.2796, 95315.1944, 96096.1806, 96881.0918, 97665.679, 98442.68, 99229.3002, 100011.0994, 100790.6386, 101580.1564, 102377.7484, 103152.1392, 103944.2712, 104730.216, 105528.6336, 106324.9398, 107117.6706, 107890.3988, 108695.2266, 109485.238, 110294.7876, 111075.0958, 111878.0496, 112695.2864, 113464.5486, 114270.0474, 115068.608, 115884.3626, 116673.2588, 117483.3716, 118275.097, 119085.4092, 119879.2808, 120687.5868, 121499.9944, 122284.916, 123095.9254, 123912.5038, 124709.0454, 125503.7182, 126323.259, 127138.9412, 127943.8294, 128755.646, 129556.5354, 130375.3298, 131161.4734, 131971.1962, 132787.5458, 133588.1056, 134431.351, 135220.2906, 136023.398, 136846.6558, 137667.0004, 138463.663, 139283.7154, 140074.6146, 140901.3072, 141721.8548, 142543.2322, 143356.1096, 144173.7412, 144973.0948, 145794.3162, 146609.5714, 147420.003, 148237.9784, 149050.5696, 149854.761, 150663.1966, 151494.0754, 152313.1416, 153112.6902, 153935.7206, 154746.9262, 155559.547, 156401.9746, 157228.7036, 158008.7254, 158820.75, 159646.9184, 160470.4458, 161279.5348, 162093.3114, 162918.542, 163729.2842, }, 26 | // precision 16 27 | { 47271, 48062.3584, 48862.7074, 49673.152, 50492.8416, 51322.9514, 52161.03, 53009.407, 53867.6348, 54734.206, 55610.5144, 56496.2096, 57390.795, 58297.268, 59210.6448, 60134.665, 61068.0248, 62010.4472, 62962.5204, 63923.5742, 64895.0194, 65876.4182, 66862.6136, 67862.6968, 68868.8908, 69882.8544, 70911.271, 71944.0924, 72990.0326, 74040.692, 75100.6336, 76174.7826, 77252.5998, 78340.2974, 79438.2572, 80545.4976, 81657.2796, 82784.6336, 83915.515, 85059.7362, 86205.9368, 87364.4424, 88530.3358, 89707.3744, 90885.9638, 92080.197, 93275.5738, 94479.391, 95695.918, 96919.2236, 98148.4602, 99382.3474, 100625.6974, 101878.0284, 103141.6278, 104409.4588, 105686.2882, 106967.5402, 108261.6032, 109548.1578, 110852.0728, 112162.231, 113479.0072, 114806.2626, 116137.9072, 117469.5048, 118813.5186, 120165.4876, 121516.2556, 122875.766, 124250.5444, 125621.2222, 127003.2352, 128387.848, 129775.2644, 131181.7776, 132577.3086, 133979.9458, 135394.1132, 136800.9078, 138233.217, 139668.5308, 141085.212, 142535.2122, 143969.0684, 145420.2872, 146878.1542, 148332.7572, 149800.3202, 151269.66, 152743.6104, 154213.0948, 155690.288, 157169.4246, 158672.1756, 160160.059, 161650.6854, 163145.7772, 164645.6726, 166159.1952, 167682.1578, 169177.3328, 170700.0118, 172228.8964, 173732.6664, 175265.5556, 176787.799, 178317.111, 179856.6914, 181400.865, 182943.4612, 184486.742, 186033.4698, 187583.7886, 189148.1868, 190688.4526, 192250.1926, 193810.9042, 195354.2972, 196938.7682, 198493.5898, 200079.2824, 201618.912, 203205.5492, 204765.5798, 206356.1124, 207929.3064, 209498.7196, 211086.229, 212675.1324, 214256.7892, 215826.2392, 217412.8474, 218995.6724, 220618.6038, 222207.1166, 223781.0364, 225387.4332, 227005.7928, 228590.4336, 230217.8738, 231805.1054, 233408.9, 234995.3432, 236601.4956, 238190.7904, 239817.2548, 241411.2832, 243002.4066, 244640.1884, 246255.3128, 247849.3508, 249479.9734, 251106.8822, 252705.027, 254332.9242, 255935.129, 257526.9014, 259154.772, 260777.625, 262390.253, 264004.4906, 265643.59, 267255.4076, 268873.426, 270470.7252, 272106.4804, 273722.4456, 275337.794, 276945.7038, 278592.9154, 280204.3726, 281841.1606, 283489.171, 285130.1716, 286735.3362, 288364.7164, 289961.1814, 291595.5524, 293285.683, 294899.6668, 296499.3434, 298128.0462, 299761.8946, 301394.2424, 302997.6748, 304615.1478, 306269.7724, 307886.114, 309543.1028, 311153.2862, 312782.8546, 314421.2008, 316033.2438, 317692.9636, 319305.2648, 320948.7406, 322566.3364, 324228.4224, 325847.1542, }, 28 | // precision 17 29 | { 94542, 96125.811, 97728.019, 99348.558, 100987.9705, 102646.7565, 104324.5125, 106021.7435, 107736.7865, 109469.272, 111223.9465, 112995.219, 114787.432, 116593.152, 118422.71, 120267.2345, 122134.6765, 124020.937, 125927.2705, 127851.255, 129788.9485, 131751.016, 133726.8225, 135722.592, 137736.789, 139770.568, 141821.518, 143891.343, 145982.1415, 148095.387, 150207.526, 152355.649, 154515.6415, 156696.05, 158887.7575, 161098.159, 163329.852, 165569.053, 167837.4005, 170121.6165, 172420.4595, 174732.6265, 177062.77, 179412.502, 181774.035, 184151.939, 186551.6895, 188965.691, 191402.8095, 193857.949, 196305.0775, 198774.6715, 201271.2585, 203764.78, 206299.3695, 208818.1365, 211373.115, 213946.7465, 216532.076, 219105.541, 221714.5375, 224337.5135, 226977.5125, 229613.0655, 232270.2685, 234952.2065, 237645.3555, 240331.1925, 243034.517, 245756.0725, 248517.6865, 251232.737, 254011.3955, 256785.995, 259556.44, 262368.335, 265156.911, 267965.266, 270785.583, 273616.0495, 276487.4835, 279346.639, 282202.509, 285074.3885, 287942.2855, 290856.018, 293774.0345, 296678.5145, 299603.6355, 302552.6575, 305492.9785, 308466.8605, 311392.581, 314347.538, 317319.4295, 320285.9785, 323301.7325, 326298.3235, 329301.3105, 332301.987, 335309.791, 338370.762, 341382.923, 344431.1265, 347464.1545, 350507.28, 353619.2345, 356631.2005, 359685.203, 362776.7845, 365886.488, 368958.2255, 372060.6825, 375165.4335, 378237.935, 381328.311, 384430.5225, 387576.425, 390683.242, 393839.648, 396977.8425, 400101.9805, 403271.296, 406409.8425, 409529.5485, 412678.7, 415847.423, 419020.8035, 422157.081, 425337.749, 428479.6165, 431700.902, 434893.1915, 438049.582, 441210.5415, 444379.2545, 447577.356, 450741.931, 453959.548, 457137.0935, 460329.846, 463537.4815, 466732.3345, 469960.5615, 473164.681, 476347.6345, 479496.173, 482813.1645, 486025.6995, 489249.4885, 492460.1945, 495675.8805, 498908.0075, 502131.802, 505374.3855, 508550.9915, 511806.7305, 515026.776, 518217.0005, 521523.9855, 524705.9855, 527950.997, 531210.0265, 534472.497, 537750.7315, 540926.922, 544207.094, 547429.4345, 550666.3745, 553975.3475, 557150.7185, 560399.6165, 563662.697, 566916.7395, 570146.1215, 573447.425, 576689.6245, 579874.5745, 583202.337, 586503.0255, 589715.635, 592910.161, 596214.3885, 599488.035, 602740.92, 605983.0685, 609248.67, 612491.3605, 615787.912, 619107.5245, 622307.9555, 625577.333, 628840.4385, 632085.2155, 635317.6135, 638691.7195, 641887.467, 645139.9405, 648441.546, 651666.252, 654941.845, }, 30 | // precision 18 31 | { 189084, 192250.913, 195456.774, 198696.946, 201977.762, 205294.444, 208651.754, 212042.099, 215472.269, 218941.91, 222443.912, 225996.845, 229568.199, 233193.568, 236844.457, 240543.233, 244279.475, 248044.27, 251854.588, 255693.2, 259583.619, 263494.621, 267445.385, 271454.061, 275468.769, 279549.456, 283646.446, 287788.198, 291966.099, 296181.164, 300431.469, 304718.618, 309024.004, 313393.508, 317760.803, 322209.731, 326675.061, 331160.627, 335654.47, 340241.442, 344841.833, 349467.132, 354130.629, 358819.432, 363574.626, 368296.587, 373118.482, 377914.93, 382782.301, 387680.669, 392601.981, 397544.323, 402529.115, 407546.018, 412593.658, 417638.657, 422762.865, 427886.169, 433017.167, 438213.273, 443441.254, 448692.421, 453937.533, 459239.049, 464529.569, 469910.083, 475274.03, 480684.473, 486070.26, 491515.237, 496995.651, 502476.617, 507973.609, 513497.19, 519083.233, 524726.509, 530305.505, 535945.728, 541584.404, 547274.055, 552967.236, 558667.862, 564360.216, 570128.148, 575965.08, 581701.952, 587532.523, 593361.144, 599246.128, 605033.418, 610958.779, 616837.117, 622772.818, 628672.04, 634675.369, 640574.831, 646585.739, 652574.547, 658611.217, 664642.684, 670713.914, 676737.681, 682797.313, 688837.897, 694917.874, 701009.882, 707173.648, 713257.254, 719415.392, 725636.761, 731710.697, 737906.209, 744103.074, 750313.39, 756504.185, 762712.579, 768876.985, 775167.859, 781359, 787615.959, 793863.597, 800245.477, 806464.582, 812785.294, 819005.925, 825403.057, 831676.197, 837936.284, 844266.968, 850642.711, 856959.756, 863322.774, 869699.931, 876102.478, 882355.787, 888694.463, 895159.952, 901536.143, 907872.631, 914293.672, 920615.14, 927130.974, 933409.404, 939922.178, 946331.47, 952745.93, 959209.264, 965590.224, 972077.284, 978501.961, 984953.19, 991413.271, 997817.479, 1004222.658, 1010725.676, 1017177.138, 1023612.529, 1030098.236, 1036493.719, 1043112.207, 1049537.036, 1056008.096, 1062476.184, 1068942.337, 1075524.95, 1081932.864, 1088426.025, 1094776.005, 1101327.448, 1107901.673, 1114423.639, 1120884.602, 1127324.923, 1133794.24, 1140328.886, 1146849.376, 1153346.682, 1159836.502, 1166478.703, 1172953.304, 1179391.502, 1185950.982, 1192544.052, 1198913.41, 1205430.994, 1212015.525, 1218674.042, 1225121.683, 1231551.101, 1238126.379, 1244673.795, 1251260.649, 1257697.86, 1264320.983, 1270736.319, 1277274.694, 1283804.95, 1290211.514, 1296858.568, 1303455.691, } 32 | }; 33 | 34 | extern const double biasData[15][201] = { 35 | // precision 4 36 | { 10, 9.717, 9.207, 8.7896, 8.2882, 7.8204, 7.3772, 6.9342, 6.5202, 6.161, 5.7722, 5.4636, 5.0396, 4.6766, 4.3566, 4.0454, 3.7936, 3.4856, 3.2666, 2.9946, 2.766, 2.4692, 2.3638, 2.0764, 1.7864, 1.7602, 1.4814, 1.433, 1.2926, 1.0664, 0.999600000000001, 0.7956, 0.5366, 0.589399999999998, 0.573799999999999, 0.269799999999996, 0.368200000000002, 0.0544000000000011, 0.234200000000001, 0.0108000000000033, -0.203400000000002, -0.0701999999999998, -0.129600000000003, -0.364199999999997, -0.480600000000003, -0.226999999999997, -0.322800000000001, -0.382599999999996, -0.511200000000002, -0.669600000000003, -0.749400000000001, -0.500399999999999, -0.617600000000003, -0.6922, -0.601599999999998, -0.416200000000003, -0.338200000000001, -0.782600000000002, -0.648600000000002, -0.919800000000002, -0.851799999999997, -0.962400000000002, -0.6402, -1.1922, -1.0256, -1.086, -1.21899999999999, -0.819400000000002, -0.940600000000003, -1.1554, -1.2072, -1.1752, -1.16759999999999, -1.14019999999999, -1.3754, -1.29859999999999, -1.607, -1.3292, -1.7606, }, 37 | // precision 5 38 | { 22, 21.1194, 20.8208, 20.2318, 19.77, 19.2436, 18.7774, 18.2848, 17.8224, 17.3742, 16.9336, 16.503, 16.0494, 15.6292, 15.2124, 14.798, 14.367, 13.9728, 13.5944, 13.217, 12.8438, 12.3696, 12.0956, 11.7044, 11.324, 11.0668, 10.6698, 10.3644, 10.049, 9.6918, 9.4146, 9.082, 8.687, 8.5398, 8.2462, 7.857, 7.6606, 7.4168, 7.1248, 6.9222, 6.6804, 6.447, 6.3454, 5.9594, 5.7636, 5.5776, 5.331, 5.19, 4.9676, 4.7564, 4.5314, 4.4442, 4.3708, 3.9774, 3.9624, 3.8796, 3.755, 3.472, 3.2076, 3.1024, 2.8908, 2.7338, 2.7728, 2.629, 2.413, 2.3266, 2.1524, 2.2642, 2.1806, 2.0566, 1.9192, 1.7598, 1.3516, 1.5802, 1.43859999999999, 1.49160000000001, 1.1524, 1.1892, 0.841399999999993, 0.879800000000003, 0.837599999999995, 0.469800000000006, 0.765600000000006, 0.331000000000003, 0.591399999999993, 0.601200000000006, 0.701599999999999, 0.558199999999999, 0.339399999999998, 0.354399999999998, 0.491200000000006, 0.308000000000007, 0.355199999999996, -0.0254000000000048, 0.205200000000005, -0.272999999999996, 0.132199999999997, 0.394400000000005, -0.241200000000006, 0.242000000000004, 0.191400000000002, 0.253799999999998, -0.122399999999999, -0.370800000000003, 0.193200000000004, -0.0848000000000013, 0.0867999999999967, -0.327200000000005, -0.285600000000002, 0.311400000000006, -0.128399999999999, -0.754999999999995, -0.209199999999996, -0.293599999999998, -0.364000000000004, -0.253600000000006, -0.821200000000005, -0.253600000000006, -0.510400000000004, -0.383399999999995, -0.491799999999998, -0.220200000000006, -0.0972000000000008, -0.557400000000001, -0.114599999999996, -0.295000000000002, -0.534800000000004, 0.346399999999988, -0.65379999999999, 0.0398000000000138, 0.0341999999999985, -0.995800000000003, -0.523400000000009, -0.489000000000004, -0.274799999999999, -0.574999999999989, -0.482799999999997, 0.0571999999999946, -0.330600000000004, -0.628800000000012, -0.140199999999993, -0.540600000000012, -0.445999999999998, -0.599400000000003, -0.262599999999992, 0.163399999999996, -0.100599999999986, -0.39500000000001, -1.06960000000001, -0.836399999999998, -0.753199999999993, -0.412399999999991, -0.790400000000005, -0.29679999999999, -0.28540000000001, -0.193000000000012, -0.0772000000000048, -0.962799999999987, -0.414800000000014, }, 39 | // precision 6 40 | { 45, 44.1902, 43.271, 42.8358, 41.8142, 41.2854, 40.317, 39.354, 38.8924, 37.9436, 37.4596, 36.5262, 35.6248, 35.1574, 34.2822, 33.837, 32.9636, 32.074, 31.7042, 30.7976, 30.4772, 29.6564, 28.7942, 28.5004, 27.686, 27.291, 26.5672, 25.8556, 25.4982, 24.8204, 24.4252, 23.7744, 23.0786, 22.8344, 22.0294, 21.8098, 21.0794, 20.5732, 20.1878, 19.5648, 19.2902, 18.6784, 18.3352, 17.8946, 17.3712, 17.0852, 16.499, 16.2686, 15.6844, 15.2234, 14.9732, 14.3356, 14.2286, 13.7262, 13.3284, 13.1048, 12.5962, 12.3562, 12.1272, 11.4184, 11.4974, 11.0822, 10.856, 10.48, 10.2834, 10.0208, 9.637, 9.51739999999999, 9.05759999999999, 8.74760000000001, 8.42700000000001, 8.1326, 8.2372, 8.2788, 7.6776, 7.79259999999999, 7.1952, 6.9564, 6.6454, 6.87, 6.5428, 6.19999999999999, 6.02940000000001, 5.62780000000001, 5.6782, 5.792, 5.35159999999999, 5.28319999999999, 5.0394, 5.07480000000001, 4.49119999999999, 4.84899999999999, 4.696, 4.54040000000001, 4.07300000000001, 4.37139999999999, 3.7216, 3.7328, 3.42080000000001, 3.41839999999999, 3.94239999999999, 3.27719999999999, 3.411, 3.13079999999999, 2.76900000000001, 2.92580000000001, 2.68279999999999, 2.75020000000001, 2.70599999999999, 2.3886, 3.01859999999999, 2.45179999999999, 2.92699999999999, 2.41720000000001, 2.41139999999999, 2.03299999999999, 2.51240000000001, 2.5564, 2.60079999999999, 2.41720000000001, 1.80439999999999, 1.99700000000001, 2.45480000000001, 1.8948, 2.2346, 2.30860000000001, 2.15479999999999, 1.88419999999999, 1.6508, 0.677199999999999, 1.72540000000001, 1.4752, 1.72280000000001, 1.66139999999999, 1.16759999999999, 1.79300000000001, 1.00059999999999, 0.905200000000008, 0.659999999999997, 1.55879999999999, 1.1636, 0.688199999999995, 0.712600000000009, 0.450199999999995, 1.1978, 0.975599999999986, 0.165400000000005, 1.727, 1.19739999999999, -0.252600000000001, 1.13460000000001, 1.3048, 1.19479999999999, 0.313400000000001, 0.878999999999991, 1.12039999999999, 0.853000000000009, 1.67920000000001, 0.856999999999999, 0.448599999999999, 1.2362, 0.953399999999988, 1.02859999999998, 0.563199999999995, 0.663000000000011, 0.723000000000013, 0.756599999999992, 0.256599999999992, -0.837600000000009, 0.620000000000005, 0.821599999999989, 0.216600000000028, 0.205600000000004, 0.220199999999977, 0.372599999999977, 0.334400000000016, 0.928400000000011, 0.972800000000007, 0.192400000000021, 0.487199999999973, -0.413000000000011, 0.807000000000016, 0.120600000000024, 0.769000000000005, 0.870799999999974, 0.66500000000002, 0.118200000000002, 0.401200000000017, 0.635199999999998, 0.135400000000004, 0.175599999999974, 1.16059999999999, 0.34620000000001, 0.521400000000028, -0.586599999999976, -1.16480000000001, 0.968399999999974, 0.836999999999989, 0.779600000000016, 0.985799999999983, }, 41 | // precision 7 42 | { 91, 89.4934, 87.9758, 86.4574, 84.9718, 83.4954, 81.5302, 80.0756, 78.6374, 77.1782, 75.7888, 73.9522, 72.592, 71.2532, 69.9086, 68.5938, 66.9474, 65.6796, 64.4394, 63.2176, 61.9768, 60.4214, 59.2528, 58.0102, 56.8658, 55.7278, 54.3044, 53.1316, 52.093, 51.0032, 49.9092, 48.6306, 47.5294, 46.5756, 45.6508, 44.662, 43.552, 42.3724, 41.617, 40.5754, 39.7872, 38.8444, 37.7988, 36.8606, 36.2118, 35.3566, 34.4476, 33.5882, 32.6816, 32.0824, 31.0258, 30.6048, 29.4436, 28.7274, 27.957, 27.147, 26.4364, 25.7592, 25.3386, 24.781, 23.8028, 23.656, 22.6544, 21.996, 21.4718, 21.1544, 20.6098, 19.5956, 19.0616, 18.5758, 18.4878, 17.5244, 17.2146, 16.724, 15.8722, 15.5198, 15.0414, 14.941, 14.9048, 13.87, 13.4304, 13.028, 12.4708, 12.37, 12.0624, 11.4668, 11.5532, 11.4352, 11.2564, 10.2744, 10.2118, 9.74720000000002, 10.1456, 9.2928, 8.75040000000001, 8.55279999999999, 8.97899999999998, 8.21019999999999, 8.18340000000001, 7.3494, 7.32499999999999, 7.66140000000001, 6.90300000000002, 7.25439999999998, 6.9042, 7.21499999999997, 6.28640000000001, 6.08139999999997, 6.6764, 6.30099999999999, 5.13900000000001, 5.65800000000002, 5.17320000000001, 4.59019999999998, 4.9538, 5.08280000000002, 4.92200000000003, 4.99020000000002, 4.7328, 5.4538, 4.11360000000002, 4.22340000000003, 4.08780000000002, 3.70800000000003, 4.15559999999999, 4.18520000000001, 3.63720000000001, 3.68220000000002, 3.77960000000002, 3.6078, 2.49160000000001, 3.13099999999997, 2.5376, 3.19880000000001, 3.21100000000001, 2.4502, 3.52820000000003, 2.91199999999998, 3.04480000000001, 2.7432, 2.85239999999999, 2.79880000000003, 2.78579999999999, 1.88679999999999, 2.98860000000002, 2.50639999999999, 1.91239999999999, 2.66160000000002, 2.46820000000002, 1.58199999999999, 1.30399999999997, 2.27379999999999, 2.68939999999998, 1.32900000000001, 3.10599999999999, 1.69080000000002, 2.13740000000001, 2.53219999999999, 1.88479999999998, 1.33240000000001, 1.45119999999997, 1.17899999999997, 2.44119999999998, 1.60659999999996, 2.16700000000003, 0.77940000000001, 2.37900000000002, 2.06700000000001, 1.46000000000004, 2.91160000000002, 1.69200000000001, 0.954600000000028, 2.49300000000005, 2.2722, 1.33500000000004, 2.44899999999996, 1.20140000000004, 3.07380000000001, 2.09739999999999, 2.85640000000001, 2.29960000000005, 2.40899999999999, 1.97040000000004, 0.809799999999996, 1.65279999999996, 2.59979999999996, 0.95799999999997, 2.06799999999998, 2.32780000000002, 4.20159999999998, 1.96320000000003, 1.86400000000003, 1.42999999999995, 3.77940000000001, 1.27200000000005, 1.86440000000005, 2.20600000000002, 3.21900000000005, 1.5154, 2.61019999999996, }, 43 | // precision 8 44 | { 183.2152, 180.2454, 177.2096, 173.6652, 170.6312, 167.6822, 164.249, 161.3296, 158.0038, 155.2074, 152.4612, 149.27, 146.5178, 143.4412, 140.8032, 138.1634, 135.1688, 132.6074, 129.6946, 127.2664, 124.8228, 122.0432, 119.6824, 116.9464, 114.6268, 112.2626, 109.8376, 107.4034, 104.8956, 102.8522, 100.7638, 98.3552, 96.3556, 93.7526, 91.9292, 89.8954, 87.8198, 85.7668, 83.298, 81.6688, 79.9466, 77.9746, 76.1672, 74.3474, 72.3028, 70.8912, 69.114, 67.4646, 65.9744, 64.4092, 62.6022, 60.843, 59.5684, 58.1652, 56.5426, 55.4152, 53.5388, 52.3592, 51.1366, 49.486, 48.3918, 46.5076, 45.509, 44.3834, 43.3498, 42.0668, 40.7346, 40.1228, 38.4528, 37.7, 36.644, 36.0518, 34.5774, 33.9068, 32.432, 32.1666, 30.434, 29.6644, 28.4894, 27.6312, 26.3804, 26.292, 25.5496000000001, 25.0234, 24.8206, 22.6146, 22.4188, 22.117, 20.6762, 20.6576, 19.7864, 19.509, 18.5334, 17.9204, 17.772, 16.2924, 16.8654, 15.1836, 15.745, 15.1316, 15.0386, 14.0136, 13.6342, 12.6196, 12.1866, 12.4281999999999, 11.3324, 10.4794000000001, 11.5038, 10.129, 9.52800000000002, 10.3203999999999, 9.46299999999997, 9.79280000000006, 9.12300000000005, 8.74180000000001, 9.2192, 7.51020000000005, 7.60659999999996, 7.01840000000004, 7.22239999999999, 7.40139999999997, 6.76179999999999, 7.14359999999999, 5.65060000000005, 5.63779999999997, 5.76599999999996, 6.75139999999999, 5.57759999999996, 3.73220000000003, 5.8048, 5.63019999999995, 4.93359999999996, 3.47979999999995, 4.33879999999999, 3.98940000000005, 3.81960000000004, 3.31359999999995, 3.23080000000004, 3.4588, 3.08159999999998, 3.4076, 3.00639999999999, 2.38779999999997, 2.61900000000003, 1.99800000000005, 3.34820000000002, 2.95060000000001, 0.990999999999985, 2.11440000000005, 2.20299999999997, 2.82219999999995, 2.73239999999998, 2.7826, 3.76660000000004, 2.26480000000004, 2.31280000000004, 2.40819999999997, 2.75360000000001, 3.33759999999995, 2.71559999999999, 1.7478000000001, 1.42920000000004, 2.39300000000003, 2.22779999999989, 2.34339999999997, 0.87259999999992, 3.88400000000001, 1.80600000000004, 1.91759999999999, 1.16779999999994, 1.50320000000011, 2.52500000000009, 0.226400000000012, 2.31500000000005, 0.930000000000064, 1.25199999999995, 2.14959999999996, 0.0407999999999902, 2.5447999999999, 1.32960000000003, 0.197400000000016, 2.52620000000002, 3.33279999999991, -1.34300000000007, 0.422199999999975, 0.917200000000093, 1.12920000000008, 1.46060000000011, 1.45779999999991, 2.8728000000001, 3.33359999999993, -1.34079999999994, 1.57680000000005, 0.363000000000056, 1.40740000000005, 0.656600000000026, 0.801400000000058, -0.454600000000028, 1.51919999999996, }, 45 | // precision 9 46 | { 368, 361.8294, 355.2452, 348.6698, 342.1464, 336.2024, 329.8782, 323.6598, 317.462, 311.2826, 305.7102, 299.7416, 293.9366, 288.1046, 282.285, 277.0668, 271.306, 265.8448, 260.301, 254.9886, 250.2422, 244.8138, 239.7074, 234.7428, 229.8402, 225.1664, 220.3534, 215.594, 210.6886, 205.7876, 201.65, 197.228, 192.8036, 188.1666, 184.0818, 180.0824, 176.2574, 172.302, 168.1644, 164.0056, 160.3802, 156.7192, 152.5234, 149.2084, 145.831, 142.485, 139.1112, 135.4764, 131.76, 129.3368, 126.5538, 122.5058, 119.2646, 116.5902, 113.3818, 110.8998, 107.9532, 105.2062, 102.2798, 99.4728, 96.9582, 94.3292, 92.171, 89.7809999999999, 87.5716, 84.7048, 82.5322, 79.875, 78.3972, 75.3464, 73.7274, 71.2834, 70.1444, 68.4263999999999, 66.0166, 64.018, 62.0437999999999, 60.3399999999999, 58.6856, 57.9836, 55.0311999999999, 54.6769999999999, 52.3188, 51.4846, 49.4423999999999, 47.739, 46.1487999999999, 44.9202, 43.4059999999999, 42.5342000000001, 41.2834, 38.8954000000001, 38.3286000000001, 36.2146, 36.6684, 35.9946, 33.123, 33.4338, 31.7378000000001, 29.076, 28.9692, 27.4964, 27.0998, 25.9864, 26.7754, 24.3208, 23.4838, 22.7388000000001, 24.0758000000001, 21.9097999999999, 20.9728, 19.9228000000001, 19.9292, 16.617, 17.05, 18.2996000000001, 15.6128000000001, 15.7392, 14.5174, 13.6322, 12.2583999999999, 13.3766000000001, 11.423, 13.1232, 9.51639999999998, 10.5938000000001, 9.59719999999993, 8.12220000000002, 9.76739999999995, 7.50440000000003, 7.56999999999994, 6.70440000000008, 6.41419999999994, 6.71019999999999, 5.60940000000005, 4.65219999999999, 6.84099999999989, 3.4072000000001, 3.97859999999991, 3.32760000000007, 5.52160000000003, 3.31860000000006, 2.06940000000009, 4.35400000000004, 1.57500000000005, 0.280799999999999, 2.12879999999996, -0.214799999999968, -0.0378000000000611, -0.658200000000079, 0.654800000000023, -0.0697999999999865, 0.858400000000074, -2.52700000000004, -2.1751999999999, -3.35539999999992, -1.04019999999991, -0.651000000000067, -2.14439999999991, -1.96659999999997, -3.97939999999994, -0.604400000000169, -3.08260000000018, -3.39159999999993, -5.29640000000018, -5.38920000000007, -5.08759999999984, -4.69900000000007, -5.23720000000003, -3.15779999999995, -4.97879999999986, -4.89899999999989, -7.48880000000008, -5.94799999999987, -5.68060000000014, -6.67180000000008, -4.70499999999993, -7.27779999999984, -4.6579999999999, -4.4362000000001, -4.32139999999981, -5.18859999999995, -6.66879999999992, -6.48399999999992, -5.1260000000002, -4.4032000000002, -6.13500000000022, -5.80819999999994, -4.16719999999987, -4.15039999999999, -7.45600000000013, -7.24080000000004, -9.83179999999993, -5.80420000000004, -8.6561999999999, -6.99940000000015, -10.5473999999999, -7.34139999999979, -6.80999999999995, -6.29719999999998, -6.23199999999997, }, 47 | // precision 10 48 | { 737.1256, 724.4234, 711.1064, 698.4732, 685.4636, 673.0644, 660.488, 647.9654, 636.0832, 623.7864, 612.1992, 600.2176, 588.5228, 577.1716, 565.7752, 554.899, 543.6126, 532.6492, 521.9474, 511.5214, 501.1064, 490.6364, 480.2468, 470.4588, 460.3832, 451.0584, 440.8606, 431.3868, 422.5062, 413.1862, 404.463, 395.339, 386.1936, 378.1292, 369.1854, 361.2908, 353.3324, 344.8518, 337.5204, 329.4854, 321.9318, 314.552, 306.4658, 299.4256, 292.849, 286.152, 278.8956, 271.8792, 265.118, 258.62, 252.5132, 245.9322, 239.7726, 233.6086, 227.5332, 222.5918, 216.4294, 210.7662, 205.4106, 199.7338, 194.9012, 188.4486, 183.1556, 178.6338, 173.7312, 169.6264, 163.9526, 159.8742, 155.8326, 151.1966, 147.5594, 143.07, 140.037, 134.1804, 131.071, 127.4884, 124.0848, 120.2944, 117.333, 112.9626, 110.2902, 107.0814, 103.0334, 99.4832000000001, 96.3899999999999, 93.7202000000002, 90.1714000000002, 87.2357999999999, 85.9346, 82.8910000000001, 80.0264000000002, 78.3834000000002, 75.1543999999999, 73.8683999999998, 70.9895999999999, 69.4367999999999, 64.8701999999998, 65.0408000000002, 61.6738, 59.5207999999998, 57.0158000000001, 54.2302, 53.0962, 50.4985999999999, 52.2588000000001, 47.3914, 45.6244000000002, 42.8377999999998, 43.0072, 40.6516000000001, 40.2453999999998, 35.2136, 36.4546, 33.7849999999999, 33.2294000000002, 32.4679999999998, 30.8670000000002, 28.6507999999999, 28.9099999999999, 27.5983999999999, 26.1619999999998, 24.5563999999999, 23.2328000000002, 21.9484000000002, 21.5902000000001, 21.3346000000001, 17.7031999999999, 20.6111999999998, 19.5545999999999, 15.7375999999999, 17.0720000000001, 16.9517999999998, 15.326, 13.1817999999998, 14.6925999999999, 13.0859999999998, 13.2754, 10.8697999999999, 11.248, 7.3768, 4.72339999999986, 7.97899999999981, 8.7503999999999, 7.68119999999999, 9.7199999999998, 7.73919999999998, 5.6224000000002, 7.44560000000001, 6.6601999999998, 5.9058, 4.00199999999995, 4.51699999999983, 4.68240000000014, 3.86220000000003, 5.13639999999987, 5.98500000000013, 2.47719999999981, 2.61999999999989, 1.62800000000016, 4.65000000000009, 0.225599999999758, 0.831000000000131, -0.359400000000278, 1.27599999999984, -2.92559999999958, -0.0303999999996449, 2.37079999999969, -2.0033999999996, 0.804600000000391, 0.30199999999968, 1.1247999999996, -2.6880000000001, 0.0321999999996478, -1.18099999999959, -3.9402, -1.47940000000017, -0.188400000000001, -2.10720000000038, -2.04159999999956, -3.12880000000041, -4.16160000000036, -0.612799999999879, -3.48719999999958, -8.17900000000009, -5.37780000000021, -4.01379999999972, -5.58259999999973, -5.73719999999958, -7.66799999999967, -5.69520000000011, -1.1247999999996, -5.58520000000044, -8.04560000000038, -4.64840000000004, -11.6468000000004, -7.97519999999986, -5.78300000000036, -7.67420000000038, -10.6328000000003, -9.81720000000041, }, 49 | // precision 11 50 | { 1476, 1449.6014, 1423.5802, 1397.7942, 1372.3042, 1347.2062, 1321.8402, 1297.2292, 1272.9462, 1248.9926, 1225.3026, 1201.4252, 1178.0578, 1155.6092, 1132.626, 1110.5568, 1088.527, 1066.5154, 1045.1874, 1024.3878, 1003.37, 982.1972, 962.5728, 942.1012, 922.9668, 903.292, 884.0772, 864.8578, 846.6562, 828.041, 809.714, 792.3112, 775.1806, 757.9854, 740.656, 724.346, 707.5154, 691.8378, 675.7448, 659.6722, 645.5722, 630.1462, 614.4124, 600.8728, 585.898, 572.408, 558.4926, 544.4938, 531.6776, 517.282, 505.7704, 493.1012, 480.7388, 467.6876, 456.1872, 445.5048, 433.0214, 420.806, 411.409, 400.4144, 389.4294, 379.2286, 369.651, 360.6156, 350.337, 342.083, 332.1538, 322.5094, 315.01, 305.6686, 298.1678, 287.8116, 280.9978, 271.9204, 265.3286, 257.5706, 249.6014, 242.544, 235.5976, 229.583, 220.9438, 214.672, 208.2786, 201.8628, 195.1834, 191.505, 186.1816, 178.5188, 172.2294, 167.8908, 161.0194, 158.052, 151.4588, 148.1596, 143.4344, 138.5238, 133.13, 127.6374, 124.8162, 118.7894, 117.3984, 114.6078, 109.0858, 105.1036, 103.6258, 98.6018000000004, 95.7618000000002, 93.5821999999998, 88.5900000000001, 86.9992000000002, 82.8800000000001, 80.4539999999997, 74.6981999999998, 74.3644000000004, 73.2914000000001, 65.5709999999999, 66.9232000000002, 65.1913999999997, 62.5882000000001, 61.5702000000001, 55.7035999999998, 56.1764000000003, 52.7596000000003, 53.0302000000001, 49.0609999999997, 48.4694, 44.933, 46.0474000000004, 44.7165999999997, 41.9416000000001, 39.9207999999999, 35.6328000000003, 35.5276000000003, 33.1934000000001, 33.2371999999996, 33.3864000000003, 33.9228000000003, 30.2371999999996, 29.1373999999996, 25.2272000000003, 24.2942000000003, 19.8338000000003, 18.9005999999999, 23.0907999999999, 21.8544000000002, 19.5176000000001, 15.4147999999996, 16.9314000000004, 18.6737999999996, 12.9877999999999, 14.3688000000002, 12.0447999999997, 15.5219999999999, 12.5299999999997, 14.5940000000001, 14.3131999999996, 9.45499999999993, 12.9441999999999, 3.91139999999996, 13.1373999999996, 5.44720000000052, 9.82779999999912, 7.87279999999919, 3.67760000000089, 5.46980000000076, 5.55099999999948, 5.65979999999945, 3.89439999999922, 3.1275999999998, 5.65140000000065, 6.3062000000009, 3.90799999999945, 1.87060000000019, 5.17020000000048, 2.46680000000015, 0.770000000000437, -3.72340000000077, 1.16400000000067, 8.05340000000069, 0.135399999999208, 2.15940000000046, 0.766999999999825, 1.0594000000001, 3.15500000000065, -0.287399999999252, 2.37219999999979, -2.86620000000039, -1.63199999999961, -2.22979999999916, -0.15519999999924, -1.46039999999994, -0.262199999999211, -2.34460000000036, -2.8078000000005, -3.22179999999935, -5.60159999999996, -8.42200000000048, -9.43740000000071, 0.161799999999857, -10.4755999999998, -10.0823999999993, }, 51 | // precision 12 52 | { 2953, 2900.4782, 2848.3568, 2796.3666, 2745.324, 2694.9598, 2644.648, 2595.539, 2546.1474, 2498.2576, 2450.8376, 2403.6076, 2357.451, 2311.38, 2266.4104, 2221.5638, 2176.9676, 2134.193, 2090.838, 2048.8548, 2007.018, 1966.1742, 1925.4482, 1885.1294, 1846.4776, 1807.4044, 1768.8724, 1731.3732, 1693.4304, 1657.5326, 1621.949, 1586.5532, 1551.7256, 1517.6182, 1483.5186, 1450.4528, 1417.865, 1385.7164, 1352.6828, 1322.6708, 1291.8312, 1260.9036, 1231.476, 1201.8652, 1173.6718, 1145.757, 1119.2072, 1092.2828, 1065.0434, 1038.6264, 1014.3192, 988.5746, 965.0816, 940.1176, 917.9796, 894.5576, 871.1858, 849.9144, 827.1142, 805.0818, 783.9664, 763.9096, 742.0816, 724.3962, 706.3454, 688.018, 667.4214, 650.3106, 633.0686, 613.8094, 597.818, 581.4248, 563.834, 547.363, 531.5066, 520.455400000001, 505.583199999999, 488.366, 476.480799999999, 459.7682, 450.0522, 434.328799999999, 423.952799999999, 408.727000000001, 399.079400000001, 387.252200000001, 373.987999999999, 360.852000000001, 351.6394, 339.642, 330.902400000001, 322.661599999999, 311.662200000001, 301.3254, 291.7484, 279.939200000001, 276.7508, 263.215200000001, 254.811400000001, 245.5494, 242.306399999999, 234.8734, 223.787200000001, 217.7156, 212.0196, 200.793, 195.9748, 189.0702, 182.449199999999, 177.2772, 170.2336, 164.741, 158.613600000001, 155.311, 147.5964, 142.837, 137.3724, 132.0162, 130.0424, 121.9804, 120.451800000001, 114.8968, 111.585999999999, 105.933199999999, 101.705, 98.5141999999996, 95.0488000000005, 89.7880000000005, 91.4750000000004, 83.7764000000006, 80.9698000000008, 72.8574000000008, 73.1615999999995, 67.5838000000003, 62.6263999999992, 63.2638000000006, 66.0977999999996, 52.0843999999997, 58.9956000000002, 47.0912000000008, 46.4956000000002, 48.4383999999991, 47.1082000000006, 43.2392, 37.2759999999998, 40.0283999999992, 35.1864000000005, 35.8595999999998, 32.0998, 28.027, 23.6694000000007, 33.8266000000003, 26.3736000000008, 27.2008000000005, 21.3245999999999, 26.4115999999995, 23.4521999999997, 19.5013999999992, 19.8513999999996, 10.7492000000002, 18.6424000000006, 13.1265999999996, 18.2436000000016, 6.71860000000015, 3.39459999999963, 6.33759999999893, 7.76719999999841, 0.813999999998487, 3.82819999999992, 0.826199999999517, 8.07440000000133, -1.59080000000176, 5.01780000000144, 0.455399999998917, -0.24199999999837, 0.174800000000687, -9.07640000000174, -4.20160000000033, -3.77520000000004, -4.75179999999818, -5.3724000000002, -8.90680000000066, -6.10239999999976, -5.74120000000039, -9.95339999999851, -3.86339999999836, -13.7304000000004, -16.2710000000006, -7.51359999999841, -3.30679999999847, -13.1339999999982, -10.0551999999989, -6.72019999999975, -8.59660000000076, -10.9307999999983, -1.8775999999998, -4.82259999999951, -13.7788, -21.6470000000008, -10.6735999999983, -15.7799999999988, }, 53 | // precision 13 54 | { 5907.5052, 5802.2672, 5697.347, 5593.5794, 5491.2622, 5390.5514, 5290.3376, 5191.6952, 5093.5988, 4997.3552, 4902.5972, 4808.3082, 4715.5646, 4624.109, 4533.8216, 4444.4344, 4356.3802, 4269.2962, 4183.3784, 4098.292, 4014.79, 3932.4574, 3850.6036, 3771.2712, 3691.7708, 3615.099, 3538.1858, 3463.4746, 3388.8496, 3315.6794, 3244.5448, 3173.7516, 3103.3106, 3033.6094, 2966.5642, 2900.794, 2833.7256, 2769.81, 2707.3196, 2644.0778, 2583.9916, 2523.4662, 2464.124, 2406.073, 2347.0362, 2292.1006, 2238.1716, 2182.7514, 2128.4884, 2077.1314, 2025.037, 1975.3756, 1928.933, 1879.311, 1831.0006, 1783.2144, 1738.3096, 1694.5144, 1649.024, 1606.847, 1564.7528, 1525.3168, 1482.5372, 1443.9668, 1406.5074, 1365.867, 1329.2186, 1295.4186, 1257.9716, 1225.339, 1193.2972, 1156.3578, 1125.8686, 1091.187, 1061.4094, 1029.4188, 1000.9126, 972.3272, 944.004199999999, 915.7592, 889.965, 862.834200000001, 840.4254, 812.598399999999, 785.924200000001, 763.050999999999, 741.793799999999, 721.466, 699.040799999999, 677.997200000002, 649.866999999998, 634.911800000002, 609.8694, 591.981599999999, 570.2922, 557.129199999999, 538.3858, 521.872599999999, 502.951400000002, 495.776399999999, 475.171399999999, 459.751, 439.995200000001, 426.708999999999, 413.7016, 402.3868, 387.262599999998, 372.0524, 357.050999999999, 342.5098, 334.849200000001, 322.529399999999, 311.613799999999, 295.848000000002, 289.273000000001, 274.093000000001, 263.329600000001, 251.389599999999, 245.7392, 231.9614, 229.7952, 217.155200000001, 208.9588, 199.016599999999, 190.839199999999, 180.6976, 176.272799999999, 166.976999999999, 162.5252, 151.196400000001, 149.386999999999, 133.981199999998, 130.0586, 130.164000000001, 122.053400000001, 110.7428, 108.1276, 106.232400000001, 100.381600000001, 98.7668000000012, 86.6440000000002, 79.9768000000004, 82.4722000000002, 68.7026000000005, 70.1186000000016, 71.9948000000004, 58.998599999999, 59.0492000000013, 56.9818000000014, 47.5338000000011, 42.9928, 51.1591999999982, 37.2740000000013, 42.7220000000016, 31.3734000000004, 26.8090000000011, 25.8934000000008, 26.5286000000015, 29.5442000000003, 19.3503999999994, 26.0760000000009, 17.9527999999991, 14.8419999999969, 10.4683999999979, 8.65899999999965, 9.86720000000059, 4.34139999999752, -0.907800000000861, -3.32080000000133, -0.936199999996461, -11.9916000000012, -8.87000000000262, -6.33099999999831, -11.3366000000024, -15.9207999999999, -9.34659999999712, -15.5034000000014, -19.2097999999969, -15.357799999998, -28.2235999999975, -30.6898000000001, -19.3271999999997, -25.6083999999973, -24.409599999999, -13.6385999999984, -33.4473999999973, -32.6949999999997, -28.9063999999998, -31.7483999999968, -32.2935999999972, -35.8329999999987, -47.620600000002, -39.0855999999985, -33.1434000000008, -46.1371999999974, -37.5892000000022, -46.8164000000033, -47.3142000000007, -60.2914000000019, -37.7575999999972, }, 55 | // precision 14 56 | { 11816.475, 11605.0046, 11395.3792, 11188.7504, 10984.1814, 10782.0086, 10582.0072, 10384.503, 10189.178, 9996.2738, 9806.0344, 9617.9798, 9431.394, 9248.7784, 9067.6894, 8889.6824, 8712.9134, 8538.8624, 8368.4944, 8197.7956, 8031.8916, 7866.6316, 7703.733, 7544.5726, 7386.204, 7230.666, 7077.8516, 6926.7886, 6778.6902, 6631.9632, 6487.304, 6346.7486, 6206.4408, 6070.202, 5935.2576, 5799.924, 5671.0324, 5541.9788, 5414.6112, 5290.0274, 5166.723, 5047.6906, 4929.162, 4815.1406, 4699.127, 4588.5606, 4477.7394, 4369.4014, 4264.2728, 4155.9224, 4055.581, 3955.505, 3856.9618, 3761.3828, 3666.9702, 3575.7764, 3482.4132, 3395.0186, 3305.8852, 3221.415, 3138.6024, 3056.296, 2970.4494, 2896.1526, 2816.8008, 2740.2156, 2670.497, 2594.1458, 2527.111, 2460.8168, 2387.5114, 2322.9498, 2260.6752, 2194.2686, 2133.7792, 2074.767, 2015.204, 1959.4226, 1898.6502, 1850.006, 1792.849, 1741.4838, 1687.9778, 1638.1322, 1589.3266, 1543.1394, 1496.8266, 1447.8516, 1402.7354, 1361.9606, 1327.0692, 1285.4106, 1241.8112, 1201.6726, 1161.973, 1130.261, 1094.2036, 1048.2036, 1020.6436, 990.901400000002, 961.199800000002, 924.769800000002, 899.526400000002, 872.346400000002, 834.375, 810.432000000001, 780.659800000001, 756.013800000001, 733.479399999997, 707.923999999999, 673.858, 652.222399999999, 636.572399999997, 615.738599999997, 586.696400000001, 564.147199999999, 541.679600000003, 523.943599999999, 505.714599999999, 475.729599999999, 461.779600000002, 449.750800000002, 439.020799999998, 412.7886, 400.245600000002, 383.188199999997, 362.079599999997, 357.533799999997, 334.319000000003, 327.553399999997, 308.559399999998, 291.270199999999, 279.351999999999, 271.791400000002, 252.576999999997, 247.482400000001, 236.174800000001, 218.774599999997, 220.155200000001, 208.794399999999, 201.223599999998, 182.995600000002, 185.5268, 164.547400000003, 176.5962, 150.689599999998, 157.8004, 138.378799999999, 134.021200000003, 117.614399999999, 108.194000000003, 97.0696000000025, 89.6042000000016, 95.6030000000028, 84.7810000000027, 72.635000000002, 77.3482000000004, 59.4907999999996, 55.5875999999989, 50.7346000000034, 61.3916000000027, 50.9149999999936, 39.0384000000049, 58.9395999999979, 29.633600000001, 28.2032000000036, 26.0078000000067, 17.0387999999948, 9.22000000000116, 13.8387999999977, 8.07240000000456, 14.1549999999988, 15.3570000000036, 3.42660000000615, 6.24820000000182, -2.96940000000177, -8.79940000000352, -5.97860000000219, -14.4048000000039, -3.4143999999942, -13.0148000000045, -11.6977999999945, -25.7878000000055, -22.3185999999987, -24.409599999999, -31.9756000000052, -18.9722000000038, -22.8678000000073, -30.8972000000067, -32.3715999999986, -22.3907999999938, -43.6720000000059, -35.9038, -39.7492000000057, -54.1641999999993, -45.2749999999942, -42.2989999999991, -44.1089999999967, -64.3564000000042, -49.9551999999967, -42.6116000000038, }, 57 | // precision 15 58 | { 23634.0036, 23210.8034, 22792.4744, 22379.1524, 21969.7928, 21565.326, 21165.3532, 20770.2806, 20379.9892, 19994.7098, 19613.318, 19236.799, 18865.4382, 18498.8244, 18136.5138, 17778.8668, 17426.2344, 17079.32, 16734.778, 16397.2418, 16063.3324, 15734.0232, 15409.731, 15088.728, 14772.9896, 14464.1402, 14157.5588, 13855.5958, 13559.3296, 13264.9096, 12978.326, 12692.0826, 12413.8816, 12137.3192, 11870.2326, 11602.5554, 11340.3142, 11079.613, 10829.5908, 10583.5466, 10334.0344, 10095.5072, 9859.694, 9625.2822, 9395.7862, 9174.0586, 8957.3164, 8738.064, 8524.155, 8313.7396, 8116.9168, 7913.542, 7718.4778, 7521.65, 7335.5596, 7154.2906, 6968.7396, 6786.3996, 6613.236, 6437.406, 6270.6598, 6107.7958, 5945.7174, 5787.6784, 5635.5784, 5482.308, 5337.9784, 5190.0864, 5045.9158, 4919.1386, 4771.817, 4645.7742, 4518.4774, 4385.5454, 4262.6622, 4142.74679999999, 4015.5318, 3897.9276, 3790.7764, 3685.13800000001, 3573.6274, 3467.9706, 3368.61079999999, 3271.5202, 3170.3848, 3076.4656, 2982.38400000001, 2888.4664, 2806.4868, 2711.9564, 2634.1434, 2551.3204, 2469.7662, 2396.61139999999, 2318.9902, 2243.8658, 2171.9246, 2105.01360000001, 2028.8536, 1960.9952, 1901.4096, 1841.86079999999, 1777.54700000001, 1714.5802, 1654.65059999999, 1596.311, 1546.2016, 1492.3296, 1433.8974, 1383.84600000001, 1339.4152, 1293.5518, 1245.8686, 1193.50659999999, 1162.27959999999, 1107.19439999999, 1069.18060000001, 1035.09179999999, 999.679000000004, 957.679999999993, 925.300199999998, 888.099400000006, 848.638600000006, 818.156400000007, 796.748399999997, 752.139200000005, 725.271200000003, 692.216, 671.633600000001, 647.939799999993, 621.670599999998, 575.398799999995, 561.226599999995, 532.237999999998, 521.787599999996, 483.095799999996, 467.049599999998, 465.286399999997, 415.548599999995, 401.047399999996, 380.607999999993, 377.362599999993, 347.258799999996, 338.371599999999, 310.096999999994, 301.409199999995, 276.280799999993, 265.586800000005, 258.994399999996, 223.915999999997, 215.925399999993, 213.503800000006, 191.045400000003, 166.718200000003, 166.259000000005, 162.941200000001, 148.829400000002, 141.645999999993, 123.535399999993, 122.329800000007, 89.473399999988, 80.1962000000058, 77.5457999999926, 59.1056000000099, 83.3509999999951, 52.2906000000075, 36.3979999999865, 40.6558000000077, 42.0003999999899, 19.6630000000005, 19.7153999999864, -8.38539999999921, -0.692799999989802, 0.854800000000978, 3.23219999999856, -3.89040000000386, -5.25880000001052, -24.9052000000083, -22.6837999999989, -26.4286000000138, -34.997000000003, -37.0216000000073, -43.430400000012, -58.2390000000014, -68.8034000000043, -56.9245999999985, -57.8583999999973, -77.3097999999882, -73.2793999999994, -81.0738000000129, -87.4530000000086, -65.0254000000132, -57.296399999992, -96.2746000000043, -103.25, -96.081600000005, -91.5542000000132, -102.465200000006, -107.688599999994, -101.458000000013, -109.715800000005, }, 59 | // precision 16 60 | { 47270, 46423.3584, 45585.7074, 44757.152, 43938.8416, 43130.9514, 42330.03, 41540.407, 40759.6348, 39988.206, 39226.5144, 38473.2096, 37729.795, 36997.268, 36272.6448, 35558.665, 34853.0248, 34157.4472, 33470.5204, 32793.5742, 32127.0194, 31469.4182, 30817.6136, 30178.6968, 29546.8908, 28922.8544, 28312.271, 27707.0924, 27114.0326, 26526.692, 25948.6336, 25383.7826, 24823.5998, 24272.2974, 23732.2572, 23201.4976, 22674.2796, 22163.6336, 21656.515, 21161.7362, 20669.9368, 20189.4424, 19717.3358, 19256.3744, 18795.9638, 18352.197, 17908.5738, 17474.391, 17052.918, 16637.2236, 16228.4602, 15823.3474, 15428.6974, 15043.0284, 14667.6278, 14297.4588, 13935.2882, 13578.5402, 13234.6032, 12882.1578, 12548.0728, 12219.231, 11898.0072, 11587.2626, 11279.9072, 10973.5048, 10678.5186, 10392.4876, 10105.2556, 9825.766, 9562.5444, 9294.2222, 9038.2352, 8784.848, 8533.2644, 8301.7776, 8058.30859999999, 7822.94579999999, 7599.11319999999, 7366.90779999999, 7161.217, 6957.53080000001, 6736.212, 6548.21220000001, 6343.06839999999, 6156.28719999999, 5975.15419999999, 5791.75719999999, 5621.32019999999, 5451.66, 5287.61040000001, 5118.09479999999, 4957.288, 4798.4246, 4662.17559999999, 4512.05900000001, 4364.68539999999, 4220.77720000001, 4082.67259999999, 3957.19519999999, 3842.15779999999, 3699.3328, 3583.01180000001, 3473.8964, 3338.66639999999, 3233.55559999999, 3117.799, 3008.111, 2909.69140000001, 2814.86499999999, 2719.46119999999, 2624.742, 2532.46979999999, 2444.7886, 2370.1868, 2272.45259999999, 2196.19260000001, 2117.90419999999, 2023.2972, 1969.76819999999, 1885.58979999999, 1833.2824, 1733.91200000001, 1682.54920000001, 1604.57980000001, 1556.11240000001, 1491.3064, 1421.71960000001, 1371.22899999999, 1322.1324, 1264.7892, 1196.23920000001, 1143.8474, 1088.67240000001, 1073.60380000001, 1023.11660000001, 959.036400000012, 927.433199999999, 906.792799999996, 853.433599999989, 841.873800000001, 791.1054, 756.899999999994, 704.343200000003, 672.495599999995, 622.790399999998, 611.254799999995, 567.283200000005, 519.406599999988, 519.188400000014, 495.312800000014, 451.350799999986, 443.973399999988, 431.882199999993, 392.027000000002, 380.924200000009, 345.128999999986, 298.901400000002, 287.771999999997, 272.625, 247.253000000026, 222.490600000019, 223.590000000026, 196.407599999977, 176.425999999978, 134.725199999986, 132.4804, 110.445599999977, 86.7939999999944, 56.7038000000175, 64.915399999998, 38.3726000000024, 37.1606000000029, 46.170999999973, 49.1716000000015, 15.3362000000197, 6.71639999997569, -34.8185999999987, -39.4476000000141, 12.6830000000191, -12.3331999999937, -50.6565999999875, -59.9538000000175, -65.1054000000004, -70.7576000000117, -106.325200000021, -126.852200000023, -110.227599999984, -132.885999999999, -113.897200000007, -142.713800000027, -151.145399999979, -150.799200000009, -177.756200000003, -156.036399999983, -182.735199999996, -177.259399999981, -198.663600000029, -174.577600000019, -193.84580000001, }, 61 | // precision 17 62 | { 94541, 92848.811, 91174.019, 89517.558, 87879.9705, 86262.7565, 84663.5125, 83083.7435, 81521.7865, 79977.272, 78455.9465, 76950.219, 75465.432, 73994.152, 72546.71, 71115.2345, 69705.6765, 68314.937, 66944.2705, 65591.255, 64252.9485, 62938.016, 61636.8225, 60355.592, 59092.789, 57850.568, 56624.518, 55417.343, 54231.1415, 53067.387, 51903.526, 50774.649, 49657.6415, 48561.05, 47475.7575, 46410.159, 45364.852, 44327.053, 43318.4005, 42325.6165, 41348.4595, 40383.6265, 39436.77, 38509.502, 37594.035, 36695.939, 35818.6895, 34955.691, 34115.8095, 33293.949, 32465.0775, 31657.6715, 30877.2585, 30093.78, 29351.3695, 28594.1365, 27872.115, 27168.7465, 26477.076, 25774.541, 25106.5375, 24452.5135, 23815.5125, 23174.0655, 22555.2685, 21960.2065, 21376.3555, 20785.1925, 20211.517, 19657.0725, 19141.6865, 18579.737, 18081.3955, 17578.995, 17073.44, 16608.335, 16119.911, 15651.266, 15194.583, 14749.0495, 14343.4835, 13925.639, 13504.509, 13099.3885, 12691.2855, 12328.018, 11969.0345, 11596.5145, 11245.6355, 10917.6575, 10580.9785, 10277.8605, 9926.58100000001, 9605.538, 9300.42950000003, 8989.97850000003, 8728.73249999998, 8448.3235, 8175.31050000002, 7898.98700000002, 7629.79100000003, 7413.76199999999, 7149.92300000001, 6921.12650000001, 6677.1545, 6443.28000000003, 6278.23450000002, 6014.20049999998, 5791.20299999998, 5605.78450000001, 5438.48800000001, 5234.2255, 5059.6825, 4887.43349999998, 4682.935, 4496.31099999999, 4322.52250000002, 4191.42499999999, 4021.24200000003, 3900.64799999999, 3762.84250000003, 3609.98050000001, 3502.29599999997, 3363.84250000003, 3206.54849999998, 3079.70000000001, 2971.42300000001, 2867.80349999998, 2727.08100000001, 2630.74900000001, 2496.6165, 2440.902, 2356.19150000002, 2235.58199999999, 2120.54149999999, 2012.25449999998, 1933.35600000003, 1820.93099999998, 1761.54800000001, 1663.09350000002, 1578.84600000002, 1509.48149999999, 1427.3345, 1379.56150000001, 1306.68099999998, 1212.63449999999, 1084.17300000001, 1124.16450000001, 1060.69949999999, 1007.48849999998, 941.194499999983, 879.880500000028, 836.007500000007, 782.802000000025, 748.385499999975, 647.991500000004, 626.730500000005, 570.776000000013, 484.000500000024, 513.98550000001, 418.985499999952, 386.996999999974, 370.026500000036, 355.496999999974, 356.731499999994, 255.92200000002, 259.094000000041, 205.434499999974, 165.374500000034, 197.347500000033, 95.718499999959, 67.6165000000037, 54.6970000000438, 31.7395000000251, -15.8784999999916, 8.42500000004657, -26.3754999999655, -118.425500000012, -66.6629999999423, -42.9745000000112, -107.364999999991, -189.839000000036, -162.611499999999, -164.964999999967, -189.079999999958, -223.931499999948, -235.329999999958, -269.639500000048, -249.087999999989, -206.475499999942, -283.04449999996, -290.667000000016, -304.561499999953, -336.784499999951, -380.386500000022, -283.280499999993, -364.533000000054, -389.059499999974, -364.454000000027, -415.748000000021, -417.155000000028, }, 63 | // precision 18 64 | { 189083, 185696.913, 182348.774, 179035.946, 175762.762, 172526.444, 169329.754, 166166.099, 163043.269, 159958.91, 156907.912, 153906.845, 150924.199, 147996.568, 145093.457, 142239.233, 139421.475, 136632.27, 133889.588, 131174.2, 128511.619, 125868.621, 123265.385, 120721.061, 118181.769, 115709.456, 113252.446, 110840.198, 108465.099, 106126.164, 103823.469, 101556.618, 99308.004, 97124.508, 94937.803, 92833.731, 90745.061, 88677.627, 86617.47, 84650.442, 82697.833, 80769.132, 78879.629, 77014.432, 75215.626, 73384.587, 71652.482, 69895.93, 68209.301, 66553.669, 64921.981, 63310.323, 61742.115, 60205.018, 58698.658, 57190.657, 55760.865, 54331.169, 52908.167, 51550.273, 50225.254, 48922.421, 47614.533, 46362.049, 45098.569, 43926.083, 42736.03, 41593.473, 40425.26, 39316.237, 38243.651, 37170.617, 36114.609, 35084.19, 34117.233, 33206.509, 32231.505, 31318.728, 30403.404, 29540.0550000001, 28679.236, 27825.862, 26965.216, 26179.148, 25462.08, 24645.952, 23922.523, 23198.144, 22529.128, 21762.4179999999, 21134.779, 20459.117, 19840.818, 19187.04, 18636.3689999999, 17982.831, 17439.7389999999, 16874.547, 16358.2169999999, 15835.684, 15352.914, 14823.681, 14329.313, 13816.897, 13342.874, 12880.882, 12491.648, 12021.254, 11625.392, 11293.7610000001, 10813.697, 10456.209, 10099.074, 9755.39000000001, 9393.18500000006, 9047.57900000003, 8657.98499999999, 8395.85900000005, 8033, 7736.95900000003, 7430.59699999995, 7258.47699999996, 6924.58200000005, 6691.29399999999, 6357.92500000005, 6202.05700000003, 5921.19700000004, 5628.28399999999, 5404.96799999999, 5226.71100000001, 4990.75600000005, 4799.77399999998, 4622.93099999998, 4472.478, 4171.78700000001, 3957.46299999999, 3868.95200000005, 3691.14300000004, 3474.63100000005, 3341.67200000002, 3109.14000000001, 3071.97400000005, 2796.40399999998, 2756.17799999996, 2611.46999999997, 2471.93000000005, 2382.26399999997, 2209.22400000005, 2142.28399999999, 2013.96100000001, 1911.18999999994, 1818.27099999995, 1668.47900000005, 1519.65800000005, 1469.67599999998, 1367.13800000004, 1248.52899999998, 1181.23600000003, 1022.71900000004, 1088.20700000005, 959.03600000008, 876.095999999903, 791.183999999892, 703.337000000058, 731.949999999953, 586.86400000006, 526.024999999907, 323.004999999888, 320.448000000091, 340.672999999952, 309.638999999966, 216.601999999955, 102.922999999952, 19.2399999999907, -0.114000000059605, -32.6240000000689, -89.3179999999702, -153.497999999905, -64.2970000000205, -143.695999999996, -259.497999999905, -253.017999999924, -213.948000000091, -397.590000000084, -434.006000000052, -403.475000000093, -297.958000000101, -404.317000000039, -528.898999999976, -506.621000000043, -513.205000000075, -479.351000000024, -596.139999999898, -527.016999999993, -664.681000000099, -680.306000000099, -704.050000000047, -850.486000000034, -757.43200000003, -713.308999999892, } 65 | }; 66 | -------------------------------------------------------------------------------- /count/hll_data.cc: -------------------------------------------------------------------------------- 1 | // Copyright 2015-2022 The libcount 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 | // http://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. See the AUTHORS file for names of 14 | // contributors. 15 | 16 | // NOTE: In the Appendix to the HyperLogLog++ paper, the authors provided a 17 | // data set containing estimates at each precision level and their associated 18 | // bias values. While the estimate values *tend* to be in increasing order, 19 | // they did not increase monotonically which would break naive interpolation 20 | // algorithms. The authors circumvented this by using kNearestNeighbor, but 21 | // this library opts for a more straightforward linear interpolation method. 22 | // 23 | // As such, the data here *is* sorted so that estimate values increase 24 | // monotonically with their associated array indices. 25 | 26 | #include "count/hll_data.h" 27 | 28 | extern const double THRESHOLD_DATA[15] = { 29 | 10, // Precision 4 30 | 20, // Precision 5 31 | 40, // Precision 6 32 | 80, // Precision 7 33 | 220, // Precision 8 34 | 400, // Precision 9 35 | 900, // Precision 10 36 | 1800, // Precision 11 37 | 3100, // Precision 12 38 | 6500, // Precision 13 39 | 11500, // Precision 14 40 | 20000, // Precision 15 41 | 50000, // Precision 16 42 | 120000, // Precision 17 43 | 350000 // Precision 18 44 | }; 45 | 46 | extern const double ESTIMATE_DATA[15][201] = { 47 | // Precision 4 48 | {11.000000, 11.717000, 12.207000, 12.789600, 13.288200, 13.820400, 49 | 14.377200, 14.934200, 15.520200, 16.161000, 16.772200, 17.463600, 50 | 18.039600, 18.676600, 19.356600, 20.045400, 20.793600, 21.485600, 51 | 22.266600, 22.994600, 23.766000, 24.469200, 25.363800, 26.076400, 52 | 26.786400, 27.760200, 28.481400, 29.433000, 30.292600, 31.066400, 53 | 31.999600, 32.795600, 33.536600, 34.589400, 35.573800, 36.269800, 54 | 37.368200, 38.054400, 39.234200, 40.010800, 40.796600, 41.929800, 55 | 42.870400, 43.635800, 44.519400, 45.773000, 46.677200, 47.617400, 56 | 48.488800, 49.330400, 50.250600, 51.499600, 52.382400, 53.307800, 57 | 54.398400, 55.583800, 56.661800, 57.217400, 58.351400, 59.080200, 58 | 60.148200, 61.037600, 62.359800, 62.807800, 63.974400, 64.914000, 59 | 65.781000, 67.180600, 68.059400, 68.844600, 69.792800, 70.824800, 60 | 71.832400, 72.859800, 73.624600, 74.701400, 75.393000, 76.670800, 61 | 77.239400}, 62 | 63 | // Precision 5 64 | {23.000000, 23.119400, 23.820800, 24.231800, 24.770000, 25.243600, 65 | 25.777400, 26.284800, 26.822400, 27.374200, 27.933600, 28.503000, 66 | 29.049400, 29.629200, 30.212400, 30.798000, 31.367000, 31.972800, 67 | 32.594400, 33.217000, 33.843800, 34.369600, 35.095600, 35.704400, 68 | 36.324000, 37.066800, 37.669800, 38.364400, 39.049000, 39.691800, 69 | 40.414600, 41.082000, 41.687000, 42.539800, 43.246200, 43.857000, 70 | 44.660600, 45.416800, 46.124800, 46.922200, 47.680400, 48.447000, 71 | 49.345400, 49.959400, 50.763600, 51.577600, 52.331000, 53.190000, 72 | 53.967600, 54.756400, 55.531400, 56.444200, 57.370800, 57.977400, 73 | 58.962400, 59.879600, 60.755000, 61.472000, 62.207600, 63.102400, 74 | 63.890800, 64.733800, 65.772800, 66.629000, 67.413000, 68.326600, 75 | 69.152400, 70.264200, 71.180600, 72.056600, 72.919200, 73.759800, 76 | 74.351600, 75.580200, 76.438600, 77.491600, 78.152400, 79.189200, 77 | 79.841400, 80.879800, 81.837600, 82.469800, 83.765600, 84.331000, 78 | 85.591400, 86.601200, 87.701600, 88.558200, 89.339400, 90.354400, 79 | 91.491200, 92.308000, 93.355200, 93.974600, 95.205200, 95.727000, 80 | 97.132200, 98.394400, 98.758800, 100.242000, 101.191400, 102.253800, 81 | 102.877600, 103.629200, 105.193200, 105.915200, 107.086800, 107.672800, 82 | 108.714400, 110.311400, 110.871600, 111.245000, 112.790800, 113.706400, 83 | 114.636000, 115.746400, 116.178800, 117.746400, 118.489600, 119.616600, 84 | 120.508200, 121.779800, 122.902800, 123.442600, 124.885400, 125.705000, 85 | 126.465200, 128.346200, 128.346400, 130.039800, 131.004200, 131.034200, 86 | 132.476600, 133.511000, 134.725200, 135.425000, 136.517200, 138.057200, 87 | 138.669400, 139.371200, 140.859800, 141.459400, 142.554000, 143.400600, 88 | 144.737400, 146.163400, 146.899400, 147.605000, 147.930400, 149.163600, 89 | 150.246800, 151.587600, 152.209600, 153.703200, 154.714600, 155.807000, 90 | 156.922800, 157.037200, 158.585200}, 91 | 92 | // Precision 6 93 | {46.000000, 46.190200, 47.271000, 47.835800, 48.814200, 49.285400, 94 | 50.317000, 51.354000, 51.892400, 52.943600, 53.459600, 54.526200, 95 | 55.624800, 56.157400, 57.282200, 57.837000, 58.963600, 60.074000, 96 | 60.704200, 61.797600, 62.477200, 63.656400, 64.794200, 65.500400, 97 | 66.686000, 67.291000, 68.567200, 69.855600, 70.498200, 71.820400, 98 | 72.425200, 73.774400, 75.078600, 75.834400, 77.029400, 77.809800, 99 | 79.079400, 80.573200, 81.187800, 82.564800, 83.290200, 84.678400, 100 | 85.335200, 86.894600, 88.371200, 89.085200, 90.499000, 91.268600, 101 | 92.684400, 94.223400, 94.973200, 96.335600, 97.228600, 98.726200, 102 | 100.328400, 101.104800, 102.596200, 103.356200, 105.127200, 106.418400, 103 | 107.497400, 109.082200, 109.856000, 111.480000, 113.283400, 114.020800, 104 | 115.637000, 116.517400, 118.057600, 119.747600, 120.427000, 122.132600, 105 | 123.237200, 125.278800, 126.677600, 127.792600, 129.195200, 129.956400, 106 | 131.645400, 133.870000, 134.542800, 136.200000, 137.029400, 138.627800, 107 | 139.678200, 141.792000, 143.351600, 144.283200, 146.039400, 147.074800, 108 | 148.491200, 150.849000, 151.696000, 153.540400, 154.073000, 156.371400, 109 | 157.721600, 158.732800, 160.420800, 161.418400, 163.942400, 165.277200, 110 | 166.411000, 168.130800, 168.769000, 170.925800, 172.682800, 173.750200, 111 | 175.706000, 176.388600, 179.018600, 180.451800, 181.927000, 183.417200, 112 | 184.411400, 186.033000, 188.512400, 189.556400, 191.600800, 192.417200, 113 | 193.804400, 194.997000, 197.454800, 198.894800, 200.234600, 202.308600, 114 | 203.154800, 204.884200, 206.650800, 206.677200, 209.725400, 210.475200, 115 | 212.722800, 214.661400, 215.167600, 217.793000, 218.000600, 219.905200, 116 | 221.660000, 223.558800, 225.163600, 225.688200, 227.712600, 229.450200, 117 | 231.197800, 232.975600, 233.165400, 236.727000, 237.747400, 238.197400, 118 | 241.134600, 242.304800, 244.194800, 245.313400, 246.879000, 249.120400, 119 | 249.853000, 252.679200, 253.857000, 254.448600, 257.236200, 257.953400, 120 | 260.028600, 260.563200, 262.663000, 264.723000, 265.756600, 267.162400, 121 | 267.256600, 270.620000, 272.821600, 273.216600, 275.205600, 276.220200, 122 | 278.372600, 280.334400, 281.928400, 283.972800, 284.192400, 286.487200, 123 | 287.587000, 289.807000, 291.120600, 292.769000, 294.870800, 296.665000, 124 | 297.118200, 299.401200, 300.635200, 302.135400, 304.175600, 306.160600, 125 | 307.346200, 308.521400, 309.413400, 310.835200, 313.968400, 315.837000, 126 | 316.779600, 318.985800}, 127 | 128 | // Precision 7 129 | {92.000000, 93.493400, 94.975800, 96.457400, 97.971800, 99.495400, 130 | 101.530200, 103.075600, 104.637400, 106.178200, 107.788800, 109.952200, 131 | 111.592000, 113.253200, 114.908600, 116.593800, 118.947400, 120.679600, 132 | 122.439400, 124.217600, 125.976800, 128.421400, 130.252800, 132.010200, 133 | 133.865800, 135.727800, 138.304400, 140.131600, 142.093000, 144.003200, 134 | 145.909200, 148.630600, 150.529400, 152.575600, 154.650800, 156.662000, 135 | 159.552000, 161.372400, 163.617000, 165.575400, 167.787200, 169.844400, 136 | 172.798800, 174.860600, 177.211800, 179.356600, 181.447600, 184.588200, 137 | 186.681600, 189.082400, 191.025800, 193.604800, 196.443600, 198.727400, 138 | 200.957000, 203.147000, 205.436400, 208.759200, 211.338600, 213.781000, 139 | 215.802800, 218.656000, 221.654400, 223.996000, 226.471800, 229.154400, 140 | 231.609800, 234.595600, 237.061600, 239.575800, 242.487800, 244.524400, 141 | 248.214600, 250.724000, 252.872200, 255.519800, 258.041400, 261.941000, 142 | 264.904800, 266.870000, 269.430400, 272.028000, 274.470800, 278.370000, 143 | 281.062400, 283.466800, 286.553200, 289.435200, 293.256400, 295.274400, 144 | 298.211800, 300.747200, 304.145600, 307.292800, 309.750400, 312.552800, 145 | 315.979000, 318.210200, 322.183400, 324.349400, 327.325000, 330.661400, 146 | 332.903000, 337.254400, 339.904200, 343.215000, 345.286400, 348.081400, 147 | 352.676400, 355.301000, 357.139000, 360.658000, 363.173200, 366.590200, 148 | 369.953800, 373.082800, 375.922000, 378.990200, 382.732800, 386.453800, 149 | 388.113600, 391.223400, 394.087800, 396.708000, 401.155600, 404.185200, 150 | 406.637200, 409.682200, 412.779600, 416.607800, 418.491600, 422.131000, 151 | 424.537600, 428.198800, 432.211000, 434.450200, 438.528200, 440.912000, 152 | 444.044800, 447.743200, 450.852400, 453.798800, 456.785800, 458.886800, 153 | 463.988600, 466.506400, 468.912400, 472.661600, 475.468200, 478.582000, 154 | 481.304000, 485.273800, 488.689400, 490.329000, 496.106000, 497.690800, 155 | 501.137400, 504.532200, 506.884800, 510.332400, 513.451200, 516.179000, 156 | 520.441200, 522.606600, 526.167000, 528.779400, 533.379000, 536.067000, 157 | 538.460000, 542.911600, 545.692000, 547.954600, 552.493000, 555.272200, 158 | 557.335000, 562.449000, 564.201400, 569.073800, 571.097400, 574.856400, 159 | 578.299600, 581.409000, 583.970400, 585.809800, 589.652800, 594.599800, 160 | 595.958000, 600.068000, 603.327800, 608.201600, 609.963200, 612.864000, 161 | 615.430000, 620.779400, 621.272000, 625.864400, 629.206000, 633.219000, 162 | 634.515400, 638.610200}, 163 | 164 | // Precision 8 165 | {184.215200, 187.245400, 190.209600, 193.665200, 196.631200, 166 | 199.682200, 203.249000, 206.329600, 210.003800, 213.207400, 167 | 216.461200, 220.270000, 223.517800, 227.441200, 230.803200, 168 | 234.163400, 238.168800, 241.607400, 245.694600, 249.266400, 169 | 252.822800, 257.043200, 260.682400, 264.946400, 268.626800, 170 | 272.262600, 276.837600, 280.403400, 284.895600, 288.852200, 171 | 292.763800, 297.355200, 301.355600, 305.752600, 309.929200, 172 | 313.895400, 318.819800, 322.766800, 327.298000, 331.668800, 173 | 335.946600, 340.974600, 345.167200, 349.347400, 354.302800, 174 | 358.891200, 364.114000, 368.464600, 372.974400, 378.409200, 175 | 382.602200, 387.843000, 392.568400, 397.165200, 402.542600, 176 | 407.415200, 412.538800, 417.359200, 422.136600, 427.486000, 177 | 432.391800, 437.507600, 442.509000, 447.383400, 453.349800, 178 | 458.066800, 463.734600, 469.122800, 473.452800, 479.700000, 179 | 484.644000, 491.051800, 495.577400, 500.906800, 506.432000, 180 | 512.166600, 517.434000, 522.664400, 527.489400, 533.631200, 181 | 538.380400, 544.292000, 550.549600, 556.023400, 562.820600, 182 | 566.614600, 572.418800, 579.117000, 583.676200, 590.657600, 183 | 595.786400, 601.509000, 607.533400, 612.920400, 619.772000, 184 | 624.292400, 630.865400, 636.183600, 642.745000, 649.131600, 185 | 655.038600, 660.013600, 666.634200, 671.619600, 678.186600, 186 | 684.428200, 689.332400, 695.479400, 702.503800, 708.129000, 187 | 713.528000, 720.320400, 726.463000, 732.792800, 739.123000, 188 | 744.741800, 751.219200, 756.510200, 762.606600, 769.018400, 189 | 775.222400, 781.401400, 787.761800, 794.143600, 798.650600, 190 | 805.637800, 811.766000, 819.751400, 824.577600, 828.732200, 191 | 837.804800, 843.630200, 849.933600, 854.479800, 861.338800, 192 | 867.989400, 873.819600, 880.313600, 886.230800, 892.458800, 193 | 899.081600, 905.407600, 912.006400, 917.387800, 923.619000, 194 | 929.998000, 937.348200, 943.950600, 947.991000, 955.114400, 195 | 962.203000, 968.822200, 975.732400, 981.782600, 988.766600, 196 | 994.264800, 1000.312800, 1007.408200, 1013.753600, 1020.337600, 197 | 1026.715600, 1031.747800, 1037.429200, 1045.393000, 1051.227800, 198 | 1058.343400, 1062.872600, 1071.884000, 1076.806000, 1082.917600, 199 | 1089.167800, 1095.503200, 1102.525000, 1107.226400, 1115.315000, 200 | 1120.930000, 1127.252000, 1134.149600, 1139.040800, 1147.544800, 201 | 1153.329600, 1158.197400, 1166.526200, 1174.332800, 1175.657000, 202 | 1184.422200, 1190.917200, 1197.129200, 1204.460600, 1210.457800, 203 | 1218.872800, 1225.333600, 1226.659200, 1236.576800, 1241.363000, 204 | 1249.407400, 1254.656600, 1260.801400, 1266.545400, 1274.519200}, 205 | 206 | // Precision 9 207 | {369.000000, 374.829400, 381.245200, 387.669800, 394.146400, 208 | 400.202400, 406.878200, 413.659800, 420.462000, 427.282600, 209 | 433.710200, 440.741600, 447.936600, 455.104600, 462.285000, 210 | 469.066800, 476.306000, 483.844800, 491.301000, 498.988600, 211 | 506.242200, 513.813800, 521.707400, 529.742800, 537.840200, 212 | 545.166400, 553.353400, 561.594000, 569.688600, 577.787600, 213 | 585.650000, 594.228000, 602.803600, 611.166600, 620.081800, 214 | 628.082400, 637.257400, 646.302000, 655.164400, 664.005600, 215 | 672.380200, 681.719200, 690.523400, 700.208400, 708.831000, 216 | 718.485000, 728.111200, 737.476400, 746.760000, 756.336800, 217 | 766.553800, 775.505800, 785.264600, 795.590200, 804.381800, 218 | 814.899800, 824.953200, 835.206200, 845.279800, 854.472800, 219 | 864.958200, 875.329200, 886.171000, 896.781000, 906.571600, 220 | 916.704800, 927.532200, 937.875000, 949.397200, 958.346400, 221 | 969.727400, 980.283400, 992.144400, 1003.426400, 1013.016600, 222 | 1024.018000, 1035.043800, 1046.340000, 1057.685600, 1068.983600, 223 | 1079.031200, 1091.677000, 1102.318800, 1113.484600, 1124.442400, 224 | 1135.739000, 1147.148800, 1158.920200, 1169.406000, 1181.534200, 225 | 1193.283400, 1203.895400, 1216.328600, 1226.214600, 1239.668400, 226 | 1251.994600, 1262.123000, 1275.433800, 1285.737800, 1296.076000, 227 | 1308.969200, 1320.496400, 1333.099800, 1343.986400, 1357.775400, 228 | 1368.320800, 1380.483800, 1392.738800, 1406.075800, 1416.909800, 229 | 1428.972800, 1440.922800, 1453.929200, 1462.617000, 1476.050000, 230 | 1490.299600, 1500.612800, 1513.739200, 1524.517400, 1536.632200, 231 | 1548.258400, 1562.376600, 1572.423000, 1587.123200, 1596.516400, 232 | 1610.593800, 1622.597200, 1633.122200, 1647.767400, 1658.504400, 233 | 1671.570000, 1683.704400, 1695.414200, 1708.710200, 1720.609400, 234 | 1732.652200, 1747.841000, 1756.407200, 1769.978600, 1782.327600, 235 | 1797.521600, 1808.318600, 1819.069400, 1834.354000, 1844.575000, 236 | 1856.280800, 1871.128800, 1880.785200, 1893.962200, 1906.341800, 237 | 1920.654800, 1932.930200, 1945.858400, 1955.473000, 1968.824800, 238 | 1980.644600, 1995.959800, 2008.349000, 2019.855600, 2033.033400, 239 | 2044.020600, 2059.395600, 2069.917400, 2082.608400, 2093.703600, 240 | 2106.610800, 2118.912400, 2132.301000, 2144.762800, 2159.842200, 241 | 2171.021200, 2183.101000, 2193.511200, 2208.052000, 2221.319400, 242 | 2233.328200, 2247.295000, 2257.722200, 2273.342000, 2286.563800, 243 | 2299.678600, 2310.811400, 2322.331200, 2335.516000, 2349.874000, 244 | 2363.596800, 2373.865000, 2387.191800, 2401.832800, 2414.849600, 245 | 2424.544000, 2436.759200, 2447.168200, 2464.195800, 2474.343800, 246 | 2489.000600, 2497.452600, 2513.658600, 2527.190000, 2540.702800, 247 | 2553.768000}, 248 | 249 | // Precision 10 250 | {738.125600, 750.423400, 763.106400, 775.473200, 788.463600, 251 | 801.064400, 814.488000, 827.965400, 841.083200, 854.786400, 252 | 868.199200, 882.217600, 896.522800, 910.171600, 924.775200, 253 | 938.899000, 953.612600, 968.649200, 982.947400, 998.521400, 254 | 1013.106400, 1028.636400, 1044.246800, 1059.458800, 1075.383200, 255 | 1091.058400, 1106.860600, 1123.386800, 1139.506200, 1156.186200, 256 | 1172.463000, 1189.339000, 1206.193600, 1223.129200, 1240.185400, 257 | 1257.290800, 1275.332400, 1292.851800, 1310.520400, 1328.485400, 258 | 1345.931800, 1364.552000, 1381.465800, 1400.425600, 1419.849000, 259 | 1438.152000, 1456.895600, 1474.879200, 1494.118000, 1513.620000, 260 | 1532.513200, 1551.932200, 1570.772600, 1590.608600, 1610.533200, 261 | 1630.591800, 1650.429400, 1669.766200, 1690.410600, 1710.733800, 262 | 1730.901200, 1750.448600, 1770.155600, 1791.633800, 1812.731200, 263 | 1833.626400, 1853.952600, 1874.874200, 1896.832600, 1918.196600, 264 | 1939.559400, 1961.070000, 1983.037000, 2003.180400, 2026.071000, 265 | 2047.488400, 2070.084800, 2091.294400, 2114.333000, 2135.962600, 266 | 2158.290200, 2181.081400, 2202.033400, 2224.483200, 2246.390000, 267 | 2269.720200, 2292.171400, 2314.235800, 2338.934600, 2360.891000, 268 | 2384.026400, 2408.383400, 2430.154400, 2454.868400, 2476.989600, 269 | 2501.436800, 2522.870200, 2548.040800, 2570.673800, 2593.520800, 270 | 2617.015800, 2640.230200, 2664.096200, 2687.498600, 2714.258800, 271 | 2735.391400, 2759.624400, 2781.837800, 2808.007200, 2830.651600, 272 | 2856.245400, 2877.213600, 2903.454600, 2926.785000, 2951.229400, 273 | 2976.468000, 3000.867000, 3023.650800, 3049.910000, 3073.598400, 274 | 3098.162000, 3121.556400, 3146.232800, 3170.948400, 3195.590200, 275 | 3221.334600, 3242.703200, 3271.611200, 3296.554600, 3317.737600, 276 | 3345.072000, 3369.951800, 3394.326000, 3418.181800, 3444.692600, 277 | 3469.086000, 3494.275400, 3517.869800, 3544.248000, 3565.376800, 278 | 3588.723400, 3616.979000, 3643.750400, 3668.681200, 3695.720000, 279 | 3719.739200, 3742.622400, 3770.445600, 3795.660200, 3819.905800, 280 | 3844.002000, 3869.517000, 3895.682400, 3920.862200, 3947.136400, 281 | 3973.985000, 3995.477200, 4021.620000, 4046.628000, 4074.650000, 282 | 4096.225600, 4121.831000, 4146.640600, 4173.276000, 4195.074400, 283 | 4223.969600, 4251.370800, 4272.996600, 4300.804600, 4326.302000, 284 | 4353.124800, 4374.312000, 4403.032200, 4426.819000, 4450.059800, 285 | 4478.520600, 4504.811600, 4528.892800, 4553.958400, 4578.871200, 286 | 4603.838400, 4632.387200, 4655.512800, 4675.821000, 4704.622200, 287 | 4731.986200, 4755.417400, 4781.262800, 4804.332000, 4832.304800, 288 | 4862.875200, 4883.414800, 4906.954400, 4935.351600, 4954.353200, 289 | 4984.024800, 5011.217000, 5035.325800, 5057.367200, 5084.182800}, 290 | 291 | // Precision 11 292 | {1477.000000, 1501.601400, 1526.580200, 1551.794200, 1577.304200, 293 | 1603.206200, 1629.840200, 1656.229200, 1682.946200, 1709.992600, 294 | 1737.302600, 1765.425200, 1793.057800, 1821.609200, 1849.626000, 295 | 1878.556800, 1908.527000, 1937.515400, 1967.187400, 1997.387800, 296 | 2027.370000, 2058.197200, 2089.572800, 2120.101200, 2151.966800, 297 | 2183.292000, 2216.077200, 2247.857800, 2280.656200, 2313.041000, 298 | 2345.714000, 2380.311200, 2414.180600, 2447.985400, 2481.656000, 299 | 2516.346000, 2551.515400, 2586.837800, 2621.744800, 2656.672200, 300 | 2693.572200, 2729.146200, 2765.412400, 2802.872800, 2838.898000, 301 | 2876.408000, 2913.492600, 2951.493800, 2989.677600, 3026.282000, 302 | 3065.770400, 3104.101200, 3143.738800, 3181.687600, 3221.187200, 303 | 3261.504800, 3300.021400, 3339.806000, 3381.409000, 3421.414400, 304 | 3461.429400, 3502.228600, 3544.651000, 3586.615600, 3627.337000, 305 | 3670.083000, 3711.153800, 3753.509400, 3797.010000, 3838.668600, 306 | 3882.167800, 3922.811600, 3967.997800, 4009.920400, 4054.328600, 307 | 4097.570600, 4140.601400, 4185.544000, 4229.597600, 4274.583000, 308 | 4316.943800, 4361.672000, 4406.278600, 4451.862800, 4496.183400, 309 | 4543.505000, 4589.181600, 4632.518800, 4678.229400, 4724.890800, 310 | 4769.019400, 4817.052000, 4861.458800, 4910.159600, 4956.434400, 311 | 5002.523800, 5048.130000, 5093.637400, 5142.816200, 5187.789400, 312 | 5237.398400, 5285.607800, 5331.085800, 5379.103600, 5428.625800, 313 | 5474.601800, 5522.761800, 5571.582200, 5618.590000, 5667.999200, 314 | 5714.880000, 5763.454000, 5808.698200, 5860.364400, 5910.291400, 315 | 5953.571000, 6005.923200, 6055.191400, 6104.588200, 6154.570200, 316 | 6199.703600, 6251.176400, 6298.759600, 6350.030200, 6398.061000, 317 | 6448.469400, 6495.933000, 6548.047400, 6597.716600, 6646.941600, 318 | 6695.920800, 6742.632800, 6793.527600, 6842.193400, 6894.237200, 319 | 6945.386400, 6996.922800, 7044.237200, 7094.137400, 7142.227200, 320 | 7192.294200, 7238.833800, 7288.900600, 7344.090800, 7394.854400, 321 | 7443.517600, 7490.414800, 7542.931400, 7595.673800, 7641.987800, 322 | 7694.368800, 7743.044800, 7797.522000, 7845.530000, 7899.594000, 323 | 7950.313200, 7996.455000, 8050.944200, 8092.911400, 8153.137400, 324 | 8197.447200, 8252.827800, 8301.872800, 8348.677600, 8401.469800, 325 | 8453.551000, 8504.659800, 8553.894400, 8604.127600, 8657.651400, 326 | 8710.306200, 8758.908000, 8807.870600, 8862.170200, 8910.466800, 327 | 8960.770000, 9007.276600, 9063.164000, 9121.053400, 9164.135400, 328 | 9218.159400, 9267.767000, 9319.059400, 9372.155000, 9419.712600, 329 | 9474.372200, 9520.133800, 9572.368000, 9622.770200, 9675.844800, 330 | 9726.539600, 9778.737800, 9827.655400, 9878.192200, 9928.778200, 331 | 9978.398400, 10026.578000, 10076.562600, 10137.161800, 10177.524400, 332 | 10229.917600}, 333 | 334 | // Precision 12 335 | {2954.000000, 3003.478200, 3053.356800, 3104.366600, 3155.324000, 336 | 3206.959800, 3259.648000, 3312.539000, 3366.147400, 3420.257600, 337 | 3474.837600, 3530.607600, 3586.451000, 3643.380000, 3700.410400, 338 | 3757.563800, 3815.967600, 3875.193000, 3934.838000, 3994.854800, 339 | 4055.018000, 4117.174200, 4178.448200, 4241.129400, 4304.477600, 340 | 4367.404400, 4431.872400, 4496.373200, 4561.430400, 4627.532600, 341 | 4693.949000, 4761.553200, 4828.725600, 4897.618200, 4965.518600, 342 | 5034.452800, 5104.865000, 5174.716400, 5244.682800, 5316.670800, 343 | 5387.831200, 5459.903600, 5532.476000, 5604.865200, 5679.671800, 344 | 5753.757000, 5830.207200, 5905.282800, 5980.043400, 6056.626400, 345 | 6134.319200, 6211.574600, 6290.081600, 6367.117600, 6447.979600, 346 | 6526.557600, 6606.185800, 6686.914400, 6766.114200, 6847.081800, 347 | 6927.966400, 7010.909600, 7091.081600, 7175.396200, 7260.345400, 348 | 7344.018000, 7426.421400, 7511.310600, 7596.068600, 7679.809400, 349 | 7765.818000, 7852.424800, 7936.834000, 8022.363000, 8109.506600, 350 | 8200.455400, 8288.583200, 8373.366000, 8463.480800, 8549.768200, 351 | 8642.052200, 8728.328800, 8820.952800, 8907.727000, 9001.079400, 352 | 9091.252200, 9179.988000, 9269.852000, 9362.639400, 9453.642000, 353 | 9546.902400, 9640.661600, 9732.662200, 9824.325400, 9917.748400, 354 | 10007.939200, 10106.750800, 10196.215200, 10289.811400, 10383.549400, 355 | 10482.306400, 10576.873400, 10668.787200, 10764.715600, 10862.019600, 356 | 10952.793000, 11049.974800, 11146.070200, 11241.449200, 11339.277200, 357 | 11434.233600, 11530.741000, 11627.613600, 11726.311000, 11821.596400, 358 | 11918.837000, 12015.372400, 12113.016200, 12213.042400, 12306.980400, 359 | 12408.451800, 12504.896800, 12604.586000, 12700.933200, 12798.705000, 360 | 12898.514200, 12997.048800, 13094.788000, 13198.475000, 13292.776400, 361 | 13392.969800, 13486.857400, 13590.161600, 13686.583800, 13783.626400, 362 | 13887.263800, 13992.097800, 14081.084400, 14189.995600, 14280.091200, 363 | 14382.495600, 14486.438400, 14588.108200, 14686.239200, 14782.276000, 364 | 14888.028400, 14985.186400, 15088.859600, 15187.099800, 15285.027000, 365 | 15383.669400, 15495.826600, 15591.373600, 15694.200800, 15790.324600, 366 | 15898.411600, 15997.452200, 16095.501400, 16198.851400, 16291.749200, 367 | 16402.642400, 16499.126600, 16606.243600, 16697.718600, 16796.394600, 368 | 16902.337600, 17005.767200, 17100.814000, 17206.828200, 17305.826200, 369 | 17416.074400, 17508.409200, 17617.017800, 17715.455400, 17816.758000, 370 | 17920.174800, 18012.923600, 18119.798400, 18223.224800, 18324.248200, 371 | 18426.627600, 18525.093200, 18629.897600, 18733.258800, 18831.046600, 372 | 18940.136600, 19032.269600, 19131.729000, 19243.486400, 19349.693200, 373 | 19442.866000, 19547.944800, 19653.279800, 19754.403400, 19854.069200, 374 | 19965.122400, 20065.177400, 20158.221200, 20253.353000, 20366.326400, 375 | 20463.220000}, 376 | 377 | // Precision 13 378 | {5908.505200, 6007.267200, 6107.347000, 6208.579400, 6311.262200, 379 | 6414.551400, 6519.337600, 6625.695200, 6732.598800, 6841.355200, 380 | 6950.597200, 7061.308200, 7173.564600, 7287.109000, 7401.821600, 381 | 7516.434400, 7633.380200, 7751.296200, 7870.378400, 7990.292000, 382 | 8110.790000, 8233.457400, 8356.603600, 8482.271200, 8607.770800, 383 | 8735.099000, 8863.185800, 8993.474600, 9123.849600, 9255.679400, 384 | 9388.544800, 9522.751600, 9657.310600, 9792.609400, 9930.564200, 385 | 10068.794000, 10206.725600, 10347.810000, 10490.319600, 10632.077800, 386 | 10775.991600, 10920.466200, 11066.124000, 11213.073000, 11358.036200, 387 | 11508.100600, 11659.171600, 11808.751400, 11959.488400, 12112.131400, 388 | 12265.037000, 12420.375600, 12578.933000, 12734.311000, 12890.000600, 389 | 13047.214400, 13207.309600, 13368.514400, 13528.024000, 13689.847000, 390 | 13852.752800, 14018.316800, 14180.537200, 14346.966800, 14513.507400, 391 | 14677.867000, 14846.218600, 15017.418600, 15184.971600, 15356.339000, 392 | 15529.297200, 15697.357800, 15871.868600, 16042.187000, 16216.409400, 393 | 16389.418800, 16565.912600, 16742.327200, 16919.004200, 17094.759200, 394 | 17273.965000, 17451.834200, 17634.425400, 17810.598400, 17988.924200, 395 | 18171.051000, 18354.793800, 18539.466000, 18721.040800, 18904.997200, 396 | 19081.867000, 19271.911800, 19451.869400, 19637.981600, 19821.292200, 397 | 20013.129200, 20199.385800, 20387.872600, 20572.951400, 20770.776400, 398 | 20955.171400, 21144.751000, 21329.995200, 21520.709000, 21712.701600, 399 | 21906.386800, 22096.262600, 22286.052400, 22475.051000, 22665.509800, 400 | 22862.849200, 23055.529400, 23249.613800, 23437.848000, 23636.273000, 401 | 23826.093000, 24020.329600, 24213.389600, 24411.739200, 24602.961400, 402 | 24805.795200, 24998.155200, 25193.958800, 25389.016600, 25585.839200, 403 | 25780.697600, 25981.272800, 26175.977000, 26376.525200, 26570.196400, 404 | 26773.387000, 26962.981200, 27163.058600, 27368.164000, 27565.053400, 405 | 27758.742800, 27961.127600, 28163.232400, 28362.381600, 28565.766800, 406 | 28758.644000, 28956.976800, 29163.472200, 29354.702600, 29561.118600, 407 | 29767.994800, 29959.998600, 30164.049200, 30366.981800, 30562.533800, 408 | 30762.992800, 30976.159200, 31166.274000, 31376.722000, 31570.373400, 409 | 31770.809000, 31974.893400, 32179.528600, 32387.544200, 32582.350400, 410 | 32794.076000, 32989.952800, 33191.842000, 33392.468400, 33595.659000, 411 | 33801.867200, 34000.341400, 34200.092200, 34402.679200, 34610.063800, 412 | 34804.008400, 35011.130000, 35218.669000, 35418.663400, 35619.079200, 413 | 35830.653400, 36028.496600, 36229.790200, 36438.642200, 36630.776400, 414 | 36833.310200, 37048.672800, 37247.391600, 37453.590400, 37669.361400, 415 | 37854.552600, 38059.305000, 38268.093600, 38470.251600, 38674.706400, 416 | 38876.167000, 39068.379400, 39281.914400, 39492.856600, 39684.862800, 417 | 39898.410800, 40093.183600, 40297.685800, 40489.708600, 40717.242400}, 418 | 419 | // Precision 14 420 | {11817.475000, 12015.004600, 12215.379200, 12417.750400, 12623.181400, 421 | 12830.008600, 13040.007200, 13252.503000, 13466.178000, 13683.273800, 422 | 13902.034400, 14123.979800, 14347.394000, 14573.778400, 14802.689400, 423 | 15033.682400, 15266.913400, 15502.862400, 15741.494400, 15980.795600, 424 | 16223.891600, 16468.631600, 16715.733000, 16965.572600, 17217.204000, 425 | 17470.666000, 17727.851600, 17986.788600, 18247.690200, 18510.963200, 426 | 18775.304000, 19044.748600, 19314.440800, 19587.202000, 19862.257600, 427 | 20135.924000, 20417.032400, 20697.978800, 20979.611200, 21265.027400, 428 | 21550.723000, 21841.690600, 22132.162000, 22428.140600, 22722.127000, 429 | 23020.560600, 23319.739400, 23620.401400, 23925.272800, 24226.922400, 430 | 24535.581000, 24845.505000, 25155.961800, 25470.382800, 25785.970200, 431 | 26103.776400, 26420.413200, 26742.018600, 27062.885200, 27388.415000, 432 | 27714.602400, 28042.296000, 28365.449400, 28701.152600, 29031.800800, 433 | 29364.215600, 29704.497000, 30037.145800, 30380.111000, 30723.816800, 434 | 31059.511400, 31404.949800, 31751.675200, 32095.268600, 32444.779200, 435 | 32794.767000, 33145.204000, 33498.422600, 33847.650200, 34209.006000, 436 | 34560.849000, 34919.483800, 35274.977800, 35635.132200, 35996.326600, 437 | 36359.139400, 36722.826600, 37082.851600, 37447.735400, 37815.960600, 438 | 38191.069200, 38559.410600, 38924.811200, 39294.672600, 39663.973000, 439 | 40042.261000, 40416.203600, 40779.203600, 41161.643600, 41540.901400, 440 | 41921.199800, 42294.769800, 42678.526400, 43061.346400, 43432.375000, 441 | 43818.432000, 44198.659800, 44583.013800, 44970.479400, 45353.924000, 442 | 45729.858000, 46118.222400, 46511.572400, 46900.738600, 47280.696400, 443 | 47668.147200, 48055.679600, 48446.943600, 48838.714600, 49217.729600, 444 | 49613.779600, 50010.750800, 50410.020800, 50793.788600, 51190.245600, 445 | 51583.188200, 51971.079600, 52376.533800, 52763.319000, 53165.553400, 446 | 53556.559400, 53948.270200, 54346.352000, 54748.791400, 55138.577000, 447 | 55543.482400, 55941.174800, 56333.774600, 56745.155200, 57142.794400, 448 | 57545.223600, 57935.995600, 58348.526800, 58737.547400, 59158.596200, 449 | 59542.689600, 59958.800400, 60349.378800, 60755.021200, 61147.614400, 450 | 61548.194000, 61946.069600, 62348.604200, 62763.603000, 63162.781000, 451 | 63560.635000, 63974.348200, 64366.490800, 64771.587600, 65176.734600, 452 | 65597.391600, 65995.915000, 66394.038400, 66822.939600, 67203.633600, 453 | 67612.203200, 68019.007800, 68420.038800, 68821.220000, 69235.838800, 454 | 69640.072400, 70055.155000, 70466.357000, 70863.426600, 71276.248200, 455 | 71677.030600, 72080.200600, 72493.021400, 72893.595200, 73314.585600, 456 | 73714.985200, 74125.302200, 74521.212200, 74933.681400, 75341.590400, 457 | 75743.024400, 76166.027800, 76572.132200, 76973.102800, 77381.628400, 458 | 77800.609200, 78189.328000, 78607.096200, 79012.250800, 79407.835800, 459 | 79825.725000, 80238.701000, 80646.891000, 81035.643600, 81460.044800, 460 | 81876.388400}, 461 | 462 | // Precision 15 463 | {23635.003600, 24030.803400, 24431.474400, 24837.152400, 25246.792800, 464 | 25661.326000, 26081.353200, 26505.280600, 26933.989200, 27367.709800, 465 | 27805.318000, 28248.799000, 28696.438200, 29148.824400, 29605.513800, 466 | 30066.866800, 30534.234400, 31006.320000, 31480.778000, 31962.241800, 467 | 32447.332400, 32938.023200, 33432.731000, 33930.728000, 34433.989600, 468 | 34944.140200, 35457.558800, 35974.595800, 36497.329600, 37021.909600, 469 | 37554.326000, 38088.082600, 38628.881600, 39171.319200, 39723.232600, 470 | 40274.555400, 40832.314200, 41390.613000, 41959.590800, 42532.546600, 471 | 43102.034400, 43683.507200, 44266.694000, 44851.282200, 45440.786200, 472 | 46038.058600, 46640.316400, 47241.064000, 47846.155000, 48454.739600, 473 | 49076.916800, 49692.542000, 50317.477800, 50939.650000, 51572.559600, 474 | 52210.290600, 52843.739600, 53481.399600, 54127.236000, 54770.406000, 475 | 55422.659800, 56078.795800, 56736.717400, 57397.678400, 58064.578400, 476 | 58730.308000, 59404.978400, 60077.086400, 60751.915800, 61444.138600, 477 | 62115.817000, 62808.774200, 63501.477400, 64187.545400, 64883.662200, 478 | 65582.746800, 66274.531800, 66976.927600, 67688.776400, 68402.138000, 479 | 69109.627400, 69822.970600, 70543.610800, 71265.520200, 71983.384800, 480 | 72708.465600, 73433.384000, 74158.466400, 74896.486800, 75620.956400, 481 | 76362.143400, 77098.320400, 77835.766200, 78582.611400, 79323.990200, 482 | 80067.865800, 80814.924600, 81567.013600, 82310.853600, 83061.995200, 483 | 83821.409600, 84580.860800, 85335.547000, 86092.580200, 86851.650600, 484 | 87612.311000, 88381.201600, 89146.329600, 89907.897400, 90676.846000, 485 | 91451.415200, 92224.551800, 92995.868600, 93763.506600, 94551.279600, 486 | 95315.194400, 96096.180600, 96881.091800, 97665.679000, 98442.680000, 487 | 99229.300200, 100011.099400, 100790.638600, 101580.156400, 102377.748400, 488 | 103152.139200, 103944.271200, 104730.216000, 105528.633600, 106324.939800, 489 | 107117.670600, 107890.398800, 108695.226600, 109485.238000, 110294.787600, 490 | 111075.095800, 111878.049600, 112695.286400, 113464.548600, 114270.047400, 491 | 115068.608000, 115884.362600, 116673.258800, 117483.371600, 118275.097000, 492 | 119085.409200, 119879.280800, 120687.586800, 121499.994400, 122284.916000, 493 | 123095.925400, 123912.503800, 124709.045400, 125503.718200, 126323.259000, 494 | 127138.941200, 127943.829400, 128755.646000, 129556.535400, 130375.329800, 495 | 131161.473400, 131971.196200, 132787.545800, 133588.105600, 134431.351000, 496 | 135220.290600, 136023.398000, 136846.655800, 137667.000400, 138463.663000, 497 | 139283.715400, 140074.614600, 140901.307200, 141721.854800, 142543.232200, 498 | 143356.109600, 144173.741200, 144973.094800, 145794.316200, 146609.571400, 499 | 147420.003000, 148237.978400, 149050.569600, 149854.761000, 150663.196600, 500 | 151494.075400, 152313.141600, 153112.690200, 153935.720600, 154746.926200, 501 | 155559.547000, 156401.974600, 157228.703600, 158008.725400, 158820.750000, 502 | 159646.918400, 160470.445800, 161279.534800, 162093.311400, 162918.542000, 503 | 163729.284200}, 504 | 505 | // Precision 16 506 | {47271.000000, 48062.358400, 48862.707400, 49673.152000, 50492.841600, 507 | 51322.951400, 52161.030000, 53009.407000, 53867.634800, 54734.206000, 508 | 55610.514400, 56496.209600, 57390.795000, 58297.268000, 59210.644800, 509 | 60134.665000, 61068.024800, 62010.447200, 62962.520400, 63923.574200, 510 | 64895.019400, 65876.418200, 66862.613600, 67862.696800, 68868.890800, 511 | 69882.854400, 70911.271000, 71944.092400, 72990.032600, 74040.692000, 512 | 75100.633600, 76174.782600, 77252.599800, 78340.297400, 79438.257200, 513 | 80545.497600, 81657.279600, 82784.633600, 83915.515000, 85059.736200, 514 | 86205.936800, 87364.442400, 88530.335800, 89707.374400, 90885.963800, 515 | 92080.197000, 93275.573800, 94479.391000, 95695.918000, 96919.223600, 516 | 98148.460200, 99382.347400, 100625.697400, 101878.028400, 103141.627800, 517 | 104409.458800, 105686.288200, 106967.540200, 108261.603200, 109548.157800, 518 | 110852.072800, 112162.231000, 113479.007200, 114806.262600, 116137.907200, 519 | 117469.504800, 118813.518600, 120165.487600, 121516.255600, 122875.766000, 520 | 124250.544400, 125621.222200, 127003.235200, 128387.848000, 129775.264400, 521 | 131181.777600, 132577.308600, 133979.945800, 135394.113200, 136800.907800, 522 | 138233.217000, 139668.530800, 141085.212000, 142535.212200, 143969.068400, 523 | 145420.287200, 146878.154200, 148332.757200, 149800.320200, 151269.660000, 524 | 152743.610400, 154213.094800, 155690.288000, 157169.424600, 158672.175600, 525 | 160160.059000, 161650.685400, 163145.777200, 164645.672600, 166159.195200, 526 | 167682.157800, 169177.332800, 170700.011800, 172228.896400, 173732.666400, 527 | 175265.555600, 176787.799000, 178317.111000, 179856.691400, 181400.865000, 528 | 182943.461200, 184486.742000, 186033.469800, 187583.788600, 189148.186800, 529 | 190688.452600, 192250.192600, 193810.904200, 195354.297200, 196938.768200, 530 | 198493.589800, 200079.282400, 201618.912000, 203205.549200, 204765.579800, 531 | 206356.112400, 207929.306400, 209498.719600, 211086.229000, 212675.132400, 532 | 214256.789200, 215826.239200, 217412.847400, 218995.672400, 220618.603800, 533 | 222207.116600, 223781.036400, 225387.433200, 227005.792800, 228590.433600, 534 | 230217.873800, 231805.105400, 233408.900000, 234995.343200, 236601.495600, 535 | 238190.790400, 239817.254800, 241411.283200, 243002.406600, 244640.188400, 536 | 246255.312800, 247849.350800, 249479.973400, 251106.882200, 252705.027000, 537 | 254332.924200, 255935.129000, 257526.901400, 259154.772000, 260777.625000, 538 | 262390.253000, 264004.490600, 265643.590000, 267255.407600, 268873.426000, 539 | 270470.725200, 272106.480400, 273722.445600, 275337.794000, 276945.703800, 540 | 278592.915400, 280204.372600, 281841.160600, 283489.171000, 285130.171600, 541 | 286735.336200, 288364.716400, 289961.181400, 291595.552400, 293285.683000, 542 | 294899.666800, 296499.343400, 298128.046200, 299761.894600, 301394.242400, 543 | 302997.674800, 304615.147800, 306269.772400, 307886.114000, 309543.102800, 544 | 311153.286200, 312782.854600, 314421.200800, 316033.243800, 317692.963600, 545 | 319305.264800, 320948.740600, 322566.336400, 324228.422400, 325847.154200}, 546 | 547 | // Precision 17 548 | {94542.000000, 96125.811000, 97728.019000, 99348.558000, 100987.970500, 549 | 102646.756500, 104324.512500, 106021.743500, 107736.786500, 109469.272000, 550 | 111223.946500, 112995.219000, 114787.432000, 116593.152000, 118422.710000, 551 | 120267.234500, 122134.676500, 124020.937000, 125927.270500, 127851.255000, 552 | 129788.948500, 131751.016000, 133726.822500, 135722.592000, 137736.789000, 553 | 139770.568000, 141821.518000, 143891.343000, 145982.141500, 148095.387000, 554 | 150207.526000, 152355.649000, 154515.641500, 156696.050000, 158887.757500, 555 | 161098.159000, 163329.852000, 165569.053000, 167837.400500, 170121.616500, 556 | 172420.459500, 174732.626500, 177062.770000, 179412.502000, 181774.035000, 557 | 184151.939000, 186551.689500, 188965.691000, 191402.809500, 193857.949000, 558 | 196305.077500, 198774.671500, 201271.258500, 203764.780000, 206299.369500, 559 | 208818.136500, 211373.115000, 213946.746500, 216532.076000, 219105.541000, 560 | 221714.537500, 224337.513500, 226977.512500, 229613.065500, 232270.268500, 561 | 234952.206500, 237645.355500, 240331.192500, 243034.517000, 245756.072500, 562 | 248517.686500, 251232.737000, 254011.395500, 256785.995000, 259556.440000, 563 | 262368.335000, 265156.911000, 267965.266000, 270785.583000, 273616.049500, 564 | 276487.483500, 279346.639000, 282202.509000, 285074.388500, 287942.285500, 565 | 290856.018000, 293774.034500, 296678.514500, 299603.635500, 302552.657500, 566 | 305492.978500, 308466.860500, 311392.581000, 314347.538000, 317319.429500, 567 | 320285.978500, 323301.732500, 326298.323500, 329301.310500, 332301.987000, 568 | 335309.791000, 338370.762000, 341382.923000, 344431.126500, 347464.154500, 569 | 350507.280000, 353619.234500, 356631.200500, 359685.203000, 362776.784500, 570 | 365886.488000, 368958.225500, 372060.682500, 375165.433500, 378237.935000, 571 | 381328.311000, 384430.522500, 387576.425000, 390683.242000, 393839.648000, 572 | 396977.842500, 400101.980500, 403271.296000, 406409.842500, 409529.548500, 573 | 412678.700000, 415847.423000, 419020.803500, 422157.081000, 425337.749000, 574 | 428479.616500, 431700.902000, 434893.191500, 438049.582000, 441210.541500, 575 | 444379.254500, 447577.356000, 450741.931000, 453959.548000, 457137.093500, 576 | 460329.846000, 463537.481500, 466732.334500, 469960.561500, 473164.681000, 577 | 476347.634500, 479496.173000, 482813.164500, 486025.699500, 489249.488500, 578 | 492460.194500, 495675.880500, 498908.007500, 502131.802000, 505374.385500, 579 | 508550.991500, 511806.730500, 515026.776000, 518217.000500, 521523.985500, 580 | 524705.985500, 527950.997000, 531210.026500, 534472.497000, 537750.731500, 581 | 540926.922000, 544207.094000, 547429.434500, 550666.374500, 553975.347500, 582 | 557150.718500, 560399.616500, 563662.697000, 566916.739500, 570146.121500, 583 | 573447.425000, 576689.624500, 579874.574500, 583202.337000, 586503.025500, 584 | 589715.635000, 592910.161000, 596214.388500, 599488.035000, 602740.920000, 585 | 605983.068500, 609248.670000, 612491.360500, 615787.912000, 619107.524500, 586 | 622307.955500, 625577.333000, 628840.438500, 632085.215500, 635317.613500, 587 | 638691.719500, 641887.467000, 645139.940500, 648441.546000, 651666.252000, 588 | 654941.845000}, 589 | 590 | // Precision 18 591 | {189084.000000, 192250.913000, 195456.774000, 198696.946000, 592 | 201977.762000, 205294.444000, 208651.754000, 212042.099000, 593 | 215472.269000, 218941.910000, 222443.912000, 225996.845000, 594 | 229568.199000, 233193.568000, 236844.457000, 240543.233000, 595 | 244279.475000, 248044.270000, 251854.588000, 255693.200000, 596 | 259583.619000, 263494.621000, 267445.385000, 271454.061000, 597 | 275468.769000, 279549.456000, 283646.446000, 287788.198000, 598 | 291966.099000, 296181.164000, 300431.469000, 304718.618000, 599 | 309024.004000, 313393.508000, 317760.803000, 322209.731000, 600 | 326675.061000, 331160.627000, 335654.470000, 340241.442000, 601 | 344841.833000, 349467.132000, 354130.629000, 358819.432000, 602 | 363574.626000, 368296.587000, 373118.482000, 377914.930000, 603 | 382782.301000, 387680.669000, 392601.981000, 397544.323000, 604 | 402529.115000, 407546.018000, 412593.658000, 417638.657000, 605 | 422762.865000, 427886.169000, 433017.167000, 438213.273000, 606 | 443441.254000, 448692.421000, 453937.533000, 459239.049000, 607 | 464529.569000, 469910.083000, 475274.030000, 480684.473000, 608 | 486070.260000, 491515.237000, 496995.651000, 502476.617000, 609 | 507973.609000, 513497.190000, 519083.233000, 524726.509000, 610 | 530305.505000, 535945.728000, 541584.404000, 547274.055000, 611 | 552967.236000, 558667.862000, 564360.216000, 570128.148000, 612 | 575965.080000, 581701.952000, 587532.523000, 593361.144000, 613 | 599246.128000, 605033.418000, 610958.779000, 616837.117000, 614 | 622772.818000, 628672.040000, 634675.369000, 640574.831000, 615 | 646585.739000, 652574.547000, 658611.217000, 664642.684000, 616 | 670713.914000, 676737.681000, 682797.313000, 688837.897000, 617 | 694917.874000, 701009.882000, 707173.648000, 713257.254000, 618 | 719415.392000, 725636.761000, 731710.697000, 737906.209000, 619 | 744103.074000, 750313.390000, 756504.185000, 762712.579000, 620 | 768876.985000, 775167.859000, 781359.000000, 787615.959000, 621 | 793863.597000, 800245.477000, 806464.582000, 812785.294000, 622 | 819005.925000, 825403.057000, 831676.197000, 837936.284000, 623 | 844266.968000, 850642.711000, 856959.756000, 863322.774000, 624 | 869699.931000, 876102.478000, 882355.787000, 888694.463000, 625 | 895159.952000, 901536.143000, 907872.631000, 914293.672000, 626 | 920615.140000, 927130.974000, 933409.404000, 939922.178000, 627 | 946331.470000, 952745.930000, 959209.264000, 965590.224000, 628 | 972077.284000, 978501.961000, 984953.190000, 991413.271000, 629 | 997817.479000, 1004222.658000, 1010725.676000, 1017177.138000, 630 | 1023612.529000, 1030098.236000, 1036493.719000, 1043112.207000, 631 | 1049537.036000, 1056008.096000, 1062476.184000, 1068942.337000, 632 | 1075524.950000, 1081932.864000, 1088426.025000, 1094776.005000, 633 | 1101327.448000, 1107901.673000, 1114423.639000, 1120884.602000, 634 | 1127324.923000, 1133794.240000, 1140328.886000, 1146849.376000, 635 | 1153346.682000, 1159836.502000, 1166478.703000, 1172953.304000, 636 | 1179391.502000, 1185950.982000, 1192544.052000, 1198913.410000, 637 | 1205430.994000, 1212015.525000, 1218674.042000, 1225121.683000, 638 | 1231551.101000, 1238126.379000, 1244673.795000, 1251260.649000, 639 | 1257697.860000, 1264320.983000, 1270736.319000, 1277274.694000, 640 | 1283804.950000, 1290211.514000, 1296858.568000, 1303455.691000}}; 641 | 642 | extern const double BIAS_DATA[15][201] = { 643 | // Precision 4 644 | {10.000000, 9.717000, 9.207000, 8.789600, 8.288200, 7.820400, 645 | 7.377200, 6.934200, 6.520200, 6.161000, 5.772200, 5.463600, 646 | 5.039600, 4.676600, 4.356600, 4.045400, 3.793600, 3.485600, 647 | 3.266600, 2.994600, 2.766000, 2.469200, 2.363800, 2.076400, 648 | 1.786400, 1.760200, 1.481400, 1.433000, 1.292600, 1.066400, 649 | 0.999600, 0.795600, 0.536600, 0.589400, 0.573800, 0.269800, 650 | 0.368200, 0.054400, 0.234200, 0.010800, -0.203400, -0.070200, 651 | -0.129600, -0.364200, -0.480600, -0.227000, -0.322800, -0.382600, 652 | -0.511200, -0.669600, -0.749400, -0.500400, -0.617600, -0.692200, 653 | -0.601600, -0.416200, -0.338200, -0.782600, -0.648600, -0.919800, 654 | -0.851800, -0.962400, -0.640200, -1.192200, -1.025600, -1.086000, 655 | -1.219000, -0.819400, -0.940600, -1.155400, -1.207200, -1.175200, 656 | -1.167600, -1.140200, -1.375400, -1.298600, -1.607000, -1.329200, 657 | -1.760600}, 658 | 659 | // Precision 5 660 | {22.000000, 21.119400, 20.820800, 20.231800, 19.770000, 19.243600, 661 | 18.777400, 18.284800, 17.822400, 17.374200, 16.933600, 16.503000, 662 | 16.049400, 15.629200, 15.212400, 14.798000, 14.367000, 13.972800, 663 | 13.594400, 13.217000, 12.843800, 12.369600, 12.095600, 11.704400, 664 | 11.324000, 11.066800, 10.669800, 10.364400, 10.049000, 9.691800, 665 | 9.414600, 9.082000, 8.687000, 8.539800, 8.246200, 7.857000, 666 | 7.660600, 7.416800, 7.124800, 6.922200, 6.680400, 6.447000, 667 | 6.345400, 5.959400, 5.763600, 5.577600, 5.331000, 5.190000, 668 | 4.967600, 4.756400, 4.531400, 4.444200, 4.370800, 3.977400, 669 | 3.962400, 3.879600, 3.755000, 3.472000, 3.207600, 3.102400, 670 | 2.890800, 2.733800, 2.772800, 2.629000, 2.413000, 2.326600, 671 | 2.152400, 2.264200, 2.180600, 2.056600, 1.919200, 1.759800, 672 | 1.351600, 1.580200, 1.438600, 1.491600, 1.152400, 1.189200, 673 | 0.841400, 0.879800, 0.837600, 0.469800, 0.765600, 0.331000, 674 | 0.591400, 0.601200, 0.701600, 0.558200, 0.339400, 0.354400, 675 | 0.491200, 0.308000, 0.355200, -0.025400, 0.205200, -0.273000, 676 | 0.132200, 0.394400, -0.241200, 0.242000, 0.191400, 0.253800, 677 | -0.122400, -0.370800, 0.193200, -0.084800, 0.086800, -0.327200, 678 | -0.285600, 0.311400, -0.128400, -0.755000, -0.209200, -0.293600, 679 | -0.364000, -0.253600, -0.821200, -0.253600, -0.510400, -0.383400, 680 | -0.491800, -0.220200, -0.097200, -0.557400, -0.114600, -0.295000, 681 | -0.534800, -0.653800, 0.346400, 0.039800, -0.995800, 0.034200, 682 | -0.523400, -0.489000, -0.274800, -0.575000, -0.482800, 0.057200, 683 | -0.330600, -0.628800, -0.140200, -0.540600, -0.446000, -0.599400, 684 | -0.262600, 0.163400, -0.100600, -0.395000, -1.069600, -0.836400, 685 | -0.753200, -0.412400, -0.790400, -0.296800, -0.285400, -0.193000, 686 | -0.077200, -0.962800, -0.414800}, 687 | 688 | // Precision 6 689 | {45.000000, 44.190200, 43.271000, 42.835800, 41.814200, 41.285400, 690 | 40.317000, 39.354000, 38.892400, 37.943600, 37.459600, 36.526200, 691 | 35.624800, 35.157400, 34.282200, 33.837000, 32.963600, 32.074000, 692 | 31.704200, 30.797600, 30.477200, 29.656400, 28.794200, 28.500400, 693 | 27.686000, 27.291000, 26.567200, 25.855600, 25.498200, 24.820400, 694 | 24.425200, 23.774400, 23.078600, 22.834400, 22.029400, 21.809800, 695 | 21.079400, 20.573200, 20.187800, 19.564800, 19.290200, 18.678400, 696 | 18.335200, 17.894600, 17.371200, 17.085200, 16.499000, 16.268600, 697 | 15.684400, 15.223400, 14.973200, 14.335600, 14.228600, 13.726200, 698 | 13.328400, 13.104800, 12.596200, 12.356200, 12.127200, 11.418400, 699 | 11.497400, 11.082200, 10.856000, 10.480000, 10.283400, 10.020800, 700 | 9.637000, 9.517400, 9.057600, 8.747600, 8.427000, 8.132600, 701 | 8.237200, 8.278800, 7.677600, 7.792600, 7.195200, 6.956400, 702 | 6.645400, 6.870000, 6.542800, 6.200000, 6.029400, 5.627800, 703 | 5.678200, 5.792000, 5.351600, 5.283200, 5.039400, 5.074800, 704 | 4.491200, 4.849000, 4.696000, 4.540400, 4.073000, 4.371400, 705 | 3.721600, 3.732800, 3.420800, 3.418400, 3.942400, 3.277200, 706 | 3.411000, 3.130800, 2.769000, 2.925800, 2.682800, 2.750200, 707 | 2.706000, 2.388600, 3.018600, 2.451800, 2.927000, 2.417200, 708 | 2.411400, 2.033000, 2.512400, 2.556400, 2.600800, 2.417200, 709 | 1.804400, 1.997000, 2.454800, 1.894800, 2.234600, 2.308600, 710 | 2.154800, 1.884200, 1.650800, 0.677200, 1.725400, 1.475200, 711 | 1.722800, 1.661400, 1.167600, 1.793000, 1.000600, 0.905200, 712 | 0.660000, 1.558800, 1.163600, 0.688200, 0.712600, 0.450200, 713 | 1.197800, 0.975600, 0.165400, 1.727000, -0.252600, 1.197400, 714 | 1.134600, 1.304800, 1.194800, 0.313400, 0.879000, 1.120400, 715 | 0.853000, 1.679200, 0.857000, 0.448600, 1.236200, 0.953400, 716 | 1.028600, 0.563200, 0.663000, 0.723000, 0.756600, -0.837600, 717 | 0.256600, 0.620000, 0.821600, 0.216600, 0.205600, 0.220200, 718 | 0.372600, 0.334400, 0.928400, 0.972800, 0.192400, 0.487200, 719 | -0.413000, 0.807000, 0.120600, 0.769000, 0.870800, 0.665000, 720 | 0.118200, 0.401200, 0.635200, 0.135400, 0.175600, 1.160600, 721 | 0.346200, 0.521400, -0.586600, -1.164800, 0.968400, 0.837000, 722 | 0.779600, 0.985800}, 723 | 724 | // Precision 7 725 | {91.000000, 89.493400, 87.975800, 86.457400, 84.971800, 83.495400, 726 | 81.530200, 80.075600, 78.637400, 77.178200, 75.788800, 73.952200, 727 | 72.592000, 71.253200, 69.908600, 68.593800, 66.947400, 65.679600, 728 | 64.439400, 63.217600, 61.976800, 60.421400, 59.252800, 58.010200, 729 | 56.865800, 55.727800, 54.304400, 53.131600, 52.093000, 51.003200, 730 | 49.909200, 48.630600, 47.529400, 46.575600, 45.650800, 44.662000, 731 | 43.552000, 42.372400, 41.617000, 40.575400, 39.787200, 38.844400, 732 | 37.798800, 36.860600, 36.211800, 35.356600, 34.447600, 33.588200, 733 | 32.681600, 32.082400, 31.025800, 30.604800, 29.443600, 28.727400, 734 | 27.957000, 27.147000, 26.436400, 25.759200, 25.338600, 24.781000, 735 | 23.802800, 23.656000, 22.654400, 21.996000, 21.471800, 21.154400, 736 | 20.609800, 19.595600, 19.061600, 18.575800, 18.487800, 17.524400, 737 | 17.214600, 16.724000, 15.872200, 15.519800, 15.041400, 14.941000, 738 | 14.904800, 13.870000, 13.430400, 13.028000, 12.470800, 12.370000, 739 | 12.062400, 11.466800, 11.553200, 11.435200, 11.256400, 10.274400, 740 | 10.211800, 9.747200, 10.145600, 9.292800, 8.750400, 8.552800, 741 | 8.979000, 8.210200, 8.183400, 7.349400, 7.325000, 7.661400, 742 | 6.903000, 7.254400, 6.904200, 7.215000, 6.286400, 6.081400, 743 | 6.676400, 6.301000, 5.139000, 5.658000, 5.173200, 4.590200, 744 | 4.953800, 5.082800, 4.922000, 4.990200, 4.732800, 5.453800, 745 | 4.113600, 4.223400, 4.087800, 3.708000, 4.155600, 4.185200, 746 | 3.637200, 3.682200, 3.779600, 3.607800, 2.491600, 3.131000, 747 | 2.537600, 3.198800, 3.211000, 2.450200, 3.528200, 2.912000, 748 | 3.044800, 2.743200, 2.852400, 2.798800, 2.785800, 1.886800, 749 | 2.988600, 2.506400, 1.912400, 2.661600, 2.468200, 1.582000, 750 | 1.304000, 2.273800, 2.689400, 1.329000, 3.106000, 1.690800, 751 | 2.137400, 2.532200, 1.884800, 1.332400, 1.451200, 1.179000, 752 | 2.441200, 1.606600, 2.167000, 0.779400, 2.379000, 2.067000, 753 | 1.460000, 2.911600, 1.692000, 0.954600, 2.493000, 2.272200, 754 | 1.335000, 2.449000, 1.201400, 3.073800, 2.097400, 2.856400, 755 | 2.299600, 2.409000, 1.970400, 0.809800, 1.652800, 2.599800, 756 | 0.958000, 2.068000, 2.327800, 4.201600, 1.963200, 1.864000, 757 | 1.430000, 3.779400, 1.272000, 1.864400, 2.206000, 3.219000, 758 | 1.515400, 2.610200}, 759 | 760 | // Precision 8 761 | {183.215200, 180.245400, 177.209600, 173.665200, 170.631200, 167.682200, 762 | 164.249000, 161.329600, 158.003800, 155.207400, 152.461200, 149.270000, 763 | 146.517800, 143.441200, 140.803200, 138.163400, 135.168800, 132.607400, 764 | 129.694600, 127.266400, 124.822800, 122.043200, 119.682400, 116.946400, 765 | 114.626800, 112.262600, 109.837600, 107.403400, 104.895600, 102.852200, 766 | 100.763800, 98.355200, 96.355600, 93.752600, 91.929200, 89.895400, 767 | 87.819800, 85.766800, 83.298000, 81.668800, 79.946600, 77.974600, 768 | 76.167200, 74.347400, 72.302800, 70.891200, 69.114000, 67.464600, 769 | 65.974400, 64.409200, 62.602200, 60.843000, 59.568400, 58.165200, 770 | 56.542600, 55.415200, 53.538800, 52.359200, 51.136600, 49.486000, 771 | 48.391800, 46.507600, 45.509000, 44.383400, 43.349800, 42.066800, 772 | 40.734600, 40.122800, 38.452800, 37.700000, 36.644000, 36.051800, 773 | 34.577400, 33.906800, 32.432000, 32.166600, 30.434000, 29.664400, 774 | 28.489400, 27.631200, 26.380400, 26.292000, 25.549600, 25.023400, 775 | 24.820600, 22.614600, 22.418800, 22.117000, 20.676200, 20.657600, 776 | 19.786400, 19.509000, 18.533400, 17.920400, 17.772000, 16.292400, 777 | 16.865400, 15.183600, 15.745000, 15.131600, 15.038600, 14.013600, 778 | 13.634200, 12.619600, 12.186600, 12.428200, 11.332400, 10.479400, 779 | 11.503800, 10.129000, 9.528000, 10.320400, 9.463000, 9.792800, 780 | 9.123000, 8.741800, 9.219200, 7.510200, 7.606600, 7.018400, 781 | 7.222400, 7.401400, 6.761800, 7.143600, 5.650600, 5.637800, 782 | 5.766000, 6.751400, 5.577600, 3.732200, 5.804800, 5.630200, 783 | 4.933600, 3.479800, 4.338800, 3.989400, 3.819600, 3.313600, 784 | 3.230800, 3.458800, 3.081600, 3.407600, 3.006400, 2.387800, 785 | 2.619000, 1.998000, 3.348200, 2.950600, 0.991000, 2.114400, 786 | 2.203000, 2.822200, 2.732400, 2.782600, 3.766600, 2.264800, 787 | 2.312800, 2.408200, 2.753600, 3.337600, 2.715600, 1.747800, 788 | 1.429200, 2.393000, 2.227800, 2.343400, 0.872600, 3.884000, 789 | 1.806000, 1.917600, 1.167800, 1.503200, 2.525000, 0.226400, 790 | 2.315000, 0.930000, 1.252000, 2.149600, 0.040800, 2.544800, 791 | 1.329600, 0.197400, 2.526200, 3.332800, -1.343000, 0.422200, 792 | 0.917200, 1.129200, 1.460600, 1.457800, 2.872800, 3.333600, 793 | -1.340800, 1.576800, 0.363000, 1.407400, 0.656600, 0.801400, 794 | -0.454600, 1.519200}, 795 | 796 | // Precision 9 797 | {368.000000, 361.829400, 355.245200, 348.669800, 342.146400, 336.202400, 798 | 329.878200, 323.659800, 317.462000, 311.282600, 305.710200, 299.741600, 799 | 293.936600, 288.104600, 282.285000, 277.066800, 271.306000, 265.844800, 800 | 260.301000, 254.988600, 250.242200, 244.813800, 239.707400, 234.742800, 801 | 229.840200, 225.166400, 220.353400, 215.594000, 210.688600, 205.787600, 802 | 201.650000, 197.228000, 192.803600, 188.166600, 184.081800, 180.082400, 803 | 176.257400, 172.302000, 168.164400, 164.005600, 160.380200, 156.719200, 804 | 152.523400, 149.208400, 145.831000, 142.485000, 139.111200, 135.476400, 805 | 131.760000, 129.336800, 126.553800, 122.505800, 119.264600, 116.590200, 806 | 113.381800, 110.899800, 107.953200, 105.206200, 102.279800, 99.472800, 807 | 96.958200, 94.329200, 92.171000, 89.781000, 87.571600, 84.704800, 808 | 82.532200, 79.875000, 78.397200, 75.346400, 73.727400, 71.283400, 809 | 70.144400, 68.426400, 66.016600, 64.018000, 62.043800, 60.340000, 810 | 58.685600, 57.983600, 55.031200, 54.677000, 52.318800, 51.484600, 811 | 49.442400, 47.739000, 46.148800, 44.920200, 43.406000, 42.534200, 812 | 41.283400, 38.895400, 38.328600, 36.214600, 36.668400, 35.994600, 813 | 33.123000, 33.433800, 31.737800, 29.076000, 28.969200, 27.496400, 814 | 27.099800, 25.986400, 26.775400, 24.320800, 23.483800, 22.738800, 815 | 24.075800, 21.909800, 20.972800, 19.922800, 19.929200, 16.617000, 816 | 17.050000, 18.299600, 15.612800, 15.739200, 14.517400, 13.632200, 817 | 12.258400, 13.376600, 11.423000, 13.123200, 9.516400, 10.593800, 818 | 9.597200, 8.122200, 9.767400, 7.504400, 7.570000, 6.704400, 819 | 6.414200, 6.710200, 5.609400, 4.652200, 6.841000, 3.407200, 820 | 3.978600, 3.327600, 5.521600, 3.318600, 2.069400, 4.354000, 821 | 1.575000, 0.280800, 2.128800, -0.214800, -0.037800, -0.658200, 822 | 0.654800, -0.069800, 0.858400, -2.527000, -2.175200, -3.355400, 823 | -1.040200, -0.651000, -2.144400, -1.966600, -3.979400, -0.604400, 824 | -3.082600, -3.391600, -5.296400, -5.389200, -5.087600, -4.699000, 825 | -5.237200, -3.157800, -4.978800, -4.899000, -7.488800, -5.948000, 826 | -5.680600, -6.671800, -4.705000, -7.277800, -4.658000, -4.436200, 827 | -4.321400, -5.188600, -6.668800, -6.484000, -5.126000, -4.403200, 828 | -6.135000, -5.808200, -4.167200, -4.150400, -7.456000, -7.240800, 829 | -9.831800, -5.804200, -8.656200, -6.999400, -10.547400, -7.341400, 830 | -6.810000, -6.297200, -6.232000}, 831 | 832 | // Precision 10 833 | {737.125600, 724.423400, 711.106400, 698.473200, 685.463600, 673.064400, 834 | 660.488000, 647.965400, 636.083200, 623.786400, 612.199200, 600.217600, 835 | 588.522800, 577.171600, 565.775200, 554.899000, 543.612600, 532.649200, 836 | 521.947400, 511.521400, 501.106400, 490.636400, 480.246800, 470.458800, 837 | 460.383200, 451.058400, 440.860600, 431.386800, 422.506200, 413.186200, 838 | 404.463000, 395.339000, 386.193600, 378.129200, 369.185400, 361.290800, 839 | 353.332400, 344.851800, 337.520400, 329.485400, 321.931800, 314.552000, 840 | 306.465800, 299.425600, 292.849000, 286.152000, 278.895600, 271.879200, 841 | 265.118000, 258.620000, 252.513200, 245.932200, 239.772600, 233.608600, 842 | 227.533200, 222.591800, 216.429400, 210.766200, 205.410600, 199.733800, 843 | 194.901200, 188.448600, 183.155600, 178.633800, 173.731200, 169.626400, 844 | 163.952600, 159.874200, 155.832600, 151.196600, 147.559400, 143.070000, 845 | 140.037000, 134.180400, 131.071000, 127.488400, 124.084800, 120.294400, 846 | 117.333000, 112.962600, 110.290200, 107.081400, 103.033400, 99.483200, 847 | 96.390000, 93.720200, 90.171400, 87.235800, 85.934600, 82.891000, 848 | 80.026400, 78.383400, 75.154400, 73.868400, 70.989600, 69.436800, 849 | 64.870200, 65.040800, 61.673800, 59.520800, 57.015800, 54.230200, 850 | 53.096200, 50.498600, 52.258800, 47.391400, 45.624400, 42.837800, 851 | 43.007200, 40.651600, 40.245400, 35.213600, 36.454600, 33.785000, 852 | 33.229400, 32.468000, 30.867000, 28.650800, 28.910000, 27.598400, 853 | 26.162000, 24.556400, 23.232800, 21.948400, 21.590200, 21.334600, 854 | 17.703200, 20.611200, 19.554600, 15.737600, 17.072000, 16.951800, 855 | 15.326000, 13.181800, 14.692600, 13.086000, 13.275400, 10.869800, 856 | 11.248000, 7.376800, 4.723400, 7.979000, 8.750400, 7.681200, 857 | 9.720000, 7.739200, 5.622400, 7.445600, 6.660200, 5.905800, 858 | 4.002000, 4.517000, 4.682400, 3.862200, 5.136400, 5.985000, 859 | 2.477200, 2.620000, 1.628000, 4.650000, 0.225600, 0.831000, 860 | -0.359400, 1.276000, -2.925600, -0.030400, 2.370800, -2.003400, 861 | 0.804600, 0.302000, 1.124800, -2.688000, 0.032200, -1.181000, 862 | -3.940200, -1.479400, -0.188400, -2.107200, -2.041600, -3.128800, 863 | -4.161600, -0.612800, -3.487200, -8.179000, -5.377800, -4.013800, 864 | -5.582600, -5.737200, -7.668000, -5.695200, -1.124800, -5.585200, 865 | -8.045600, -4.648400, -11.646800, -7.975200, -5.783000, -7.674200, 866 | -10.632800, -9.817200}, 867 | 868 | // Precision 11 869 | {1476.000000, 1449.601400, 1423.580200, 1397.794200, 1372.304200, 870 | 1347.206200, 1321.840200, 1297.229200, 1272.946200, 1248.992600, 871 | 1225.302600, 1201.425200, 1178.057800, 1155.609200, 1132.626000, 872 | 1110.556800, 1088.527000, 1066.515400, 1045.187400, 1024.387800, 873 | 1003.370000, 982.197200, 962.572800, 942.101200, 922.966800, 874 | 903.292000, 884.077200, 864.857800, 846.656200, 828.041000, 875 | 809.714000, 792.311200, 775.180600, 757.985400, 740.656000, 876 | 724.346000, 707.515400, 691.837800, 675.744800, 659.672200, 877 | 645.572200, 630.146200, 614.412400, 600.872800, 585.898000, 878 | 572.408000, 558.492600, 544.493800, 531.677600, 517.282000, 879 | 505.770400, 493.101200, 480.738800, 467.687600, 456.187200, 880 | 445.504800, 433.021400, 420.806000, 411.409000, 400.414400, 881 | 389.429400, 379.228600, 369.651000, 360.615600, 350.337000, 882 | 342.083000, 332.153800, 322.509400, 315.010000, 305.668600, 883 | 298.167800, 287.811600, 280.997800, 271.920400, 265.328600, 884 | 257.570600, 249.601400, 242.544000, 235.597600, 229.583000, 885 | 220.943800, 214.672000, 208.278600, 201.862800, 195.183400, 886 | 191.505000, 186.181600, 178.518800, 172.229400, 167.890800, 887 | 161.019400, 158.052000, 151.458800, 148.159600, 143.434400, 888 | 138.523800, 133.130000, 127.637400, 124.816200, 118.789400, 889 | 117.398400, 114.607800, 109.085800, 105.103600, 103.625800, 890 | 98.601800, 95.761800, 93.582200, 88.590000, 86.999200, 891 | 82.880000, 80.454000, 74.698200, 74.364400, 73.291400, 892 | 65.571000, 66.923200, 65.191400, 62.588200, 61.570200, 893 | 55.703600, 56.176400, 52.759600, 53.030200, 49.061000, 894 | 48.469400, 44.933000, 46.047400, 44.716600, 41.941600, 895 | 39.920800, 35.632800, 35.527600, 33.193400, 33.237200, 896 | 33.386400, 33.922800, 30.237200, 29.137400, 25.227200, 897 | 24.294200, 19.833800, 18.900600, 23.090800, 21.854400, 898 | 19.517600, 15.414800, 16.931400, 18.673800, 12.987800, 899 | 14.368800, 12.044800, 15.522000, 12.530000, 14.594000, 900 | 14.313200, 9.455000, 12.944200, 3.911400, 13.137400, 901 | 5.447200, 9.827800, 7.872800, 3.677600, 5.469800, 902 | 5.551000, 5.659800, 3.894400, 3.127600, 5.651400, 903 | 6.306200, 3.908000, 1.870600, 5.170200, 2.466800, 904 | 0.770000, -3.723400, 1.164000, 8.053400, 0.135400, 905 | 2.159400, 0.767000, 1.059400, 3.155000, -0.287400, 906 | 2.372200, -2.866200, -1.632000, -2.229800, -0.155200, 907 | -1.460400, -0.262200, -2.344600, -2.807800, -3.221800, 908 | -5.601600, -8.422000, -9.437400, 0.161800, -10.475600, 909 | -10.082400}, 910 | 911 | // Precision 12 912 | {2953.000000, 2900.478200, 2848.356800, 2796.366600, 2745.324000, 913 | 2694.959800, 2644.648000, 2595.539000, 2546.147400, 2498.257600, 914 | 2450.837600, 2403.607600, 2357.451000, 2311.380000, 2266.410400, 915 | 2221.563800, 2176.967600, 2134.193000, 2090.838000, 2048.854800, 916 | 2007.018000, 1966.174200, 1925.448200, 1885.129400, 1846.477600, 917 | 1807.404400, 1768.872400, 1731.373200, 1693.430400, 1657.532600, 918 | 1621.949000, 1586.553200, 1551.725600, 1517.618200, 1483.518600, 919 | 1450.452800, 1417.865000, 1385.716400, 1352.682800, 1322.670800, 920 | 1291.831200, 1260.903600, 1231.476000, 1201.865200, 1173.671800, 921 | 1145.757000, 1119.207200, 1092.282800, 1065.043400, 1038.626400, 922 | 1014.319200, 988.574600, 965.081600, 940.117600, 917.979600, 923 | 894.557600, 871.185800, 849.914400, 827.114200, 805.081800, 924 | 783.966400, 763.909600, 742.081600, 724.396200, 706.345400, 925 | 688.018000, 667.421400, 650.310600, 633.068600, 613.809400, 926 | 597.818000, 581.424800, 563.834000, 547.363000, 531.506600, 927 | 520.455400, 505.583200, 488.366000, 476.480800, 459.768200, 928 | 450.052200, 434.328800, 423.952800, 408.727000, 399.079400, 929 | 387.252200, 373.988000, 360.852000, 351.639400, 339.642000, 930 | 330.902400, 322.661600, 311.662200, 301.325400, 291.748400, 931 | 279.939200, 276.750800, 263.215200, 254.811400, 245.549400, 932 | 242.306400, 234.873400, 223.787200, 217.715600, 212.019600, 933 | 200.793000, 195.974800, 189.070200, 182.449200, 177.277200, 934 | 170.233600, 164.741000, 158.613600, 155.311000, 147.596400, 935 | 142.837000, 137.372400, 132.016200, 130.042400, 121.980400, 936 | 120.451800, 114.896800, 111.586000, 105.933200, 101.705000, 937 | 98.514200, 95.048800, 89.788000, 91.475000, 83.776400, 938 | 80.969800, 72.857400, 73.161600, 67.583800, 62.626400, 939 | 63.263800, 66.097800, 52.084400, 58.995600, 47.091200, 940 | 46.495600, 48.438400, 47.108200, 43.239200, 37.276000, 941 | 40.028400, 35.186400, 35.859600, 32.099800, 28.027000, 942 | 23.669400, 33.826600, 26.373600, 27.200800, 21.324600, 943 | 26.411600, 23.452200, 19.501400, 19.851400, 10.749200, 944 | 18.642400, 13.126600, 18.243600, 6.718600, 3.394600, 945 | 6.337600, 7.767200, 0.814000, 3.828200, 0.826200, 946 | 8.074400, -1.590800, 5.017800, 0.455400, -0.242000, 947 | 0.174800, -9.076400, -4.201600, -3.775200, -4.751800, 948 | -5.372400, -8.906800, -6.102400, -5.741200, -9.953400, 949 | -3.863400, -13.730400, -16.271000, -7.513600, -3.306800, 950 | -13.134000, -10.055200, -6.720200, -8.596600, -10.930800, 951 | -1.877600, -4.822600, -13.778800, -21.647000, -10.673600, 952 | -15.780000}, 953 | 954 | // Precision 13 955 | {5907.505200, 5802.267200, 5697.347000, 5593.579400, 5491.262200, 956 | 5390.551400, 5290.337600, 5191.695200, 5093.598800, 4997.355200, 957 | 4902.597200, 4808.308200, 4715.564600, 4624.109000, 4533.821600, 958 | 4444.434400, 4356.380200, 4269.296200, 4183.378400, 4098.292000, 959 | 4014.790000, 3932.457400, 3850.603600, 3771.271200, 3691.770800, 960 | 3615.099000, 3538.185800, 3463.474600, 3388.849600, 3315.679400, 961 | 3244.544800, 3173.751600, 3103.310600, 3033.609400, 2966.564200, 962 | 2900.794000, 2833.725600, 2769.810000, 2707.319600, 2644.077800, 963 | 2583.991600, 2523.466200, 2464.124000, 2406.073000, 2347.036200, 964 | 2292.100600, 2238.171600, 2182.751400, 2128.488400, 2077.131400, 965 | 2025.037000, 1975.375600, 1928.933000, 1879.311000, 1831.000600, 966 | 1783.214400, 1738.309600, 1694.514400, 1649.024000, 1606.847000, 967 | 1564.752800, 1525.316800, 1482.537200, 1443.966800, 1406.507400, 968 | 1365.867000, 1329.218600, 1295.418600, 1257.971600, 1225.339000, 969 | 1193.297200, 1156.357800, 1125.868600, 1091.187000, 1061.409400, 970 | 1029.418800, 1000.912600, 972.327200, 944.004200, 915.759200, 971 | 889.965000, 862.834200, 840.425400, 812.598400, 785.924200, 972 | 763.051000, 741.793800, 721.466000, 699.040800, 677.997200, 973 | 649.867000, 634.911800, 609.869400, 591.981600, 570.292200, 974 | 557.129200, 538.385800, 521.872600, 502.951400, 495.776400, 975 | 475.171400, 459.751000, 439.995200, 426.709000, 413.701600, 976 | 402.386800, 387.262600, 372.052400, 357.051000, 342.509800, 977 | 334.849200, 322.529400, 311.613800, 295.848000, 289.273000, 978 | 274.093000, 263.329600, 251.389600, 245.739200, 231.961400, 979 | 229.795200, 217.155200, 208.958800, 199.016600, 190.839200, 980 | 180.697600, 176.272800, 166.977000, 162.525200, 151.196400, 981 | 149.387000, 133.981200, 130.058600, 130.164000, 122.053400, 982 | 110.742800, 108.127600, 106.232400, 100.381600, 98.766800, 983 | 86.644000, 79.976800, 82.472200, 68.702600, 70.118600, 984 | 71.994800, 58.998600, 59.049200, 56.981800, 47.533800, 985 | 42.992800, 51.159200, 37.274000, 42.722000, 31.373400, 986 | 26.809000, 25.893400, 26.528600, 29.544200, 19.350400, 987 | 26.076000, 17.952800, 14.842000, 10.468400, 8.659000, 988 | 9.867200, 4.341400, -0.907800, -3.320800, -0.936200, 989 | -11.991600, -8.870000, -6.331000, -11.336600, -15.920800, 990 | -9.346600, -15.503400, -19.209800, -15.357800, -28.223600, 991 | -30.689800, -19.327200, -25.608400, -24.409600, -13.638600, 992 | -33.447400, -32.695000, -28.906400, -31.748400, -32.293600, 993 | -35.833000, -47.620600, -39.085600, -33.143400, -46.137200, 994 | -37.589200, -46.816400, -47.314200, -60.291400, -37.757600}, 995 | 996 | // Precision 14 997 | {11816.475000, 11605.004600, 11395.379200, 11188.750400, 10984.181400, 998 | 10782.008600, 10582.007200, 10384.503000, 10189.178000, 9996.273800, 999 | 9806.034400, 9617.979800, 9431.394000, 9248.778400, 9067.689400, 1000 | 8889.682400, 8712.913400, 8538.862400, 8368.494400, 8197.795600, 1001 | 8031.891600, 7866.631600, 7703.733000, 7544.572600, 7386.204000, 1002 | 7230.666000, 7077.851600, 6926.788600, 6778.690200, 6631.963200, 1003 | 6487.304000, 6346.748600, 6206.440800, 6070.202000, 5935.257600, 1004 | 5799.924000, 5671.032400, 5541.978800, 5414.611200, 5290.027400, 1005 | 5166.723000, 5047.690600, 4929.162000, 4815.140600, 4699.127000, 1006 | 4588.560600, 4477.739400, 4369.401400, 4264.272800, 4155.922400, 1007 | 4055.581000, 3955.505000, 3856.961800, 3761.382800, 3666.970200, 1008 | 3575.776400, 3482.413200, 3395.018600, 3305.885200, 3221.415000, 1009 | 3138.602400, 3056.296000, 2970.449400, 2896.152600, 2816.800800, 1010 | 2740.215600, 2670.497000, 2594.145800, 2527.111000, 2460.816800, 1011 | 2387.511400, 2322.949800, 2260.675200, 2194.268600, 2133.779200, 1012 | 2074.767000, 2015.204000, 1959.422600, 1898.650200, 1850.006000, 1013 | 1792.849000, 1741.483800, 1687.977800, 1638.132200, 1589.326600, 1014 | 1543.139400, 1496.826600, 1447.851600, 1402.735400, 1361.960600, 1015 | 1327.069200, 1285.410600, 1241.811200, 1201.672600, 1161.973000, 1016 | 1130.261000, 1094.203600, 1048.203600, 1020.643600, 990.901400, 1017 | 961.199800, 924.769800, 899.526400, 872.346400, 834.375000, 1018 | 810.432000, 780.659800, 756.013800, 733.479400, 707.924000, 1019 | 673.858000, 652.222400, 636.572400, 615.738600, 586.696400, 1020 | 564.147200, 541.679600, 523.943600, 505.714600, 475.729600, 1021 | 461.779600, 449.750800, 439.020800, 412.788600, 400.245600, 1022 | 383.188200, 362.079600, 357.533800, 334.319000, 327.553400, 1023 | 308.559400, 291.270200, 279.352000, 271.791400, 252.577000, 1024 | 247.482400, 236.174800, 218.774600, 220.155200, 208.794400, 1025 | 201.223600, 182.995600, 185.526800, 164.547400, 176.596200, 1026 | 150.689600, 157.800400, 138.378800, 134.021200, 117.614400, 1027 | 108.194000, 97.069600, 89.604200, 95.603000, 84.781000, 1028 | 72.635000, 77.348200, 59.490800, 55.587600, 50.734600, 1029 | 61.391600, 50.915000, 39.038400, 58.939600, 29.633600, 1030 | 28.203200, 26.007800, 17.038800, 9.220000, 13.838800, 1031 | 8.072400, 14.155000, 15.357000, 3.426600, 6.248200, 1032 | -2.969400, -8.799400, -5.978600, -14.404800, -3.414400, 1033 | -13.014800, -11.697800, -25.787800, -22.318600, -24.409600, 1034 | -31.975600, -18.972200, -22.867800, -30.897200, -32.371600, 1035 | -22.390800, -43.672000, -35.903800, -39.749200, -54.164200, 1036 | -45.275000, -42.299000, -44.109000, -64.356400, -49.955200, 1037 | -42.611600}, 1038 | 1039 | // Precision 15 1040 | {23634.003600, 23210.803400, 22792.474400, 22379.152400, 21969.792800, 1041 | 21565.326000, 21165.353200, 20770.280600, 20379.989200, 19994.709800, 1042 | 19613.318000, 19236.799000, 18865.438200, 18498.824400, 18136.513800, 1043 | 17778.866800, 17426.234400, 17079.320000, 16734.778000, 16397.241800, 1044 | 16063.332400, 15734.023200, 15409.731000, 15088.728000, 14772.989600, 1045 | 14464.140200, 14157.558800, 13855.595800, 13559.329600, 13264.909600, 1046 | 12978.326000, 12692.082600, 12413.881600, 12137.319200, 11870.232600, 1047 | 11602.555400, 11340.314200, 11079.613000, 10829.590800, 10583.546600, 1048 | 10334.034400, 10095.507200, 9859.694000, 9625.282200, 9395.786200, 1049 | 9174.058600, 8957.316400, 8738.064000, 8524.155000, 8313.739600, 1050 | 8116.916800, 7913.542000, 7718.477800, 7521.650000, 7335.559600, 1051 | 7154.290600, 6968.739600, 6786.399600, 6613.236000, 6437.406000, 1052 | 6270.659800, 6107.795800, 5945.717400, 5787.678400, 5635.578400, 1053 | 5482.308000, 5337.978400, 5190.086400, 5045.915800, 4919.138600, 1054 | 4771.817000, 4645.774200, 4518.477400, 4385.545400, 4262.662200, 1055 | 4142.746800, 4015.531800, 3897.927600, 3790.776400, 3685.138000, 1056 | 3573.627400, 3467.970600, 3368.610800, 3271.520200, 3170.384800, 1057 | 3076.465600, 2982.384000, 2888.466400, 2806.486800, 2711.956400, 1058 | 2634.143400, 2551.320400, 2469.766200, 2396.611400, 2318.990200, 1059 | 2243.865800, 2171.924600, 2105.013600, 2028.853600, 1960.995200, 1060 | 1901.409600, 1841.860800, 1777.547000, 1714.580200, 1654.650600, 1061 | 1596.311000, 1546.201600, 1492.329600, 1433.897400, 1383.846000, 1062 | 1339.415200, 1293.551800, 1245.868600, 1193.506600, 1162.279600, 1063 | 1107.194400, 1069.180600, 1035.091800, 999.679000, 957.680000, 1064 | 925.300200, 888.099400, 848.638600, 818.156400, 796.748400, 1065 | 752.139200, 725.271200, 692.216000, 671.633600, 647.939800, 1066 | 621.670600, 575.398800, 561.226600, 532.238000, 521.787600, 1067 | 483.095800, 467.049600, 465.286400, 415.548600, 401.047400, 1068 | 380.608000, 377.362600, 347.258800, 338.371600, 310.097000, 1069 | 301.409200, 276.280800, 265.586800, 258.994400, 223.916000, 1070 | 215.925400, 213.503800, 191.045400, 166.718200, 166.259000, 1071 | 162.941200, 148.829400, 141.646000, 123.535400, 122.329800, 1072 | 89.473400, 80.196200, 77.545800, 59.105600, 83.351000, 1073 | 52.290600, 36.398000, 40.655800, 42.000400, 19.663000, 1074 | 19.715400, -8.385400, -0.692800, 0.854800, 3.232200, 1075 | -3.890400, -5.258800, -24.905200, -22.683800, -26.428600, 1076 | -34.997000, -37.021600, -43.430400, -58.239000, -68.803400, 1077 | -56.924600, -57.858400, -77.309800, -73.279400, -81.073800, 1078 | -87.453000, -65.025400, -57.296400, -96.274600, -103.250000, 1079 | -96.081600, -91.554200, -102.465200, -107.688600, -101.458000, 1080 | -109.715800}, 1081 | 1082 | // Precision 16 1083 | {47270.000000, 46423.358400, 45585.707400, 44757.152000, 43938.841600, 1084 | 43130.951400, 42330.030000, 41540.407000, 40759.634800, 39988.206000, 1085 | 39226.514400, 38473.209600, 37729.795000, 36997.268000, 36272.644800, 1086 | 35558.665000, 34853.024800, 34157.447200, 33470.520400, 32793.574200, 1087 | 32127.019400, 31469.418200, 30817.613600, 30178.696800, 29546.890800, 1088 | 28922.854400, 28312.271000, 27707.092400, 27114.032600, 26526.692000, 1089 | 25948.633600, 25383.782600, 24823.599800, 24272.297400, 23732.257200, 1090 | 23201.497600, 22674.279600, 22163.633600, 21656.515000, 21161.736200, 1091 | 20669.936800, 20189.442400, 19717.335800, 19256.374400, 18795.963800, 1092 | 18352.197000, 17908.573800, 17474.391000, 17052.918000, 16637.223600, 1093 | 16228.460200, 15823.347400, 15428.697400, 15043.028400, 14667.627800, 1094 | 14297.458800, 13935.288200, 13578.540200, 13234.603200, 12882.157800, 1095 | 12548.072800, 12219.231000, 11898.007200, 11587.262600, 11279.907200, 1096 | 10973.504800, 10678.518600, 10392.487600, 10105.255600, 9825.766000, 1097 | 9562.544400, 9294.222200, 9038.235200, 8784.848000, 8533.264400, 1098 | 8301.777600, 8058.308600, 7822.945800, 7599.113200, 7366.907800, 1099 | 7161.217000, 6957.530800, 6736.212000, 6548.212200, 6343.068400, 1100 | 6156.287200, 5975.154200, 5791.757200, 5621.320200, 5451.660000, 1101 | 5287.610400, 5118.094800, 4957.288000, 4798.424600, 4662.175600, 1102 | 4512.059000, 4364.685400, 4220.777200, 4082.672600, 3957.195200, 1103 | 3842.157800, 3699.332800, 3583.011800, 3473.896400, 3338.666400, 1104 | 3233.555600, 3117.799000, 3008.111000, 2909.691400, 2814.865000, 1105 | 2719.461200, 2624.742000, 2532.469800, 2444.788600, 2370.186800, 1106 | 2272.452600, 2196.192600, 2117.904200, 2023.297200, 1969.768200, 1107 | 1885.589800, 1833.282400, 1733.912000, 1682.549200, 1604.579800, 1108 | 1556.112400, 1491.306400, 1421.719600, 1371.229000, 1322.132400, 1109 | 1264.789200, 1196.239200, 1143.847400, 1088.672400, 1073.603800, 1110 | 1023.116600, 959.036400, 927.433200, 906.792800, 853.433600, 1111 | 841.873800, 791.105400, 756.900000, 704.343200, 672.495600, 1112 | 622.790400, 611.254800, 567.283200, 519.406600, 519.188400, 1113 | 495.312800, 451.350800, 443.973400, 431.882200, 392.027000, 1114 | 380.924200, 345.129000, 298.901400, 287.772000, 272.625000, 1115 | 247.253000, 222.490600, 223.590000, 196.407600, 176.426000, 1116 | 134.725200, 132.480400, 110.445600, 86.794000, 56.703800, 1117 | 64.915400, 38.372600, 37.160600, 46.171000, 49.171600, 1118 | 15.336200, 6.716400, -34.818600, -39.447600, 12.683000, 1119 | -12.333200, -50.656600, -59.953800, -65.105400, -70.757600, 1120 | -106.325200, -126.852200, -110.227600, -132.886000, -113.897200, 1121 | -142.713800, -151.145400, -150.799200, -177.756200, -156.036400, 1122 | -182.735200, -177.259400, -198.663600, -174.577600, -193.845800}, 1123 | 1124 | // Precision 17 1125 | {94541.000000, 92848.811000, 91174.019000, 89517.558000, 87879.970500, 1126 | 86262.756500, 84663.512500, 83083.743500, 81521.786500, 79977.272000, 1127 | 78455.946500, 76950.219000, 75465.432000, 73994.152000, 72546.710000, 1128 | 71115.234500, 69705.676500, 68314.937000, 66944.270500, 65591.255000, 1129 | 64252.948500, 62938.016000, 61636.822500, 60355.592000, 59092.789000, 1130 | 57850.568000, 56624.518000, 55417.343000, 54231.141500, 53067.387000, 1131 | 51903.526000, 50774.649000, 49657.641500, 48561.050000, 47475.757500, 1132 | 46410.159000, 45364.852000, 44327.053000, 43318.400500, 42325.616500, 1133 | 41348.459500, 40383.626500, 39436.770000, 38509.502000, 37594.035000, 1134 | 36695.939000, 35818.689500, 34955.691000, 34115.809500, 33293.949000, 1135 | 32465.077500, 31657.671500, 30877.258500, 30093.780000, 29351.369500, 1136 | 28594.136500, 27872.115000, 27168.746500, 26477.076000, 25774.541000, 1137 | 25106.537500, 24452.513500, 23815.512500, 23174.065500, 22555.268500, 1138 | 21960.206500, 21376.355500, 20785.192500, 20211.517000, 19657.072500, 1139 | 19141.686500, 18579.737000, 18081.395500, 17578.995000, 17073.440000, 1140 | 16608.335000, 16119.911000, 15651.266000, 15194.583000, 14749.049500, 1141 | 14343.483500, 13925.639000, 13504.509000, 13099.388500, 12691.285500, 1142 | 12328.018000, 11969.034500, 11596.514500, 11245.635500, 10917.657500, 1143 | 10580.978500, 10277.860500, 9926.581000, 9605.538000, 9300.429500, 1144 | 8989.978500, 8728.732500, 8448.323500, 8175.310500, 7898.987000, 1145 | 7629.791000, 7413.762000, 7149.923000, 6921.126500, 6677.154500, 1146 | 6443.280000, 6278.234500, 6014.200500, 5791.203000, 5605.784500, 1147 | 5438.488000, 5234.225500, 5059.682500, 4887.433500, 4682.935000, 1148 | 4496.311000, 4322.522500, 4191.425000, 4021.242000, 3900.648000, 1149 | 3762.842500, 3609.980500, 3502.296000, 3363.842500, 3206.548500, 1150 | 3079.700000, 2971.423000, 2867.803500, 2727.081000, 2630.749000, 1151 | 2496.616500, 2440.902000, 2356.191500, 2235.582000, 2120.541500, 1152 | 2012.254500, 1933.356000, 1820.931000, 1761.548000, 1663.093500, 1153 | 1578.846000, 1509.481500, 1427.334500, 1379.561500, 1306.681000, 1154 | 1212.634500, 1084.173000, 1124.164500, 1060.699500, 1007.488500, 1155 | 941.194500, 879.880500, 836.007500, 782.802000, 748.385500, 1156 | 647.991500, 626.730500, 570.776000, 484.000500, 513.985500, 1157 | 418.985500, 386.997000, 370.026500, 355.497000, 356.731500, 1158 | 255.922000, 259.094000, 205.434500, 165.374500, 197.347500, 1159 | 95.718500, 67.616500, 54.697000, 31.739500, -15.878500, 1160 | 8.425000, -26.375500, -118.425500, -66.663000, -42.974500, 1161 | -107.365000, -189.839000, -162.611500, -164.965000, -189.080000, 1162 | -223.931500, -235.330000, -269.639500, -249.088000, -206.475500, 1163 | -283.044500, -290.667000, -304.561500, -336.784500, -380.386500, 1164 | -283.280500, -364.533000, -389.059500, -364.454000, -415.748000, 1165 | -417.155000}, 1166 | 1167 | // Precision 18 1168 | {189083.000000, 185696.913000, 182348.774000, 179035.946000, 175762.762000, 1169 | 172526.444000, 169329.754000, 166166.099000, 163043.269000, 159958.910000, 1170 | 156907.912000, 153906.845000, 150924.199000, 147996.568000, 145093.457000, 1171 | 142239.233000, 139421.475000, 136632.270000, 133889.588000, 131174.200000, 1172 | 128511.619000, 125868.621000, 123265.385000, 120721.061000, 118181.769000, 1173 | 115709.456000, 113252.446000, 110840.198000, 108465.099000, 106126.164000, 1174 | 103823.469000, 101556.618000, 99308.004000, 97124.508000, 94937.803000, 1175 | 92833.731000, 90745.061000, 88677.627000, 86617.470000, 84650.442000, 1176 | 82697.833000, 80769.132000, 78879.629000, 77014.432000, 75215.626000, 1177 | 73384.587000, 71652.482000, 69895.930000, 68209.301000, 66553.669000, 1178 | 64921.981000, 63310.323000, 61742.115000, 60205.018000, 58698.658000, 1179 | 57190.657000, 55760.865000, 54331.169000, 52908.167000, 51550.273000, 1180 | 50225.254000, 48922.421000, 47614.533000, 46362.049000, 45098.569000, 1181 | 43926.083000, 42736.030000, 41593.473000, 40425.260000, 39316.237000, 1182 | 38243.651000, 37170.617000, 36114.609000, 35084.190000, 34117.233000, 1183 | 33206.509000, 32231.505000, 31318.728000, 30403.404000, 29540.055000, 1184 | 28679.236000, 27825.862000, 26965.216000, 26179.148000, 25462.080000, 1185 | 24645.952000, 23922.523000, 23198.144000, 22529.128000, 21762.418000, 1186 | 21134.779000, 20459.117000, 19840.818000, 19187.040000, 18636.369000, 1187 | 17982.831000, 17439.739000, 16874.547000, 16358.217000, 15835.684000, 1188 | 15352.914000, 14823.681000, 14329.313000, 13816.897000, 13342.874000, 1189 | 12880.882000, 12491.648000, 12021.254000, 11625.392000, 11293.761000, 1190 | 10813.697000, 10456.209000, 10099.074000, 9755.390000, 9393.185000, 1191 | 9047.579000, 8657.985000, 8395.859000, 8033.000000, 7736.959000, 1192 | 7430.597000, 7258.477000, 6924.582000, 6691.294000, 6357.925000, 1193 | 6202.057000, 5921.197000, 5628.284000, 5404.968000, 5226.711000, 1194 | 4990.756000, 4799.774000, 4622.931000, 4472.478000, 4171.787000, 1195 | 3957.463000, 3868.952000, 3691.143000, 3474.631000, 3341.672000, 1196 | 3109.140000, 3071.974000, 2796.404000, 2756.178000, 2611.470000, 1197 | 2471.930000, 2382.264000, 2209.224000, 2142.284000, 2013.961000, 1198 | 1911.190000, 1818.271000, 1668.479000, 1519.658000, 1469.676000, 1199 | 1367.138000, 1248.529000, 1181.236000, 1022.719000, 1088.207000, 1200 | 959.036000, 876.096000, 791.184000, 703.337000, 731.950000, 1201 | 586.864000, 526.025000, 323.005000, 320.448000, 340.673000, 1202 | 309.639000, 216.602000, 102.923000, 19.240000, -0.114000, 1203 | -32.624000, -89.318000, -153.498000, -64.297000, -143.696000, 1204 | -259.498000, -253.018000, -213.948000, -397.590000, -434.006000, 1205 | -403.475000, -297.958000, -404.317000, -528.899000, -506.621000, 1206 | -513.205000, -479.351000, -596.140000, -527.017000, -664.681000, 1207 | -680.306000, -704.050000, -850.486000, -757.432000, -713.309000}}; 1208 | --------------------------------------------------------------------------------