mirror of
https://github.com/fastfloat/fast_float.git
synced 2026-02-16 23:29:54 +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};
|
1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19, 1e20, 1e21, 1e22};
|
||||||
constexpr static float powers_of_ten_float[] = {1e0, 1e1, 1e2, 1e3, 1e4, 1e5,
|
constexpr static float powers_of_ten_float[] = {1e0, 1e1, 1e2, 1e3, 1e4, 1e5,
|
||||||
1e6, 1e7, 1e8, 1e9, 1e10};
|
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.
|
// Largest integer value v so that (5**index * v) <= 1<<53.
|
||||||
// 0x10000000000000 == 1 << 53
|
// 0x10000000000000 == 1 << 53
|
||||||
constexpr static uint64_t max_mantissa_double[] = {
|
constexpr static uint64_t max_mantissa_double[] = {
|
||||||
@ -229,31 +230,25 @@ constexpr static uint64_t max_mantissa_double[] = {
|
|||||||
0x10000000000000 / (5 * 5),
|
0x10000000000000 / (5 * 5),
|
||||||
0x10000000000000 / (5 * 5 * 5),
|
0x10000000000000 / (5 * 5 * 5),
|
||||||
0x10000000000000 / (5 * 5 * 5 * 5),
|
0x10000000000000 / (5 * 5 * 5 * 5),
|
||||||
0x10000000000000 / (5 * 5 * 5 * 5 * 5),
|
0x10000000000000 / (constant_55555),
|
||||||
0x10000000000000 / (5 * 5 * 5 * 5 * 5 * 5),
|
0x10000000000000 / (constant_55555 * 5),
|
||||||
0x10000000000000 / (5 * 5 * 5 * 5 * 5 * 5 * 5),
|
0x10000000000000 / (constant_55555 * 5 * 5),
|
||||||
0x10000000000000 / (5 * 5 * 5 * 5 * 5 * 5 * 5 * 5),
|
0x10000000000000 / (constant_55555 * 5 * 5 * 5),
|
||||||
0x10000000000000 / (5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5),
|
0x10000000000000 / (constant_55555 * 5 * 5 * 5 * 5),
|
||||||
0x10000000000000 / (5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5),
|
0x10000000000000 / (constant_55555 * constant_55555),
|
||||||
0x10000000000000 / (5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5),
|
0x10000000000000 / (constant_55555 * constant_55555 * 5),
|
||||||
0x10000000000000 / (5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5),
|
0x10000000000000 / (constant_55555 * constant_55555 * 5 * 5),
|
||||||
0x10000000000000 / (5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5),
|
0x10000000000000 / (constant_55555 * constant_55555 * 5 * 5 * 5),
|
||||||
0x10000000000000 / (uint64_t(5) * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5),
|
0x10000000000000 / (constant_5555constant_55555 * constant_55555),
|
||||||
0x10000000000000 / (uint64_t(5) * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5),
|
0x10000000000000 / (constant_5555constant_55555 * constant_55555 * 5),
|
||||||
0x10000000000000 / (uint64_t(5) * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5),
|
0x10000000000000 / (constant_5555constant_55555 * constant_55555 * 5 * 5),
|
||||||
0x10000000000000 / (uint64_t(5) * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5),
|
0x10000000000000 / (constant_5555constant_55555 * constant_55555 * 5 * 5 * 5),
|
||||||
0x10000000000000 / (uint64_t(5) * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 *
|
0x10000000000000 / (constant_5555constant_55555 * constant_55555 * 5 * 5 * 5 * 5),
|
||||||
5),
|
0x10000000000000 / (constant_5555constant_55555 * constant_55555 * constant_55555),
|
||||||
0x10000000000000 / (uint64_t(5) * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 *
|
0x10000000000000 / (constant_5555constant_55555 * constant_55555 * constant_55555 * 5),
|
||||||
5 * 5),
|
0x10000000000000 / (constant_5555constant_55555 * constant_55555 * constant_55555 * 5 * 5),
|
||||||
0x10000000000000 / (uint64_t(5) * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 *
|
0x10000000000000 / (constant_5555constant_55555 * constant_55555 * constant_55555 * 5 * 5 * 5),
|
||||||
5 * 5 * 5),
|
0x10000000000000 / (constant_5555constant_55555 * constant_55555 * constant_55555 * 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)};
|
|
||||||
// Largest integer value v so that (5**index * v) <= 1<<24.
|
// Largest integer value v so that (5**index * v) <= 1<<24.
|
||||||
// 0x1000000 == 1<<24
|
// 0x1000000 == 1<<24
|
||||||
constexpr static uint64_t max_mantissa_float[] = {
|
constexpr static uint64_t max_mantissa_float[] = {
|
||||||
@ -262,13 +257,13 @@ constexpr static uint64_t max_mantissa_double[] = {
|
|||||||
0x1000000 / (5 * 5),
|
0x1000000 / (5 * 5),
|
||||||
0x1000000 / (5 * 5 * 5),
|
0x1000000 / (5 * 5 * 5),
|
||||||
0x1000000 / (5 * 5 * 5 * 5),
|
0x1000000 / (5 * 5 * 5 * 5),
|
||||||
0x1000000 / (5 * 5 * 5 * 5 * 5),
|
0x1000000 / (constant_55555),
|
||||||
0x1000000 / (5 * 5 * 5 * 5 * 5 * 5),
|
0x1000000 / (constant_55555 * 5),
|
||||||
0x1000000 / (5 * 5 * 5 * 5 * 5 * 5 * 5),
|
0x1000000 / (constant_55555 * 5 * 5),
|
||||||
0x1000000 / (5 * 5 * 5 * 5 * 5 * 5 * 5 * 5),
|
0x1000000 / (constant_55555 * 5 * 5 * 5),
|
||||||
0x1000000 / (5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5),
|
0x1000000 / (constant_55555 * 5 * 5 * 5 * 5),
|
||||||
0x1000000 / (5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5),
|
0x1000000 / (constant_55555 * constant_55555),
|
||||||
0x1000000 / (5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5 * 5)};
|
0x1000000 / (constant_55555 * constant_55555 * 5)};
|
||||||
|
|
||||||
template <typename T> struct binary_format {
|
template <typename T> struct binary_format {
|
||||||
using equiv_uint = typename std::conditional<sizeof(T) == 4, uint32_t, uint64_t>::type;
|
using equiv_uint = typename std::conditional<sizeof(T) == 4, uint32_t, uint64_t>::type;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user