nlohmann::detail::dtoa_impl
nlohmann::detail::dtoa_impl::boundaries
nlohmann::detail::dtoa_impl::cached_power
nlohmann::detail::dtoa_impl::diyfp
constexpr int constexpr int nlohmann::detail::dtoa_impl::kAlpha kAlpha = -60
constexpr int constexpr int nlohmann::detail::dtoa_impl::kGamma kGamma = -32
typename Target
typename Source
Target Target nlohmann::detail::dtoa_impl::reinterpret_bits (const Source source) reinterpret_bits const Source source
typename FloatType
boundaries boundaries nlohmann::detail::dtoa_impl::compute_boundaries (FloatType value) compute_boundaries FloatType value

Compute the (normalized) diyfp representing the input number 'value' and its boundaries.

value must be finite and positive

nlohmann::detail::dtoa_impl::diyfp::e
nlohmann::detail::dtoa_impl::diyfp::f
JSON_ASSERT
nlohmann::detail::value
grisu2
cached_power cached_power nlohmann::detail::dtoa_impl::get_cached_power_for_binary_exponent (int e) get_cached_power_for_binary_exponent int e

For a normalized diyfp w = f * 2^e, this function returns a (normalized) cached power-of-ten c = f_c * 2^e_c, such that the exponent of the product w * c satisfies (Definition 3.2 from [1]) alpha <= e_c + e + q <= gamma.

JSON_ASSERT
grisu2
int int nlohmann::detail::dtoa_impl::find_largest_pow10 (const std::uint32_t n, std::uint32_t &pow10) find_largest_pow10 const std::uint32_t n std::uint32_t & pow10

For n != 0, returns k, such that pow10 := 10^(k-1) <= n < 10^k. For n == 0, returns 1 and sets pow10 := 1.

grisu2_digit_gen
void void nlohmann::detail::dtoa_impl::grisu2_round (char *buf, int len, std::uint64_t dist, std::uint64_t delta, std::uint64_t rest, std::uint64_t ten_k) grisu2_round char * buf int len std::uint64_t dist std::uint64_t delta std::uint64_t rest std::uint64_t ten_k JSON_ASSERT grisu2_digit_gen
void void nlohmann::detail::dtoa_impl::grisu2_digit_gen (char *buffer, int &length, int &decimal_exponent, diyfp M_minus, diyfp w, diyfp M_plus) grisu2_digit_gen char * buffer int & length int & decimal_exponent diyfp M_minus diyfp w diyfp M_plus

Generates V = buffer * 10^decimal_exponent, such that M- <= V <= M+. M- and M+ must be normalized and share the same exponent -60 <= e <= -32.

nlohmann::detail::dtoa_impl::diyfp::e
nlohmann::detail::dtoa_impl::diyfp::f
find_largest_pow10
grisu2_round
JSON_ASSERT
JSON_HEDLEY_NON_NULL
grisu2
void void nlohmann::detail::dtoa_impl::grisu2 (char *buf, int &len, int &decimal_exponent, diyfp m_minus, diyfp v, diyfp m_plus) grisu2 char * buf int & len int & decimal_exponent diyfp m_minus diyfp v diyfp m_plus

v = buf * 10^decimal_exponent len is the length of the buffer (number of decimal digits) The buffer must be large enough, i.e. >= max_digits10.

nlohmann::detail::dtoa_impl::diyfp::e
nlohmann::detail::dtoa_impl::cached_power::e
nlohmann::detail::dtoa_impl::diyfp::f
nlohmann::detail::dtoa_impl::cached_power::f
get_cached_power_for_binary_exponent
grisu2_digit_gen
JSON_ASSERT
JSON_HEDLEY_NON_NULL
nlohmann::detail::dtoa_impl::cached_power::k
nlohmann::detail::to_chars
typename FloatType
void void nlohmann::detail::dtoa_impl::grisu2 (char *buf, int &len, int &decimal_exponent, FloatType value) grisu2 char * buf int & len int & decimal_exponent FloatType value

v = buf * 10^decimal_exponent len is the length of the buffer (number of decimal digits) The buffer must be large enough, i.e. >= max_digits10.

compute_boundaries
JSON_ASSERT
JSON_HEDLEY_NON_NULL
JSON_HEDLEY_RETURNS_NON_NULL
nlohmann::detail::dtoa_impl::boundaries::minus
nlohmann::detail::dtoa_impl::boundaries::plus
nlohmann::detail::dtoa_impl::boundaries::w
JSON_HEDLEY_RETURNS_NON_NULL char * JSON_HEDLEY_RETURNS_NON_NULL char* nlohmann::detail::dtoa_impl::append_exponent (char *buf, int e) append_exponent char * buf int e

appends a decimal representation of e to buf

a pointer to the element following the exponent.

-1000 < e < 1000

JSON_ASSERT
JSON_HEDLEY_NON_NULL
JSON_HEDLEY_RETURNS_NON_NULL
format_buffer
JSON_HEDLEY_RETURNS_NON_NULL char * JSON_HEDLEY_RETURNS_NON_NULL char* nlohmann::detail::dtoa_impl::format_buffer (char *buf, int len, int decimal_exponent, int min_exp, int max_exp) format_buffer char * buf int len int decimal_exponent int min_exp int max_exp

prettify v = buf * 10^decimal_exponent

If v is in the range [10^min_exp, 10^max_exp) it will be printed in fixed-point notation. Otherwise it will be printed in exponential notation.

min_exp < 0

max_exp > 0

append_exponent
JSON_ASSERT
JSON_HEDLEY_NON_NULL
JSON_HEDLEY_RETURNS_NON_NULL
nlohmann::detail::to_chars

implements the Grisu2 algorithm for binary to decimal floating-point conversion.

This implementation is a slightly modified version of the reference implementation which may be obtained from http://florian.loitsch.com/publications (bench.tar.gz).

The code is distributed under the MIT license, Copyright (c) 2009 Florian Loitsch.

For a detailed description of the algorithm see:

[1] Loitsch, "Printing Floating-Point Numbers Quickly and Accurately with Integers", Proceedings of the ACM SIGPLAN 2010 Conference on Programming Language Design and Implementation, PLDI 2010 [2] Burger, Dybvig, "Printing Floating-Point Numbers Quickly and Accurately", Proceedings of the ACM SIGPLAN 1996 Conference on Programming Language Design and Implementation, PLDI 1996