! For n != 0, returns k, such that pow10 := 10^(k-1) <= n < 10^k. For n == 0, returns 1 and sets pow10 := 1. */
| 14821 | For n == 0, returns 1 and sets pow10 := 1. |
| 14822 | */ |
| 14823 | inline int find_largest_pow10(const std::uint32_t n, std::uint32_t& pow10) |
| 14824 | { |
| 14825 | // LCOV_EXCL_START |
| 14826 | if (n >= 1000000000) |
| 14827 | { |
| 14828 | pow10 = 1000000000; |
| 14829 | return 10; |
| 14830 | } |
| 14831 | // LCOV_EXCL_STOP |
| 14832 | else if (n >= 100000000) |
| 14833 | { |
| 14834 | pow10 = 100000000; |
| 14835 | return 9; |
| 14836 | } |
| 14837 | else if (n >= 10000000) |
| 14838 | { |
| 14839 | pow10 = 10000000; |
| 14840 | return 8; |
| 14841 | } |
| 14842 | else if (n >= 1000000) |
| 14843 | { |
| 14844 | pow10 = 1000000; |
| 14845 | return 7; |
| 14846 | } |
| 14847 | else if (n >= 100000) |
| 14848 | { |
| 14849 | pow10 = 100000; |
| 14850 | return 6; |
| 14851 | } |
| 14852 | else if (n >= 10000) |
| 14853 | { |
| 14854 | pow10 = 10000; |
| 14855 | return 5; |
| 14856 | } |
| 14857 | else if (n >= 1000) |
| 14858 | { |
| 14859 | pow10 = 1000; |
| 14860 | return 4; |
| 14861 | } |
| 14862 | else if (n >= 100) |
| 14863 | { |
| 14864 | pow10 = 100; |
| 14865 | return 3; |
| 14866 | } |
| 14867 | else if (n >= 10) |
| 14868 | { |
| 14869 | pow10 = 10; |
| 14870 | return 2; |
| 14871 | } |
| 14872 | else |
| 14873 | { |
| 14874 | pow10 = 1; |
| 14875 | return 1; |
| 14876 | } |
| 14877 | } |
| 14878 | |
| 14879 | inline void grisu2_round(char* buf, int len, std::uint64_t dist, std::uint64_t delta, |
| 14880 | std::uint64_t rest, std::uint64_t ten_k) |