From 88c26af10f905713c6d07c495ad7efb78b112e1f Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Mon, 19 Oct 2020 15:04:05 -0400 Subject: [PATCH 1/2] C++11. Duh. --- CMakeLists.txt | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 76ecaa4f..6be510f7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 3.9) project(fast_float VERSION 0.1.0 LANGUAGES CXX) -set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) diff --git a/README.md b/README.md index d36de849..d60cc07a 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ functions for `float` and `double` types. These functions convert ASCII strings decimal values (e.g., `1.3e10`) into binary types. We provide exact rounding (including round to even). In our experience, these `fast_float` functions are faster than any other comparable number-parsing functions. They provide a performance similar to that of the [fast_double_parser](https://github.com/lemire/fast_double_parser) but using an novel algorithm reworked from the ground up, and while offering an API more in line with the expectations of C++ programmers. -Specifically, `fast_float` provides the following two functions with a C++17-like syntax: +Specifically, `fast_float` provides the following two functions with a C++17-like syntax (the library itself only requires C++11): ```C++ from_chars_result from_chars(const char* first, const char* last, float& value, ...); From 8a43fdb6a18e525286e37fac45950f3fb338f5c2 Mon Sep 17 00:00:00 2001 From: Daniel Lemire Date: Mon, 19 Oct 2020 15:11:44 -0400 Subject: [PATCH 2/2] Minor fix (credit: @pitrou) --- include/fast_float/float_common.h | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/include/fast_float/float_common.h b/include/fast_float/float_common.h index 4b22a9ba..bc8a4f1a 100644 --- a/include/fast_float/float_common.h +++ b/include/fast_float/float_common.h @@ -133,6 +133,12 @@ struct decimal { uint8_t digits[max_digits]; }; +constexpr static double powers_of_ten_double[] = { + 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, + 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19, 1e20, 1e21, 1e22}; +constexpr static float powers_of_ten_float[] = { + 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10}; + template struct binary_format { static constexpr int mantissa_explicit_bits(); @@ -145,11 +151,6 @@ struct binary_format { static constexpr int min_exponent_round_to_even(); static constexpr uint64_t max_mantissa_fast_path(); static constexpr T exact_power_of_ten(int64_t power); - constexpr static double powers_of_ten_double[] = { - 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, - 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19, 1e20, 1e21, 1e22}; - constexpr static float powers_of_ten_float[] = { - 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10}; }; template <>