EIC Software
Reference for
EIC
simulation and reconstruction software on GitHub
|
implements the Grisu2 algorithm for binary to decimal floating-point conversion. More...
Classes | |
struct | diyfp |
struct | boundaries |
struct | cached_power |
Functions | |
template<typename Target , typename Source > | |
Target | reinterpret_bits (const Source source) |
template<typename FloatType > | |
boundaries | compute_boundaries (FloatType value) |
cached_power | get_cached_power_for_binary_exponent (int e) |
int | find_largest_pow10 (const std::uint32_t n, std::uint32_t &pow10) |
void | grisu2_round (char *buf, int len, std::uint64_t dist, std::uint64_t delta, std::uint64_t rest, std::uint64_t ten_k) |
void | grisu2_digit_gen (char *buffer, int &length, int &decimal_exponent, diyfp M_minus, diyfp w, diyfp M_plus) |
void | grisu2 (char *buf, int &len, int &decimal_exponent, diyfp m_minus, diyfp v, diyfp m_plus) |
template<typename FloatType > | |
void | grisu2 (char *buf, int &len, int &decimal_exponent, FloatType value) |
JSON_HEDLEY_RETURNS_NON_NULL char * | append_exponent (char *buf, int e) |
appends a decimal representation of e to buf | |
JSON_HEDLEY_RETURNS_NON_NULL char * | format_buffer (char *buf, int len, int decimal_exponent, int min_exp, int max_exp) |
prettify v = buf * 10^decimal_exponent | |
Variables | |
constexpr int | kAlpha = -60 |
constexpr int | kGamma = -32 |
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
|
inline |
appends a decimal representation of e to buf
Definition at line 13901 of file json.hpp.
View newest version in sPHENIX GitHub at line 13901 of file json.hpp
References Acts::UnitConstants::e, and k.
Referenced by format_buffer().
boundaries nlohmann::detail::dtoa_impl::compute_boundaries | ( | FloatType | value | ) |
Compute the (normalized) diyfp representing the input number 'value' and its boundaries.
Definition at line 13160 of file json.hpp.
View newest version in sPHENIX GitHub at line 13160 of file json.hpp
References bits(), nlohmann::detail::dtoa_impl::diyfp::e, F, nlohmann::detail::dtoa_impl::diyfp::f, v, and value.
Referenced by grisu2().
|
inline |
For n != 0, returns k, such that pow10 := 10^(k-1) <= n < 10^k. For n == 0, returns 1 and sets pow10 := 1.
Definition at line 13463 of file json.hpp.
View newest version in sPHENIX GitHub at line 13463 of file json.hpp
Referenced by grisu2_digit_gen().
|
inline |
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.
Definition at line 13953 of file json.hpp.
View newest version in sPHENIX GitHub at line 13953 of file json.hpp
References append_exponent(), k, and n.
Referenced by nlohmann::detail::to_chars().
|
inline |
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.
Definition at line 13299 of file json.hpp.
View newest version in sPHENIX GitHub at line 13299 of file json.hpp
References k, kAlpha, and kGamma.
Referenced by grisu2().
|
inline |
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.
Definition at line 13801 of file json.hpp.
View newest version in sPHENIX GitHub at line 13801 of file json.hpp
References 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(), and nlohmann::detail::dtoa_impl::cached_power::k.
Referenced by grisu2(), and nlohmann::detail::to_chars().
void nlohmann::detail::dtoa_impl::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.
Definition at line 13861 of file json.hpp.
View newest version in sPHENIX GitHub at line 13861 of file json.hpp
References compute_boundaries(), grisu2(), nlohmann::detail::dtoa_impl::boundaries::minus, nlohmann::detail::dtoa_impl::boundaries::plus, and nlohmann::detail::dtoa_impl::boundaries::w.
|
inline |
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.
Definition at line 13560 of file json.hpp.
View newest version in sPHENIX GitHub at line 13560 of file json.hpp
References d, Acts::Test::delta, nlohmann::detail::dtoa_impl::diyfp::e, nlohmann::detail::dtoa_impl::diyfp::f, find_largest_pow10(), grisu2_round(), k, kAlpha, kGamma, Acts::UnitConstants::m, max, n, and one.
Referenced by grisu2().
|
inline |
Definition at line 13519 of file json.hpp.
View newest version in sPHENIX GitHub at line 13519 of file json.hpp
Referenced by grisu2_digit_gen().
Target nlohmann::detail::dtoa_impl::reinterpret_bits | ( | const Source | source | ) |
constexpr int nlohmann::detail::dtoa_impl::kAlpha = -60 |
Definition at line 13282 of file json.hpp.
View newest version in sPHENIX GitHub at line 13282 of file json.hpp
Referenced by get_cached_power_for_binary_exponent(), and grisu2_digit_gen().
constexpr int nlohmann::detail::dtoa_impl::kGamma = -32 |
Definition at line 13283 of file json.hpp.
View newest version in sPHENIX GitHub at line 13283 of file json.hpp
Referenced by get_cached_power_for_binary_exponent(), and grisu2_digit_gen().