! For n != 0, returns k, such that pow10 := 10^(k-1) <= n < 10^k. For n == 0, returns 1 and sets pow10 := 1. */
| 13132 | For n == 0, returns 1 and sets pow10 := 1. |
| 13133 | */ |
| 13134 | inline int find_largest_pow10(const std::uint32_t n, std::uint32_t& pow10) |
| 13135 | { |
| 13136 | // LCOV_EXCL_START |
| 13137 | if (n >= 1000000000) |
| 13138 | { |
| 13139 | pow10 = 1000000000; |
| 13140 | return 10; |
| 13141 | } |
| 13142 | // LCOV_EXCL_STOP |
| 13143 | else if (n >= 100000000) |
| 13144 | { |
| 13145 | pow10 = 100000000; |
| 13146 | return 9; |
| 13147 | } |
| 13148 | else if (n >= 10000000) |
| 13149 | { |
| 13150 | pow10 = 10000000; |
| 13151 | return 8; |
| 13152 | } |
| 13153 | else if (n >= 1000000) |
| 13154 | { |
| 13155 | pow10 = 1000000; |
| 13156 | return 7; |
| 13157 | } |
| 13158 | else if (n >= 100000) |
| 13159 | { |
| 13160 | pow10 = 100000; |
| 13161 | return 6; |
| 13162 | } |
| 13163 | else if (n >= 10000) |
| 13164 | { |
| 13165 | pow10 = 10000; |
| 13166 | return 5; |
| 13167 | } |
| 13168 | else if (n >= 1000) |
| 13169 | { |
| 13170 | pow10 = 1000; |
| 13171 | return 4; |
| 13172 | } |
| 13173 | else if (n >= 100) |
| 13174 | { |
| 13175 | pow10 = 100; |
| 13176 | return 3; |
| 13177 | } |
| 13178 | else if (n >= 10) |
| 13179 | { |
| 13180 | pow10 = 10; |
| 13181 | return 2; |
| 13182 | } |
| 13183 | else |
| 13184 | { |
| 13185 | pow10 = 1; |
| 13186 | return 1; |
| 13187 | } |
| 13188 | } |
| 13189 | |
| 13190 | inline void grisu2_round(char* buf, int len, std::uint64_t dist, std::uint64_t delta, |
| 13191 | std::uint64_t rest, std::uint64_t ten_k) |