mirror of
https://github.com/fmtlib/fmt.git
synced 2024-10-02 13:02:03 +00:00
Remove Grisu2
This commit is contained in:
parent
78842ce0d6
commit
d79493e5ee
@ -44,10 +44,6 @@
|
|||||||
# define FMT_CATCH(x) if (false)
|
# define FMT_CATCH(x) if (false)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef FMT_ENABLE_GRISU2
|
|
||||||
# define FMT_ENABLE_GRISU2 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
# pragma warning(push)
|
# pragma warning(push)
|
||||||
# pragma warning(disable : 4702) // unreachable code
|
# pragma warning(disable : 4702) // unreachable code
|
||||||
@ -929,7 +925,7 @@ struct fixed_handler {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// The shortest representation digit handler.
|
// The shortest representation digit handler.
|
||||||
template <int GRISU_VERSION> struct grisu_shortest_handler {
|
struct grisu_shortest_handler {
|
||||||
char* buf;
|
char* buf;
|
||||||
int size;
|
int size;
|
||||||
// Distance between scaled value and upper bound (wp_W in Grisu3).
|
// Distance between scaled value and upper bound (wp_W in Grisu3).
|
||||||
@ -955,11 +951,6 @@ template <int GRISU_VERSION> struct grisu_shortest_handler {
|
|||||||
uint64_t error, int exp, bool integral) {
|
uint64_t error, int exp, bool integral) {
|
||||||
buf[size++] = digit;
|
buf[size++] = digit;
|
||||||
if (remainder >= error) return digits::more;
|
if (remainder >= error) return digits::more;
|
||||||
if (const_check(GRISU_VERSION != 3)) {
|
|
||||||
uint64_t d = integral ? diff : diff * data::powers_of_10_64[-exp];
|
|
||||||
round(d, divisor, remainder, error);
|
|
||||||
return digits::done;
|
|
||||||
}
|
|
||||||
uint64_t unit = integral ? 1 : data::powers_of_10_64[-exp];
|
uint64_t unit = integral ? 1 : data::powers_of_10_64[-exp];
|
||||||
uint64_t up = (diff - 1) * unit; // wp_Wup
|
uint64_t up = (diff - 1) * unit; // wp_Wup
|
||||||
round(up, divisor, remainder, error);
|
round(up, divisor, remainder, error);
|
||||||
@ -1113,28 +1104,17 @@ bool grisu_format(Double value, buffer<char>& buf, int precision,
|
|||||||
upper = upper * cached_pow; // \tilde{M}^+ in Grisu.
|
upper = upper * cached_pow; // \tilde{M}^+ in Grisu.
|
||||||
assert(min_exp <= upper.e && upper.e <= -32);
|
assert(min_exp <= upper.e && upper.e <= -32);
|
||||||
auto result = digits::result();
|
auto result = digits::result();
|
||||||
int size = 0;
|
|
||||||
if (const_check(FMT_ENABLE_GRISU2 &&
|
|
||||||
(options & grisu_options::grisu2) != 0)) {
|
|
||||||
++lower.f; // \tilde{M}^- + 1 ulp -> M^-_{\uparrow}.
|
|
||||||
--upper.f; // \tilde{M}^+ - 1 ulp -> M^+_{\downarrow}.
|
|
||||||
grisu_shortest_handler<2> handler{buf.data(), 0, (upper - normalized).f};
|
|
||||||
result = grisu_gen_digits(upper, upper.f - lower.f, exp, handler);
|
|
||||||
size = handler.size;
|
|
||||||
assert(result != digits::error);
|
|
||||||
} else {
|
|
||||||
--lower.f; // \tilde{M}^- - 1 ulp -> M^-_{\downarrow}.
|
--lower.f; // \tilde{M}^- - 1 ulp -> M^-_{\downarrow}.
|
||||||
++upper.f; // \tilde{M}^+ + 1 ulp -> M^+_{\uparrow}.
|
++upper.f; // \tilde{M}^+ + 1 ulp -> M^+_{\uparrow}.
|
||||||
// Numbers outside of (lower, upper) definitely do not round to value.
|
// Numbers outside of (lower, upper) definitely do not round to value.
|
||||||
grisu_shortest_handler<3> handler{buf.data(), 0, (upper - normalized).f};
|
grisu_shortest_handler handler{buf.data(), 0, (upper - normalized).f};
|
||||||
result = grisu_gen_digits(upper, upper.f - lower.f, exp, handler);
|
result = grisu_gen_digits(upper, upper.f - lower.f, exp, handler);
|
||||||
size = handler.size;
|
int size = handler.size;
|
||||||
if (result == digits::error) {
|
if (result == digits::error) {
|
||||||
exp = exp + size - cached_exp10 - 1;
|
exp = exp + size - cached_exp10 - 1;
|
||||||
fallback_format(value, buf, exp);
|
fallback_format(value, buf, exp);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
buf.resize(to_unsigned(size));
|
buf.resize(to_unsigned(size));
|
||||||
}
|
}
|
||||||
exp -= cached_exp10;
|
exp -= cached_exp10;
|
||||||
|
@ -1204,7 +1204,7 @@ template <typename Char> class grisu_writer {
|
|||||||
};
|
};
|
||||||
|
|
||||||
namespace grisu_options {
|
namespace grisu_options {
|
||||||
enum { fixed = 1, grisu2 = 2, binary32 = 4 };
|
enum { fixed = 1, binary32 = 2 };
|
||||||
}
|
}
|
||||||
|
|
||||||
// Formats value using the Grisu algorithm:
|
// Formats value using the Grisu algorithm:
|
||||||
|
Loading…
Reference in New Issue
Block a user