@@ -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