Conscience Core
Classes | Functions
fast_double_parser Namespace Reference

Classes

struct  value128
 

Functions

really_inline uint64_t Emulate64x64to128 (uint64_t &r_hi, const uint64_t x, const uint64_t y)
 
really_inline value128 full_multiplication (uint64_t value1, uint64_t value2)
 
int leading_zeroes (uint64_t input_num)
 
static bool is_integer (char c)
 
really_inline double compute_float_64 (int64_t power, uint64_t i, bool negative, bool *success)
 
static const char * parse_float_strtod (const char *ptr, double *outDouble)
 
WARN_UNUSED const really_inline char * parse_number (const char *p, double *outDouble)
 

Function Documentation

◆ compute_float_64()

really_inline double fast_double_parser::compute_float_64 ( int64_t  power,
uint64_t  i,
bool  negative,
bool *  success 
)

When mapping numbers from decimal to binary, we go from w * 10^q to m * 2^p but we have 10^q = 5^q * 2^q, so effectively we are trying to match w * 2^q * 5^q to m * 2^p. Thus the powers of two are not a concern since they can be represented exactly using the binary notation, only the powers of five affect the binary significand.

◆ Emulate64x64to128()

really_inline uint64_t fast_double_parser::Emulate64x64to128 ( uint64_t &  r_hi,
const uint64_t  x,
const uint64_t  y 
)

◆ full_multiplication()

really_inline value128 fast_double_parser::full_multiplication ( uint64_t  value1,
uint64_t  value2 
)

◆ is_integer()

static bool fast_double_parser::is_integer ( char  c)
inlinestatic

◆ leading_zeroes()

int fast_double_parser::leading_zeroes ( uint64_t  input_num)
inline

◆ parse_float_strtod()

static const char* fast_double_parser::parse_float_strtod ( const char *  ptr,
double *  outDouble 
)
static

◆ parse_number()

WARN_UNUSED const really_inline char* fast_double_parser::parse_number ( const char *  p,
double *  outDouble 
)