|
STAR
Cal STAR — firmware, DAQ server, and engine design
|
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) |
| Compute the (normalized) diyfp representing the input number 'value' and its boundaries. | |
| cached_power | 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]). | |
| int | 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. | |
| 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) |
| Generates V = buffer * 10^decimal_exponent, such that M- <= V <= M+. | |
| void | 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. | |
| template<typename FloatType> | |
| void | 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. | |
| 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 17835 of file json.hpp.
References append_exponent(), and JSON_ASSERT.
Referenced by append_exponent(), and format_buffer().
| boundaries detail::dtoa_impl::compute_boundaries | ( | FloatType | value | ) |
Compute the (normalized) diyfp representing the input number 'value' and its boundaries.
Definition at line 17096 of file json.hpp.
References compute_boundaries(), detail::dtoa_impl::diyfp::e, detail::dtoa_impl::diyfp::f, JSON_ASSERT, detail::dtoa_impl::diyfp::normalize(), detail::dtoa_impl::diyfp::normalize_to(), reinterpret_bits(), and detail::static_const< T >::value.
Referenced by compute_boundaries(), and 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 17399 of file json.hpp.
References find_largest_pow10().
Referenced by find_largest_pow10(), and 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 17887 of file json.hpp.
References append_exponent(), format_buffer(), and JSON_ASSERT.
Referenced by format_buffer(), and 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 17235 of file json.hpp.
References detail::dtoa_impl::cached_power::e, get_cached_power_for_binary_exponent(), JSON_ASSERT, kAlpha, and kGamma.
Referenced by get_cached_power_for_binary_exponent(), and 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 17735 of file json.hpp.
References detail::dtoa_impl::cached_power::e, detail::dtoa_impl::diyfp::e, detail::dtoa_impl::cached_power::f, detail::dtoa_impl::diyfp::f, get_cached_power_for_binary_exponent(), grisu2(), grisu2_digit_gen(), JSON_ASSERT, detail::dtoa_impl::cached_power::k, and detail::dtoa_impl::diyfp::mul().
Referenced by grisu2(), grisu2(), and detail::to_chars().
| void 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 17795 of file json.hpp.
References compute_boundaries(), grisu2(), JSON_ASSERT, detail::dtoa_impl::diyfp::kPrecision, detail::dtoa_impl::boundaries::minus, detail::dtoa_impl::boundaries::plus, detail::static_const< T >::value, and 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 17494 of file json.hpp.
References detail::dtoa_impl::diyfp::e, detail::dtoa_impl::diyfp::f, find_largest_pow10(), grisu2_digit_gen(), grisu2_round(), JSON_ASSERT, kAlpha, kGamma, r, and detail::dtoa_impl::diyfp::sub().
Referenced by grisu2(), and grisu2_digit_gen().
|
inline |
Definition at line 17453 of file json.hpp.
References grisu2_round(), and JSON_ASSERT.
Referenced by grisu2_digit_gen(), and grisu2_round().
| Target detail::dtoa_impl::reinterpret_bits | ( | const Source | source | ) |
Definition at line 16955 of file json.hpp.
References reinterpret_bits(), and target.
Referenced by compute_boundaries(), and reinterpret_bits().
|
constexpr |
Definition at line 17218 of file json.hpp.
Referenced by get_cached_power_for_binary_exponent(), and grisu2_digit_gen().
|
constexpr |
Definition at line 17219 of file json.hpp.
Referenced by get_cached_power_for_binary_exponent(), and grisu2_digit_gen().