Dendro
5.01
Dendro in Greek language means tree. The Dendro library is a large scale (262K cores on ORNL's Titan) distributed memory adaptive octree framework. The main goal of Dendro is to perform large scale multiphysics simulations efficeiently in mordern supercomputers. Dendro consists of efficient parallel data structures and algorithms to perform variational ( finite element) methods and finite difference mthods on 2:1 balanced arbitary adaptive octrees which enables the users to perform simulations raning from black holes (binary black hole mergers) to blood flow in human body, where applications ranging from relativity, astrophysics to biomedical engineering.
|
implements the Grisu2 algorithm for binary to decimal floating-point conversion. More...
Classes | |
struct | boundaries |
struct | cached_power |
struct | diyfp |
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 uint32_t n, uint32_t &pow10) |
void | grisu2_round (char *buf, int len, uint64_t dist, uint64_t delta, uint64_t rest, 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) |
char * | append_exponent (char *buf, int e) |
appends a decimal representation of e to buf More... | |
char * | format_buffer (char *buf, int len, int decimal_exponent, int min_exp, int max_exp) |
prettify v = buf * 10^decimal_exponent More... | |
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
boundaries nlohmann::detail::dtoa_impl::compute_boundaries | ( | FloatType | value | ) |
Compute the (normalized) diyfp representing the input number 'value' and its boundaries.
|
inline |
For n != 0, returns k, such that pow10 := 10^(k-1) <= n < 10^k. For n == 0, returns 1 and sets pow10 := 1.
|
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.
|
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.
|
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.
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.