![]() |
simdjson 5.0.2
Ridiculously Fast JSON
|
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. More...
#include <fast_float.h>
Static Public Attributes | |
| static constexpr int | smallest_power_of_five |
| static constexpr int | largest_power_of_five |
| static constexpr int | number_of_entries |
| static constexpr uint64_t | power_of_five_128 [number_of_entries] |
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. The smallest non-zero float (binary64) is 2^-1074. We take as input numbers of the form w x 10^q where w < 2^64. We have that w * 10^-343 < 2^(64-344) 5^-343 < 2^-1076. However, we have that (2^64-1) * 10^-342 = (2^64-1) * 2^-342 * 5^-342 > 2^-1074. Thus it is possible for a number of the form w * 10^-342 where w is a 64-bit value to be a non-zero floating-point number.
Any number of form w * 10^309 where w>= 1 is going to be infinite in binary64 so we never need to worry about powers of 5 greater than 308.
Definition at line 2597 of file fast_float.h.
|
staticconstexpr |
Definition at line 2601 of file fast_float.h.
|
staticconstexpr |
Definition at line 2603 of file fast_float.h.
|
staticconstexpr |
Definition at line 2606 of file fast_float.h.
|
staticconstexpr |
Definition at line 2599 of file fast_float.h.