mirror of
https://github.com/fastfloat/fast_float.git
synced 2025-12-07 17:26:51 +08:00
Nicer constants.
This commit is contained in:
parent
e958ff4269
commit
3e29bf78c7
@ -220,7 +220,8 @@ constexpr static double powers_of_ten_double[] = {
|
||||
1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19, 1e20, 1e21, 1e22};
|
||||
constexpr static float powers_of_ten_float[] = {1e0, 1e1, 1e2, 1e3, 1e4, 1e5,
|
||||
1e6, 1e7, 1e8, 1e9, 1e10};
|
||||
|
||||
// used for max_mantissa_double and max_mantissa_float
|
||||
constexpr uint64_t constant_55555 = 5 * 5 * 5 * 5 * 5;
|
||||
// Largest integer value v so that (5**index * v) <= 1<<53.
|
||||
// 0x10000000000000 == 1 << 53
|
||||
constexpr static uint64_t max_mantissa_double[] = {
|
||||
@ -229,31 +230,25 @@ constexpr static uint64_t max_mantissa_double[] = {
|
||||
0x10000000000000 / (5 * 5),
|
||||
0x10000000000000 / (5 * 5 * 5),
|
||||
0x10000000000000 / (5 * 5 * 5 * 5),
|
||||
0x10000000000000 / (5 * 5 * 5 * 5 * 5),
|
||||
0x10000000000000 / (5 * 5 * 5 * 5 * 5 * 5),
|
||||
0x10000000000000 / (5 * 5 * 5 * 5 * 5 * 5 * 5),
|
||||
0x10000000000000 / (5 * 5 * 5 * 5 * 5 * 5 * 5 * 5),
|
||||
0x10000000000000 / (5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5),
|
||||
0x10000000000000 / (5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5),
|
||||
0x10000000000000 / (5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5),
|
||||
0x10000000000000 / (5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5),
|
||||
0x10000000000000 / (5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5),
|
||||
0x10000000000000 / (uint64_t(5) * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5),
|
||||
0x10000000000000 / (uint64_t(5) * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5),
|
||||
0x10000000000000 / (uint64_t(5) * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5),
|
||||
0x10000000000000 / (uint64_t(5) * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5),
|
||||
0x10000000000000 / (uint64_t(5) * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 *
|
||||
5),
|
||||
0x10000000000000 / (uint64_t(5) * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 *
|
||||
5 * 5),
|
||||
0x10000000000000 / (uint64_t(5) * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 *
|
||||
5 * 5 * 5),
|
||||
0x10000000000000 / (uint64_t(5) * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 *
|
||||
5 * 5 * 5 * 5),
|
||||
0x10000000000000 / (uint64_t(5) * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 *
|
||||
5 * 5 * 5 * 5 * 5),
|
||||
0x10000000000000 / (uint64_t(5) * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 *
|
||||
5 * 5 * 5 * 5 * 5 * 5)};
|
||||
0x10000000000000 / (constant_55555),
|
||||
0x10000000000000 / (constant_55555 * 5),
|
||||
0x10000000000000 / (constant_55555 * 5 * 5),
|
||||
0x10000000000000 / (constant_55555 * 5 * 5 * 5),
|
||||
0x10000000000000 / (constant_55555 * 5 * 5 * 5 * 5),
|
||||
0x10000000000000 / (constant_55555 * constant_55555),
|
||||
0x10000000000000 / (constant_55555 * constant_55555 * 5),
|
||||
0x10000000000000 / (constant_55555 * constant_55555 * 5 * 5),
|
||||
0x10000000000000 / (constant_55555 * constant_55555 * 5 * 5 * 5),
|
||||
0x10000000000000 / (constant_5555constant_55555 * constant_55555),
|
||||
0x10000000000000 / (constant_5555constant_55555 * constant_55555 * 5),
|
||||
0x10000000000000 / (constant_5555constant_55555 * constant_55555 * 5 * 5),
|
||||
0x10000000000000 / (constant_5555constant_55555 * constant_55555 * 5 * 5 * 5),
|
||||
0x10000000000000 / (constant_5555constant_55555 * constant_55555 * 5 * 5 * 5 * 5),
|
||||
0x10000000000000 / (constant_5555constant_55555 * constant_55555 * constant_55555),
|
||||
0x10000000000000 / (constant_5555constant_55555 * constant_55555 * constant_55555 * 5),
|
||||
0x10000000000000 / (constant_5555constant_55555 * constant_55555 * constant_55555 * 5 * 5),
|
||||
0x10000000000000 / (constant_5555constant_55555 * constant_55555 * constant_55555 * 5 * 5 * 5),
|
||||
0x10000000000000 / (constant_5555constant_55555 * constant_55555 * constant_55555 * 5 * 5 * 5 * 5)};
|
||||
// Largest integer value v so that (5**index * v) <= 1<<24.
|
||||
// 0x1000000 == 1<<24
|
||||
constexpr static uint64_t max_mantissa_float[] = {
|
||||
@ -262,13 +257,13 @@ constexpr static uint64_t max_mantissa_double[] = {
|
||||
0x1000000 / (5 * 5),
|
||||
0x1000000 / (5 * 5 * 5),
|
||||
0x1000000 / (5 * 5 * 5 * 5),
|
||||
0x1000000 / (5 * 5 * 5 * 5 * 5),
|
||||
0x1000000 / (5 * 5 * 5 * 5 * 5 * 5),
|
||||
0x1000000 / (5 * 5 * 5 * 5 * 5 * 5 * 5),
|
||||
0x1000000 / (5 * 5 * 5 * 5 * 5 * 5 * 5 * 5),
|
||||
0x1000000 / (5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5),
|
||||
0x1000000 / (5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5),
|
||||
0x1000000 / (5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5)};
|
||||
0x1000000 / (constant_55555),
|
||||
0x1000000 / (constant_55555 * 5),
|
||||
0x1000000 / (constant_55555 * 5 * 5),
|
||||
0x1000000 / (constant_55555 * 5 * 5 * 5),
|
||||
0x1000000 / (constant_55555 * 5 * 5 * 5 * 5),
|
||||
0x1000000 / (constant_55555 * constant_55555),
|
||||
0x1000000 / (constant_55555 * constant_55555 * 5)};
|
||||
|
||||
template <typename T> struct binary_format {
|
||||
using equiv_uint = typename std::conditional<sizeof(T) == 4, uint32_t, uint64_t>::type;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user