Skip to content

Commit ddbc414

Browse files
committed
Unify float and double paths more
1 parent 3ae65c6 commit ddbc414

File tree

1 file changed

+6
-7
lines changed

1 file changed

+6
-7
lines changed

zmij.cc

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -958,24 +958,23 @@ auto write(Float value, char* buffer) noexcept -> char* {
958958
bin_sig != 0);
959959
}
960960
int dec_exp = dec.exp;
961+
constexpr uint64_t threshold = uint64_t(traits::num_bits == 64 ? 1e16 : 1e8);
962+
bool extra_digit = dec.sig >= threshold;
963+
dec_exp += traits::max_digits10 - 2 + extra_digit;
961964

962965
// Write significand.
963966
char* start = buffer;
964967
if (traits::num_bits == 64) {
965-
bool has17digits = dec.sig >= uint64_t(1e16);
966-
dec_exp += traits::max_digits10 - 2 + has17digits;
967968
if (dec_exp >= -4 && dec_exp < compute_dec_exp(traits::digits + 1, true))
968-
return write_fixed(buffer, dec.sig, dec_exp, has17digits, dec.sig_div10);
969+
return write_fixed(buffer, dec.sig, dec_exp, extra_digit, dec.sig_div10);
969970
buffer =
970-
write_significand17(buffer + 1, dec.sig, has17digits, dec.sig_div10);
971+
write_significand17(buffer + 1, dec.sig, extra_digit, dec.sig_div10);
971972
} else {
972973
if (dec.sig < uint32_t(1e7)) [[ZMIJ_UNLIKELY]] {
973974
dec.sig *= 10;
974975
--dec_exp;
975976
}
976-
bool has9digits = dec.sig >= uint32_t(1e8);
977-
dec_exp += traits::max_digits10 - 2 + has9digits;
978-
buffer = write_significand9(buffer + 1, dec.sig, has9digits);
977+
buffer = write_significand9(buffer + 1, dec.sig, extra_digit);
979978
}
980979
start[0] = start[1];
981980
start[1] = '.';

0 commit comments

Comments
 (0)