1 // Copyright (c) Microsoft Corporation.
2 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
3 
4 #ifndef FLOAT_GENERAL_PRECISION_TO_CHARS_TEST_CASES_HPP
5 #define FLOAT_GENERAL_PRECISION_TO_CHARS_TEST_CASES_HPP
6 
7 #include <charconv>
8 
9 #include "test.hpp"
10 using namespace std;
11 
12 // C11 7.21.6.1 "The fprintf function"/8:
13 
14 // "Then, if a conversion with style E would have an exponent of X:
15 // - if P > X >= -4, the conversion is with style f (or F) and precision P - (X + 1).
16 // - otherwise, the conversion is with style e (or E) and precision P - 1."
17 
18 // "Finally, [...] any trailing zeros are removed from the fractional portion of the result
19 // and the decimal-point character is removed if there is no fractional portion remaining."
20 
21 inline constexpr FloatPrecisionToCharsTestCase float_general_precision_to_chars_test_cases[] = {
22     // Test special cases (zero, inf, nan) and an ordinary case. Also test negative signs.
23     {0.0f, chars_format::general, 4, "0"},
24     {-0.0f, chars_format::general, 4, "-0"},
25     {float_inf, chars_format::general, 4, "inf"},
26     {-float_inf, chars_format::general, 4, "-inf"},
27     {float_nan, chars_format::general, 4, "nan"},
28     {-float_nan, chars_format::general, 4, "-nan(ind)"},
29     {float_nan_payload, chars_format::general, 4, "nan"},
30     {-float_nan_payload, chars_format::general, 4, "-nan"},
31     {1.729f, chars_format::general, 4, "1.729"},
32     {-1.729f, chars_format::general, 4, "-1.729"},
33 
34     // Test corner cases.
35     {0x0.000002p-126f, chars_format::general, 1000,
36         "1.40129846432481707092372958328991613128026194187651577175706828388979108268586060148663818836212158203125"
37         "e-45"}, // min subnormal
38     {0x0.fffffep-126f, chars_format::general, 1000,
39         "1."
40         "17549421069244107548702944484928734882705242874589333385717453057158887047561890426550235133618116378784179687"
41         "5e-38"}, // max subnormal
42     {0x1p-126f, chars_format::general, 1000,
43         "1.1754943508222875079687365372222456778186655567720875215087517062784172594547271728515625e-38"}, // min normal
44     {0x1.fffffep+127f, chars_format::general, 1000, "340282346638528859811704183484516925440"}, // max normal
45 
46     {0x0.000002p-126f, chars_format::general, 6, "1.4013e-45"}, // min subnormal
47     {0x0.fffffep-126f, chars_format::general, 6, "1.17549e-38"}, // max subnormal
48     {0x1p-126f, chars_format::general, 6, "1.17549e-38"}, // min normal
49     {0x1.fffffep+127f, chars_format::general, 6, "3.40282e+38"}, // max normal
50 
51     // Test maximum-length output (excluding minus signs).
52     {0x1.fffffep-126f, chars_format::general, 1000,
53         "2."
54         "35098856151472858345576598207153302664571798551798085536592623685000612993034607711706485133618116378784179687"
55         "5e-38"}, // scientific, happens to be the same length as max subnormal
56     {0x1.fffffep-14f, chars_format::general, 1000, "0.0001220703052240423858165740966796875"}, // fixed
57 
58     // Test varying precision. Negative precision requests P == 6. Zero precision requests P == 1.
59     // Here, the scientific exponent X is 0.
60     // Therefore, fixed notation is always chosen with precision P - (X + 1) == P - 1.
61     {0x1.b04p0f, chars_format::general, -2, "1.68848"},
62     {0x1.b04p0f, chars_format::general, -1, "1.68848"},
63     {0x1.b04p0f, chars_format::general, 0, "2"},
64     {0x1.b04p0f, chars_format::general, 1, "2"}, // fixed notation trims decimal point
65     {0x1.b04p0f, chars_format::general, 2, "1.7"},
66     {0x1.b04p0f, chars_format::general, 3, "1.69"},
67     {0x1.b04p0f, chars_format::general, 4, "1.688"},
68     {0x1.b04p0f, chars_format::general, 5, "1.6885"},
69     {0x1.b04p0f, chars_format::general, 6, "1.68848"},
70     {0x1.b04p0f, chars_format::general, 7, "1.688477"},
71     {0x1.b04p0f, chars_format::general, 8, "1.6884766"},
72     {0x1.b04p0f, chars_format::general, 9, "1.68847656"},
73     {0x1.b04p0f, chars_format::general, 10, "1.688476562"}, // round to even
74     {0x1.b04p0f, chars_format::general, 11, "1.6884765625"}, // exact
75     {0x1.b04p0f, chars_format::general, 12, "1.6884765625"}, // trim trailing zeros
76     {0x1.b04p0f, chars_format::general, 13, "1.6884765625"},
77 
78     // Here, the scientific exponent X is -5.
79     // Therefore, scientific notation is always chosen with precision P - 1.
80     {0x1.8p-15f, chars_format::general, -2, "4.57764e-05"},
81     {0x1.8p-15f, chars_format::general, -1, "4.57764e-05"},
82     {0x1.8p-15f, chars_format::general, 0, "5e-05"},
83     {0x1.8p-15f, chars_format::general, 1, "5e-05"}, // scientific notation trims decimal point
84     {0x1.8p-15f, chars_format::general, 2, "4.6e-05"},
85     {0x1.8p-15f, chars_format::general, 3, "4.58e-05"},
86     {0x1.8p-15f, chars_format::general, 4, "4.578e-05"},
87     {0x1.8p-15f, chars_format::general, 5, "4.5776e-05"},
88     {0x1.8p-15f, chars_format::general, 6, "4.57764e-05"},
89     {0x1.8p-15f, chars_format::general, 7, "4.577637e-05"},
90     {0x1.8p-15f, chars_format::general, 8, "4.5776367e-05"},
91     {0x1.8p-15f, chars_format::general, 9, "4.57763672e-05"},
92     {0x1.8p-15f, chars_format::general, 10, "4.577636719e-05"},
93     {0x1.8p-15f, chars_format::general, 11, "4.5776367188e-05"}, // round to even
94     {0x1.8p-15f, chars_format::general, 12, "4.57763671875e-05"}, // exact
95     {0x1.8p-15f, chars_format::general, 13, "4.57763671875e-05"}, // trim trailing zeros
96     {0x1.8p-15f, chars_format::general, 14, "4.57763671875e-05"},
97 
98     // Trim trailing zeros.
99     {0x1.80015p0f, chars_format::general, 1, "2"}, // fixed notation trims decimal point
100     {0x1.80015p0f, chars_format::general, 2, "1.5"},
101     {0x1.80015p0f, chars_format::general, 3, "1.5"}, // general trims trailing zeros
102     {0x1.80015p0f, chars_format::general, 4, "1.5"},
103     {0x1.80015p0f, chars_format::general, 5, "1.5"},
104     {0x1.80015p0f, chars_format::general, 6, "1.50002"},
105     {0x1.80015p0f, chars_format::general, 7, "1.50002"},
106     {0x1.80015p0f, chars_format::general, 8, "1.50002"},
107     {0x1.80015p0f, chars_format::general, 9, "1.50002003"},
108     {0x1.80015p0f, chars_format::general, 10, "1.500020027"},
109     {0x1.80015p0f, chars_format::general, 11, "1.5000200272"},
110     {0x1.80015p0f, chars_format::general, 12, "1.50002002716"},
111     {0x1.80015p0f, chars_format::general, 13, "1.500020027161"},
112     {0x1.80015p0f, chars_format::general, 14, "1.5000200271606"},
113     {0x1.80015p0f, chars_format::general, 15, "1.50002002716064"},
114     {0x1.80015p0f, chars_format::general, 16, "1.500020027160645"},
115     {0x1.80015p0f, chars_format::general, 17, "1.5000200271606445"},
116     {0x1.80015p0f, chars_format::general, 18, "1.50002002716064453"},
117     {0x1.80015p0f, chars_format::general, 19, "1.500020027160644531"},
118     {0x1.80015p0f, chars_format::general, 20, "1.5000200271606445312"}, // round to even
119     {0x1.80015p0f, chars_format::general, 21, "1.50002002716064453125"}, // exact
120 
121     // Trim trailing zeros and decimal point.
122     {0x1.00015p0f, chars_format::general, 1, "1"}, // fixed notation trims decimal point
123     {0x1.00015p0f, chars_format::general, 2, "1"}, // general trims decimal point and trailing zeros
124     {0x1.00015p0f, chars_format::general, 3, "1"},
125     {0x1.00015p0f, chars_format::general, 4, "1"},
126     {0x1.00015p0f, chars_format::general, 5, "1"},
127     {0x1.00015p0f, chars_format::general, 6, "1.00002"},
128     {0x1.00015p0f, chars_format::general, 7, "1.00002"},
129     {0x1.00015p0f, chars_format::general, 8, "1.00002"},
130     {0x1.00015p0f, chars_format::general, 9, "1.00002003"},
131     {0x1.00015p0f, chars_format::general, 10, "1.000020027"},
132     {0x1.00015p0f, chars_format::general, 11, "1.0000200272"},
133     {0x1.00015p0f, chars_format::general, 12, "1.00002002716"},
134     {0x1.00015p0f, chars_format::general, 13, "1.000020027161"},
135     {0x1.00015p0f, chars_format::general, 14, "1.0000200271606"},
136     {0x1.00015p0f, chars_format::general, 15, "1.00002002716064"},
137     {0x1.00015p0f, chars_format::general, 16, "1.000020027160645"},
138     {0x1.00015p0f, chars_format::general, 17, "1.0000200271606445"},
139     {0x1.00015p0f, chars_format::general, 18, "1.00002002716064453"},
140     {0x1.00015p0f, chars_format::general, 19, "1.000020027160644531"},
141     {0x1.00015p0f, chars_format::general, 20, "1.0000200271606445312"}, // round to even
142     {0x1.00015p0f, chars_format::general, 21, "1.00002002716064453125"}, // exact
143 
144     // Trim trailing zeros, scientific notation.
145     {0x1.5cf752p-20f, chars_format::general, 1, "1e-06"}, // scientific notation trims decimal point
146     {0x1.5cf752p-20f, chars_format::general, 2, "1.3e-06"},
147     {0x1.5cf752p-20f, chars_format::general, 3, "1.3e-06"}, // general trims trailing zeros
148     {0x1.5cf752p-20f, chars_format::general, 4, "1.3e-06"},
149     {0x1.5cf752p-20f, chars_format::general, 5, "1.3e-06"},
150     {0x1.5cf752p-20f, chars_format::general, 6, "1.3e-06"},
151     {0x1.5cf752p-20f, chars_format::general, 7, "1.3e-06"},
152     {0x1.5cf752p-20f, chars_format::general, 8, "1.3e-06"},
153     {0x1.5cf752p-20f, chars_format::general, 9, "1.30000001e-06"},
154     {0x1.5cf752p-20f, chars_format::general, 10, "1.300000008e-06"},
155     {0x1.5cf752p-20f, chars_format::general, 11, "1.3000000081e-06"},
156     {0x1.5cf752p-20f, chars_format::general, 12, "1.30000000809e-06"},
157     {0x1.5cf752p-20f, chars_format::general, 13, "1.300000008086e-06"},
158     {0x1.5cf752p-20f, chars_format::general, 14, "1.3000000080865e-06"},
159     {0x1.5cf752p-20f, chars_format::general, 15, "1.3000000080865e-06"},
160     {0x1.5cf752p-20f, chars_format::general, 16, "1.300000008086499e-06"},
161     {0x1.5cf752p-20f, chars_format::general, 17, "1.3000000080864993e-06"},
162     {0x1.5cf752p-20f, chars_format::general, 18, "1.30000000808649929e-06"},
163     {0x1.5cf752p-20f, chars_format::general, 19, "1.300000008086499292e-06"},
164     {0x1.5cf752p-20f, chars_format::general, 20, "1.3000000080864992924e-06"},
165     {0x1.5cf752p-20f, chars_format::general, 21, "1.3000000080864992924e-06"},
166     {0x1.5cf752p-20f, chars_format::general, 22, "1.300000008086499292403e-06"},
167     {0x1.5cf752p-20f, chars_format::general, 23, "1.3000000080864992924035e-06"},
168     {0x1.5cf752p-20f, chars_format::general, 24, "1.30000000808649929240346e-06"},
169     {0x1.5cf752p-20f, chars_format::general, 25, "1.30000000808649929240346e-06"},
170     {0x1.5cf752p-20f, chars_format::general, 26, "1.3000000080864992924034595e-06"},
171     {0x1.5cf752p-20f, chars_format::general, 27, "1.30000000808649929240345955e-06"},
172     {0x1.5cf752p-20f, chars_format::general, 28, "1.300000008086499292403459549e-06"},
173     {0x1.5cf752p-20f, chars_format::general, 29, "1.300000008086499292403459549e-06"},
174     {0x1.5cf752p-20f, chars_format::general, 30, "1.30000000808649929240345954895e-06"},
175     {0x1.5cf752p-20f, chars_format::general, 31, "1.30000000808649929240345954895e-06"},
176     {0x1.5cf752p-20f, chars_format::general, 32, "1.3000000080864992924034595489502e-06"},
177     {0x1.5cf752p-20f, chars_format::general, 33, "1.3000000080864992924034595489502e-06"},
178     {0x1.5cf752p-20f, chars_format::general, 34, "1.300000008086499292403459548950195e-06"},
179     {0x1.5cf752p-20f, chars_format::general, 35, "1.3000000080864992924034595489501953e-06"},
180     {0x1.5cf752p-20f, chars_format::general, 36, "1.30000000808649929240345954895019531e-06"},
181     {0x1.5cf752p-20f, chars_format::general, 37, "1.300000008086499292403459548950195312e-06"}, // round to even
182     {0x1.5cf752p-20f, chars_format::general, 38, "1.3000000080864992924034595489501953125e-06"}, // exact
183 
184     // Trim trailing zeros and decimal point, scientific notation.
185     {0x1.92a738p-19f, chars_format::general, 1, "3e-06"}, // scientific notation trims decimal point
186     {0x1.92a738p-19f, chars_format::general, 2, "3e-06"}, // general trims decimal point and trailing zeros
187     {0x1.92a738p-19f, chars_format::general, 3, "3e-06"},
188     {0x1.92a738p-19f, chars_format::general, 4, "3e-06"},
189     {0x1.92a738p-19f, chars_format::general, 5, "3e-06"},
190     {0x1.92a738p-19f, chars_format::general, 6, "3e-06"},
191     {0x1.92a738p-19f, chars_format::general, 7, "3e-06"},
192     {0x1.92a738p-19f, chars_format::general, 8, "3.0000001e-06"},
193     {0x1.92a738p-19f, chars_format::general, 9, "3.00000011e-06"},
194     {0x1.92a738p-19f, chars_format::general, 10, "3.000000106e-06"},
195     {0x1.92a738p-19f, chars_format::general, 11, "3.0000001061e-06"},
196     {0x1.92a738p-19f, chars_format::general, 12, "3.00000010611e-06"},
197     {0x1.92a738p-19f, chars_format::general, 13, "3.000000106113e-06"},
198     {0x1.92a738p-19f, chars_format::general, 14, "3.0000001061126e-06"},
199     {0x1.92a738p-19f, chars_format::general, 15, "3.00000010611257e-06"},
200     {0x1.92a738p-19f, chars_format::general, 16, "3.000000106112566e-06"},
201     {0x1.92a738p-19f, chars_format::general, 17, "3.0000001061125658e-06"},
202     {0x1.92a738p-19f, chars_format::general, 18, "3.00000010611256585e-06"},
203     {0x1.92a738p-19f, chars_format::general, 19, "3.000000106112565845e-06"},
204     {0x1.92a738p-19f, chars_format::general, 20, "3.0000001061125658453e-06"},
205     {0x1.92a738p-19f, chars_format::general, 21, "3.00000010611256584525e-06"},
206     {0x1.92a738p-19f, chars_format::general, 22, "3.000000106112565845251e-06"},
207     {0x1.92a738p-19f, chars_format::general, 23, "3.0000001061125658452511e-06"},
208     {0x1.92a738p-19f, chars_format::general, 24, "3.00000010611256584525108e-06"},
209     {0x1.92a738p-19f, chars_format::general, 25, "3.000000106112565845251083e-06"},
210     {0x1.92a738p-19f, chars_format::general, 26, "3.0000001061125658452510834e-06"},
211     {0x1.92a738p-19f, chars_format::general, 27, "3.00000010611256584525108337e-06"},
212     {0x1.92a738p-19f, chars_format::general, 28, "3.000000106112565845251083374e-06"},
213     {0x1.92a738p-19f, chars_format::general, 29, "3.000000106112565845251083374e-06"},
214     {0x1.92a738p-19f, chars_format::general, 30, "3.00000010611256584525108337402e-06"},
215     {0x1.92a738p-19f, chars_format::general, 31, "3.000000106112565845251083374023e-06"},
216     {0x1.92a738p-19f, chars_format::general, 32, "3.0000001061125658452510833740234e-06"},
217     {0x1.92a738p-19f, chars_format::general, 33, "3.00000010611256584525108337402344e-06"},
218     {0x1.92a738p-19f, chars_format::general, 34, "3.000000106112565845251083374023438e-06"}, // round to even
219     {0x1.92a738p-19f, chars_format::general, 35, "3.0000001061125658452510833740234375e-06"}, // exact
220 
221     // Test a large precision with fixed notation and scientific notation,
222     // verifying that we remain within the bounds of any lookup tables.
223     {0x1.ba9fbep+0f, chars_format::general, 5000, "1.72899997234344482421875"},
224     {0x1.d01ffap-20f, chars_format::general, 5000, "1.7290000187131226994097232818603515625e-06"},
225 
226     // Test the transitions between fixed notation and scientific notation.
227     {5555555.0f, chars_format::general, 1, "6e+06"},
228     {555555.0f, chars_format::general, 1, "6e+05"},
229     {55555.0f, chars_format::general, 1, "6e+04"},
230     {5555.0f, chars_format::general, 1, "6e+03"},
231     {555.0f, chars_format::general, 1, "6e+02"},
232     {55.0f, chars_format::general, 1, "6e+01"}, // round to even
233     {5.0f, chars_format::general, 1, "5"},
234     {0x1p-3f, chars_format::general, 1, "0.1"}, // 0.125
235     {0x1p-6f, chars_format::general, 1, "0.02"}, // 0.015625
236     {0x1p-9f, chars_format::general, 1, "0.002"}, // 0.001953125
237     {0x1p-13f, chars_format::general, 1, "0.0001"}, // 0.0001220703125
238     {0x1p-16f, chars_format::general, 1, "2e-05"}, // 1.52587890625e-05
239     {0x1p-19f, chars_format::general, 1, "2e-06"}, // 1.9073486328125e-06
240 
241     {5555555.0f, chars_format::general, 2, "5.6e+06"},
242     {555555.0f, chars_format::general, 2, "5.6e+05"},
243     {55555.0f, chars_format::general, 2, "5.6e+04"},
244     {5555.0f, chars_format::general, 2, "5.6e+03"},
245     {555.0f, chars_format::general, 2, "5.6e+02"}, // round to even
246     {55.0f, chars_format::general, 2, "55"},
247     {5.0f, chars_format::general, 2, "5"},
248     {0x1p-3f, chars_format::general, 2, "0.12"}, // round to even
249     {0x1p-6f, chars_format::general, 2, "0.016"},
250     {0x1p-9f, chars_format::general, 2, "0.002"},
251     {0x1p-13f, chars_format::general, 2, "0.00012"},
252     {0x1p-16f, chars_format::general, 2, "1.5e-05"},
253     {0x1p-19f, chars_format::general, 2, "1.9e-06"},
254 
255     {5555555.0f, chars_format::general, 3, "5.56e+06"},
256     {555555.0f, chars_format::general, 3, "5.56e+05"},
257     {55555.0f, chars_format::general, 3, "5.56e+04"},
258     {5555.0f, chars_format::general, 3, "5.56e+03"}, // round to even
259     {555.0f, chars_format::general, 3, "555"},
260     {55.0f, chars_format::general, 3, "55"},
261     {5.0f, chars_format::general, 3, "5"},
262     {0x1p-3f, chars_format::general, 3, "0.125"},
263     {0x1p-6f, chars_format::general, 3, "0.0156"},
264     {0x1p-9f, chars_format::general, 3, "0.00195"},
265     {0x1p-13f, chars_format::general, 3, "0.000122"},
266     {0x1p-16f, chars_format::general, 3, "1.53e-05"},
267     {0x1p-19f, chars_format::general, 3, "1.91e-06"},
268 
269     {5555555.0f, chars_format::general, 4, "5.556e+06"},
270     {555555.0f, chars_format::general, 4, "5.556e+05"},
271     {55555.0f, chars_format::general, 4, "5.556e+04"}, // round to even
272     {5555.0f, chars_format::general, 4, "5555"},
273     {555.0f, chars_format::general, 4, "555"},
274     {55.0f, chars_format::general, 4, "55"},
275     {5.0f, chars_format::general, 4, "5"},
276     {0x1p-3f, chars_format::general, 4, "0.125"},
277     {0x1p-6f, chars_format::general, 4, "0.01562"}, // round to even
278     {0x1p-9f, chars_format::general, 4, "0.001953"},
279     {0x1p-13f, chars_format::general, 4, "0.0001221"},
280     {0x1p-16f, chars_format::general, 4, "1.526e-05"},
281     {0x1p-19f, chars_format::general, 4, "1.907e-06"},
282 
283     {5555555.0f, chars_format::general, 5, "5.5556e+06"},
284     {555555.0f, chars_format::general, 5, "5.5556e+05"}, // round to even
285     {55555.0f, chars_format::general, 5, "55555"},
286     {5555.0f, chars_format::general, 5, "5555"},
287     {555.0f, chars_format::general, 5, "555"},
288     {55.0f, chars_format::general, 5, "55"},
289     {5.0f, chars_format::general, 5, "5"},
290     {0x1p-3f, chars_format::general, 5, "0.125"},
291     {0x1p-6f, chars_format::general, 5, "0.015625"},
292     {0x1p-9f, chars_format::general, 5, "0.0019531"},
293     {0x1p-13f, chars_format::general, 5, "0.00012207"},
294     {0x1p-16f, chars_format::general, 5, "1.5259e-05"},
295     {0x1p-19f, chars_format::general, 5, "1.9073e-06"},
296 
297     // Tricky corner cases.
298     // In these scenarios, rounding can adjust the scientific exponent X,
299     // which affects the transition between fixed notation and scientific notation.
300     {999.999f, chars_format::general, 1, "1e+03"}, // "%.0e" is "1e+03"; X == 3
301     {999.999f, chars_format::general, 2, "1e+03"}, // "%.1e" is "1.0e+03"; X == 3
302     {999.999f, chars_format::general, 3, "1e+03"}, // "%.2e" is "1.00e+03"; X == 3
303     {999.999f, chars_format::general, 4, "1000"}, // "%.3e" is "1.000e+03"; X == 3
304     {999.999f, chars_format::general, 5, "1000"}, // "%.4e" is "1.0000e+03"; X == 3
305     {999.999f, chars_format::general, 6, "999.999"}, // "%.5e" is "9.99999e+02"; X == 2
306 
307     {999.99f, chars_format::general, 1, "1e+03"},
308     {999.99f, chars_format::general, 2, "1e+03"},
309     {999.99f, chars_format::general, 3, "1e+03"},
310     {999.99f, chars_format::general, 4, "1000"},
311     {999.99f, chars_format::general, 5, "999.99"},
312     {999.99f, chars_format::general, 6, "999.99"},
313 
314     // C11's Standardese is slightly vague about how to perform the trial formatting in scientific notation,
315     // but the intention is to use precision P - 1, which is what's used when scientific notation is actually chosen.
316     // This example verifies this behavior. Here, P == 3 performs trial formatting with "%.2e", triggering rounding.
317     // That increases X to 3, forcing scientific notation to be chosen.
318     // If P == 3 performed trial formatting with "%.3e", rounding wouldn't happen,
319     // X would be 2, and fixed notation would be chosen.
320     {999.9f, chars_format::general, 1, "1e+03"}, // "%.0e" is "1e+03"; X == 3
321     {999.9f, chars_format::general, 2, "1e+03"}, // "%.1e" is "1.0e+03"; X == 3
322     {999.9f, chars_format::general, 3, "1e+03"}, // "%.2e" is "1.00e+03"; X == 3; SPECIAL CORNER CASE
323     {999.9f, chars_format::general, 4, "999.9"}, // "%.3e" is "9.999e+02"; X == 2
324     {999.9f, chars_format::general, 5, "999.9"}, // "%.4e" is "9.9990e+02"; X == 2
325     {999.9f, chars_format::general, 6, "999.9"}, // "%.5e" is "9.99900e+02"; X == 2
326 
327     {999.0f, chars_format::general, 1, "1e+03"},
328     {999.0f, chars_format::general, 2, "1e+03"},
329     {999.0f, chars_format::general, 3, "999"},
330     {999.0f, chars_format::general, 4, "999"},
331     {999.0f, chars_format::general, 5, "999"},
332     {999.0f, chars_format::general, 6, "999"},
333 
334     {99.9999f, chars_format::general, 1, "1e+02"},
335     {99.9999f, chars_format::general, 2, "1e+02"},
336     {99.9999f, chars_format::general, 3, "100"},
337     {99.9999f, chars_format::general, 4, "100"},
338     {99.9999f, chars_format::general, 5, "100"},
339     {99.9999f, chars_format::general, 6, "99.9999"},
340 
341     {99.999f, chars_format::general, 1, "1e+02"},
342     {99.999f, chars_format::general, 2, "1e+02"},
343     {99.999f, chars_format::general, 3, "100"},
344     {99.999f, chars_format::general, 4, "100"},
345     {99.999f, chars_format::general, 5, "99.999"},
346     {99.999f, chars_format::general, 6, "99.999"},
347 
348     {99.99f, chars_format::general, 1, "1e+02"},
349     {99.99f, chars_format::general, 2, "1e+02"},
350     {99.99f, chars_format::general, 3, "100"},
351     {99.99f, chars_format::general, 4, "99.99"},
352     {99.99f, chars_format::general, 5, "99.99"},
353     {99.99f, chars_format::general, 6, "99.99"},
354 
355     {99.9f, chars_format::general, 1, "1e+02"},
356     {99.9f, chars_format::general, 2, "1e+02"},
357     {99.9f, chars_format::general, 3, "99.9"},
358     {99.9f, chars_format::general, 4, "99.9"},
359     {99.9f, chars_format::general, 5, "99.9"},
360     {99.9f, chars_format::general, 6, "99.9"},
361 
362     {99.0f, chars_format::general, 1, "1e+02"},
363     {99.0f, chars_format::general, 2, "99"},
364     {99.0f, chars_format::general, 3, "99"},
365     {99.0f, chars_format::general, 4, "99"},
366     {99.0f, chars_format::general, 5, "99"},
367     {99.0f, chars_format::general, 6, "99"},
368 
369     {9.99999f, chars_format::general, 1, "1e+01"},
370     {9.99999f, chars_format::general, 2, "10"},
371     {9.99999f, chars_format::general, 3, "10"},
372     {9.99999f, chars_format::general, 4, "10"},
373     {9.99999f, chars_format::general, 5, "10"},
374     {9.99999f, chars_format::general, 6, "9.99999"},
375 
376     {9.9999f, chars_format::general, 1, "1e+01"},
377     {9.9999f, chars_format::general, 2, "10"},
378     {9.9999f, chars_format::general, 3, "10"},
379     {9.9999f, chars_format::general, 4, "10"},
380     {9.9999f, chars_format::general, 5, "9.9999"},
381     {9.9999f, chars_format::general, 6, "9.9999"},
382 
383     {9.999f, chars_format::general, 1, "1e+01"},
384     {9.999f, chars_format::general, 2, "10"},
385     {9.999f, chars_format::general, 3, "10"},
386     {9.999f, chars_format::general, 4, "9.999"},
387     {9.999f, chars_format::general, 5, "9.999"},
388     {9.999f, chars_format::general, 6, "9.999"},
389 
390     {9.99f, chars_format::general, 1, "1e+01"},
391     {9.99f, chars_format::general, 2, "10"},
392     {9.99f, chars_format::general, 3, "9.99"},
393     {9.99f, chars_format::general, 4, "9.99"},
394     {9.99f, chars_format::general, 5, "9.99"},
395     {9.99f, chars_format::general, 6, "9.99"},
396 
397     {9.9f, chars_format::general, 1, "1e+01"},
398     {9.9f, chars_format::general, 2, "9.9"},
399     {9.9f, chars_format::general, 3, "9.9"},
400     {9.9f, chars_format::general, 4, "9.9"},
401     {9.9f, chars_format::general, 5, "9.9"},
402     {9.9f, chars_format::general, 6, "9.9"},
403 
404     {9.0f, chars_format::general, 1, "9"},
405     {9.0f, chars_format::general, 2, "9"},
406     {9.0f, chars_format::general, 3, "9"},
407     {9.0f, chars_format::general, 4, "9"},
408     {9.0f, chars_format::general, 5, "9"},
409     {9.0f, chars_format::general, 6, "9"},
410 
411     {0.999999f, chars_format::general, 1, "1"},
412     {0.999999f, chars_format::general, 2, "1"},
413     {0.999999f, chars_format::general, 3, "1"},
414     {0.999999f, chars_format::general, 4, "1"},
415     {0.999999f, chars_format::general, 5, "1"},
416     {0.999999f, chars_format::general, 6, "0.999999"},
417 
418     {0.99999f, chars_format::general, 1, "1"},
419     {0.99999f, chars_format::general, 2, "1"},
420     {0.99999f, chars_format::general, 3, "1"},
421     {0.99999f, chars_format::general, 4, "1"},
422     {0.99999f, chars_format::general, 5, "0.99999"},
423     {0.99999f, chars_format::general, 6, "0.99999"},
424 
425     {0.9999f, chars_format::general, 1, "1"},
426     {0.9999f, chars_format::general, 2, "1"},
427     {0.9999f, chars_format::general, 3, "1"},
428     {0.9999f, chars_format::general, 4, "0.9999"},
429     {0.9999f, chars_format::general, 5, "0.9999"},
430     {0.9999f, chars_format::general, 6, "0.9999"},
431 
432     {0.999f, chars_format::general, 1, "1"},
433     {0.999f, chars_format::general, 2, "1"},
434     {0.999f, chars_format::general, 3, "0.999"},
435     {0.999f, chars_format::general, 4, "0.999"},
436     {0.999f, chars_format::general, 5, "0.999"},
437     {0.999f, chars_format::general, 6, "0.999"},
438 
439     {0.99f, chars_format::general, 1, "1"},
440     {0.99f, chars_format::general, 2, "0.99"},
441     {0.99f, chars_format::general, 3, "0.99"},
442     {0.99f, chars_format::general, 4, "0.99"},
443     {0.99f, chars_format::general, 5, "0.99"},
444     {0.99f, chars_format::general, 6, "0.99"},
445 
446     {0.9f, chars_format::general, 1, "0.9"},
447     {0.9f, chars_format::general, 2, "0.9"},
448     {0.9f, chars_format::general, 3, "0.9"},
449     {0.9f, chars_format::general, 4, "0.9"},
450     {0.9f, chars_format::general, 5, "0.9"},
451     {0.9f, chars_format::general, 6, "0.9"},
452 
453     {0.0999999f, chars_format::general, 1, "0.1"},
454     {0.0999999f, chars_format::general, 2, "0.1"},
455     {0.0999999f, chars_format::general, 3, "0.1"},
456     {0.0999999f, chars_format::general, 4, "0.1"},
457     {0.0999999f, chars_format::general, 5, "0.1"},
458     {0.0999999f, chars_format::general, 6, "0.0999999"},
459 
460     {0.099999f, chars_format::general, 1, "0.1"},
461     {0.099999f, chars_format::general, 2, "0.1"},
462     {0.099999f, chars_format::general, 3, "0.1"},
463     {0.099999f, chars_format::general, 4, "0.1"},
464     {0.099999f, chars_format::general, 5, "0.099999"},
465     {0.099999f, chars_format::general, 6, "0.099999"},
466 
467     {0.09999f, chars_format::general, 1, "0.1"},
468     {0.09999f, chars_format::general, 2, "0.1"},
469     {0.09999f, chars_format::general, 3, "0.1"},
470     {0.09999f, chars_format::general, 4, "0.09999"},
471     {0.09999f, chars_format::general, 5, "0.09999"},
472     {0.09999f, chars_format::general, 6, "0.09999"},
473 
474     {0.0999f, chars_format::general, 1, "0.1"},
475     {0.0999f, chars_format::general, 2, "0.1"},
476     {0.0999f, chars_format::general, 3, "0.0999"},
477     {0.0999f, chars_format::general, 4, "0.0999"},
478     {0.0999f, chars_format::general, 5, "0.0999"},
479     {0.0999f, chars_format::general, 6, "0.0999"},
480 
481     {0.099f, chars_format::general, 1, "0.1"},
482     {0.099f, chars_format::general, 2, "0.099"},
483     {0.099f, chars_format::general, 3, "0.099"},
484     {0.099f, chars_format::general, 4, "0.099"},
485     {0.099f, chars_format::general, 5, "0.099"},
486     {0.099f, chars_format::general, 6, "0.099"},
487 
488     {0.09f, chars_format::general, 1, "0.09"},
489     {0.09f, chars_format::general, 2, "0.09"},
490     {0.09f, chars_format::general, 3, "0.09"},
491     {0.09f, chars_format::general, 4, "0.09"},
492     {0.09f, chars_format::general, 5, "0.09"},
493     {0.09f, chars_format::general, 6, "0.09"},
494 
495     {0.00999999f, chars_format::general, 1, "0.01"},
496     {0.00999999f, chars_format::general, 2, "0.01"},
497     {0.00999999f, chars_format::general, 3, "0.01"},
498     {0.00999999f, chars_format::general, 4, "0.01"},
499     {0.00999999f, chars_format::general, 5, "0.01"},
500     {0.00999999f, chars_format::general, 6, "0.00999999"},
501 
502     {0.0099999f, chars_format::general, 1, "0.01"},
503     {0.0099999f, chars_format::general, 2, "0.01"},
504     {0.0099999f, chars_format::general, 3, "0.01"},
505     {0.0099999f, chars_format::general, 4, "0.01"},
506     {0.0099999f, chars_format::general, 5, "0.0099999"},
507     {0.0099999f, chars_format::general, 6, "0.0099999"},
508 
509     {0.009999f, chars_format::general, 1, "0.01"},
510     {0.009999f, chars_format::general, 2, "0.01"},
511     {0.009999f, chars_format::general, 3, "0.01"},
512     {0.009999f, chars_format::general, 4, "0.009999"},
513     {0.009999f, chars_format::general, 5, "0.009999"},
514     {0.009999f, chars_format::general, 6, "0.009999"},
515 
516     {0.00999f, chars_format::general, 1, "0.01"},
517     {0.00999f, chars_format::general, 2, "0.01"},
518     {0.00999f, chars_format::general, 3, "0.00999"},
519     {0.00999f, chars_format::general, 4, "0.00999"},
520     {0.00999f, chars_format::general, 5, "0.00999"},
521     {0.00999f, chars_format::general, 6, "0.00999"},
522 
523     {0.0099f, chars_format::general, 1, "0.01"},
524     {0.0099f, chars_format::general, 2, "0.0099"},
525     {0.0099f, chars_format::general, 3, "0.0099"},
526     {0.0099f, chars_format::general, 4, "0.0099"},
527     {0.0099f, chars_format::general, 5, "0.0099"},
528     {0.0099f, chars_format::general, 6, "0.0099"},
529 
530     {0.009f, chars_format::general, 1, "0.009"},
531     {0.009f, chars_format::general, 2, "0.009"},
532     {0.009f, chars_format::general, 3, "0.009"},
533     {0.009f, chars_format::general, 4, "0.009"},
534     {0.009f, chars_format::general, 5, "0.009"},
535     {0.009f, chars_format::general, 6, "0.009"},
536 
537     {0.000999999f, chars_format::general, 1, "0.001"},
538     {0.000999999f, chars_format::general, 2, "0.001"},
539     {0.000999999f, chars_format::general, 3, "0.001"},
540     {0.000999999f, chars_format::general, 4, "0.001"},
541     {0.000999999f, chars_format::general, 5, "0.001"},
542     {0.000999999f, chars_format::general, 6, "0.000999999"},
543 
544     {0.00099999f, chars_format::general, 1, "0.001"},
545     {0.00099999f, chars_format::general, 2, "0.001"},
546     {0.00099999f, chars_format::general, 3, "0.001"},
547     {0.00099999f, chars_format::general, 4, "0.001"},
548     {0.00099999f, chars_format::general, 5, "0.00099999"},
549     {0.00099999f, chars_format::general, 6, "0.00099999"},
550 
551     {0.0009999f, chars_format::general, 1, "0.001"},
552     {0.0009999f, chars_format::general, 2, "0.001"},
553     {0.0009999f, chars_format::general, 3, "0.001"},
554     {0.0009999f, chars_format::general, 4, "0.0009999"},
555     {0.0009999f, chars_format::general, 5, "0.0009999"},
556     {0.0009999f, chars_format::general, 6, "0.0009999"},
557 
558     {0.000999f, chars_format::general, 1, "0.001"},
559     {0.000999f, chars_format::general, 2, "0.001"},
560     {0.000999f, chars_format::general, 3, "0.000999"},
561     {0.000999f, chars_format::general, 4, "0.000999"},
562     {0.000999f, chars_format::general, 5, "0.000999"},
563     {0.000999f, chars_format::general, 6, "0.000999"},
564 
565     {0.00099f, chars_format::general, 1, "0.001"},
566     {0.00099f, chars_format::general, 2, "0.00099"},
567     {0.00099f, chars_format::general, 3, "0.00099"},
568     {0.00099f, chars_format::general, 4, "0.00099"},
569     {0.00099f, chars_format::general, 5, "0.00099"},
570     {0.00099f, chars_format::general, 6, "0.00099"},
571 
572     {0.0009f, chars_format::general, 1, "0.0009"},
573     {0.0009f, chars_format::general, 2, "0.0009"},
574     {0.0009f, chars_format::general, 3, "0.0009"},
575     {0.0009f, chars_format::general, 4, "0.0009"},
576     {0.0009f, chars_format::general, 5, "0.0009"},
577     {0.0009f, chars_format::general, 6, "0.0009"},
578 
579     // Having a scientific exponent X == -5 triggers scientific notation.
580     // If rounding adjusts this to X == -4, then fixed notation will be selected.
581     {0.0000999999f, chars_format::general, 1, "0.0001"},
582     {0.0000999999f, chars_format::general, 2, "0.0001"},
583     {0.0000999999f, chars_format::general, 3, "0.0001"},
584     {0.0000999999f, chars_format::general, 4, "0.0001"},
585     {0.0000999999f, chars_format::general, 5, "0.0001"},
586     {0.0000999999f, chars_format::general, 6, "9.99999e-05"},
587 
588     {0.000099999f, chars_format::general, 1, "0.0001"},
589     {0.000099999f, chars_format::general, 2, "0.0001"},
590     {0.000099999f, chars_format::general, 3, "0.0001"},
591     {0.000099999f, chars_format::general, 4, "0.0001"},
592     {0.000099999f, chars_format::general, 5, "9.9999e-05"},
593     {0.000099999f, chars_format::general, 6, "9.9999e-05"},
594 
595     {0.00009999f, chars_format::general, 1, "0.0001"},
596     {0.00009999f, chars_format::general, 2, "0.0001"},
597     {0.00009999f, chars_format::general, 3, "0.0001"},
598     {0.00009999f, chars_format::general, 4, "9.999e-05"},
599     {0.00009999f, chars_format::general, 5, "9.999e-05"},
600     {0.00009999f, chars_format::general, 6, "9.999e-05"},
601 
602     {0.0000999f, chars_format::general, 1, "0.0001"},
603     {0.0000999f, chars_format::general, 2, "0.0001"},
604     {0.0000999f, chars_format::general, 3, "9.99e-05"},
605     {0.0000999f, chars_format::general, 4, "9.99e-05"},
606     {0.0000999f, chars_format::general, 5, "9.99e-05"},
607     {0.0000999f, chars_format::general, 6, "9.99e-05"},
608 
609     {0.000099f, chars_format::general, 1, "0.0001"},
610     {0.000099f, chars_format::general, 2, "9.9e-05"},
611     {0.000099f, chars_format::general, 3, "9.9e-05"},
612     {0.000099f, chars_format::general, 4, "9.9e-05"},
613     {0.000099f, chars_format::general, 5, "9.9e-05"},
614     {0.000099f, chars_format::general, 6, "9.9e-05"},
615 
616     {0.00009f, chars_format::general, 1, "9e-05"},
617     {0.00009f, chars_format::general, 2, "9e-05"},
618     {0.00009f, chars_format::general, 3, "9e-05"},
619     {0.00009f, chars_format::general, 4, "9e-05"},
620     {0.00009f, chars_format::general, 5, "9e-05"},
621     {0.00009f, chars_format::general, 6, "9e-05"},
622 
623     // Rounding test cases without exponent-adjusting behavior.
624     {2999.999f, chars_format::general, 1, "3e+03"},
625     {2999.999f, chars_format::general, 2, "3e+03"},
626     {2999.999f, chars_format::general, 3, "3e+03"},
627     {2999.999f, chars_format::general, 4, "3000"},
628     {2999.999f, chars_format::general, 5, "3000"},
629     {2999.999f, chars_format::general, 6, "3000"},
630 
631     {2999.99f, chars_format::general, 1, "3e+03"},
632     {2999.99f, chars_format::general, 2, "3e+03"},
633     {2999.99f, chars_format::general, 3, "3e+03"},
634     {2999.99f, chars_format::general, 4, "3000"},
635     {2999.99f, chars_format::general, 5, "3000"},
636     {2999.99f, chars_format::general, 6, "2999.99"},
637 
638     {2999.9f, chars_format::general, 1, "3e+03"},
639     {2999.9f, chars_format::general, 2, "3e+03"},
640     {2999.9f, chars_format::general, 3, "3e+03"},
641     {2999.9f, chars_format::general, 4, "3000"},
642     {2999.9f, chars_format::general, 5, "2999.9"},
643     {2999.9f, chars_format::general, 6, "2999.9"},
644 
645     {2999.0f, chars_format::general, 1, "3e+03"},
646     {2999.0f, chars_format::general, 2, "3e+03"},
647     {2999.0f, chars_format::general, 3, "3e+03"},
648     {2999.0f, chars_format::general, 4, "2999"},
649     {2999.0f, chars_format::general, 5, "2999"},
650     {2999.0f, chars_format::general, 6, "2999"},
651 
652     {299.999f, chars_format::general, 1, "3e+02"},
653     {299.999f, chars_format::general, 2, "3e+02"},
654     {299.999f, chars_format::general, 3, "300"},
655     {299.999f, chars_format::general, 4, "300"},
656     {299.999f, chars_format::general, 5, "300"},
657     {299.999f, chars_format::general, 6, "299.999"},
658 
659     {299.99f, chars_format::general, 1, "3e+02"},
660     {299.99f, chars_format::general, 2, "3e+02"},
661     {299.99f, chars_format::general, 3, "300"},
662     {299.99f, chars_format::general, 4, "300"},
663     {299.99f, chars_format::general, 5, "299.99"},
664     {299.99f, chars_format::general, 6, "299.99"},
665 
666     {299.9f, chars_format::general, 1, "3e+02"},
667     {299.9f, chars_format::general, 2, "3e+02"},
668     {299.9f, chars_format::general, 3, "300"},
669     {299.9f, chars_format::general, 4, "299.9"},
670     {299.9f, chars_format::general, 5, "299.9"},
671     {299.9f, chars_format::general, 6, "299.9"},
672 
673     {299.0f, chars_format::general, 1, "3e+02"},
674     {299.0f, chars_format::general, 2, "3e+02"},
675     {299.0f, chars_format::general, 3, "299"},
676     {299.0f, chars_format::general, 4, "299"},
677     {299.0f, chars_format::general, 5, "299"},
678     {299.0f, chars_format::general, 6, "299"},
679 
680     {29.999f, chars_format::general, 1, "3e+01"},
681     {29.999f, chars_format::general, 2, "30"},
682     {29.999f, chars_format::general, 3, "30"},
683     {29.999f, chars_format::general, 4, "30"},
684     {29.999f, chars_format::general, 5, "29.999"},
685     {29.999f, chars_format::general, 6, "29.999"},
686 
687     {29.99f, chars_format::general, 1, "3e+01"},
688     {29.99f, chars_format::general, 2, "30"},
689     {29.99f, chars_format::general, 3, "30"},
690     {29.99f, chars_format::general, 4, "29.99"},
691     {29.99f, chars_format::general, 5, "29.99"},
692     {29.99f, chars_format::general, 6, "29.99"},
693 
694     {29.9f, chars_format::general, 1, "3e+01"},
695     {29.9f, chars_format::general, 2, "30"},
696     {29.9f, chars_format::general, 3, "29.9"},
697     {29.9f, chars_format::general, 4, "29.9"},
698     {29.9f, chars_format::general, 5, "29.9"},
699     {29.9f, chars_format::general, 6, "29.9"},
700 
701     {29.0f, chars_format::general, 1, "3e+01"},
702     {29.0f, chars_format::general, 2, "29"},
703     {29.0f, chars_format::general, 3, "29"},
704     {29.0f, chars_format::general, 4, "29"},
705     {29.0f, chars_format::general, 5, "29"},
706     {29.0f, chars_format::general, 6, "29"},
707 
708     {2.999f, chars_format::general, 1, "3"},
709     {2.999f, chars_format::general, 2, "3"},
710     {2.999f, chars_format::general, 3, "3"},
711     {2.999f, chars_format::general, 4, "2.999"},
712     {2.999f, chars_format::general, 5, "2.999"},
713     {2.999f, chars_format::general, 6, "2.999"},
714 
715     {2.99f, chars_format::general, 1, "3"},
716     {2.99f, chars_format::general, 2, "3"},
717     {2.99f, chars_format::general, 3, "2.99"},
718     {2.99f, chars_format::general, 4, "2.99"},
719     {2.99f, chars_format::general, 5, "2.99"},
720     {2.99f, chars_format::general, 6, "2.99"},
721 
722     {2.9f, chars_format::general, 1, "3"},
723     {2.9f, chars_format::general, 2, "2.9"},
724     {2.9f, chars_format::general, 3, "2.9"},
725     {2.9f, chars_format::general, 4, "2.9"},
726     {2.9f, chars_format::general, 5, "2.9"},
727     {2.9f, chars_format::general, 6, "2.9"},
728 
729     {2.0f, chars_format::general, 1, "2"},
730     {2.0f, chars_format::general, 2, "2"},
731     {2.0f, chars_format::general, 3, "2"},
732     {2.0f, chars_format::general, 4, "2"},
733     {2.0f, chars_format::general, 5, "2"},
734     {2.0f, chars_format::general, 6, "2"},
735 
736     {0.2999f, chars_format::general, 1, "0.3"},
737     {0.2999f, chars_format::general, 2, "0.3"},
738     {0.2999f, chars_format::general, 3, "0.3"},
739     {0.2999f, chars_format::general, 4, "0.2999"},
740     {0.2999f, chars_format::general, 5, "0.2999"},
741     {0.2999f, chars_format::general, 6, "0.2999"},
742 
743     {0.299f, chars_format::general, 1, "0.3"},
744     {0.299f, chars_format::general, 2, "0.3"},
745     {0.299f, chars_format::general, 3, "0.299"},
746     {0.299f, chars_format::general, 4, "0.299"},
747     {0.299f, chars_format::general, 5, "0.299"},
748     {0.299f, chars_format::general, 6, "0.299"},
749 
750     {0.29f, chars_format::general, 1, "0.3"},
751     {0.29f, chars_format::general, 2, "0.29"},
752     {0.29f, chars_format::general, 3, "0.29"},
753     {0.29f, chars_format::general, 4, "0.29"},
754     {0.29f, chars_format::general, 5, "0.29"},
755     {0.29f, chars_format::general, 6, "0.29"},
756 
757     {0.2f, chars_format::general, 1, "0.2"},
758     {0.2f, chars_format::general, 2, "0.2"},
759     {0.2f, chars_format::general, 3, "0.2"},
760     {0.2f, chars_format::general, 4, "0.2"},
761     {0.2f, chars_format::general, 5, "0.2"},
762     {0.2f, chars_format::general, 6, "0.2"},
763 
764     {0.02999f, chars_format::general, 1, "0.03"},
765     {0.02999f, chars_format::general, 2, "0.03"},
766     {0.02999f, chars_format::general, 3, "0.03"},
767     {0.02999f, chars_format::general, 4, "0.02999"},
768     {0.02999f, chars_format::general, 5, "0.02999"},
769     {0.02999f, chars_format::general, 6, "0.02999"},
770 
771     {0.0299f, chars_format::general, 1, "0.03"},
772     {0.0299f, chars_format::general, 2, "0.03"},
773     {0.0299f, chars_format::general, 3, "0.0299"},
774     {0.0299f, chars_format::general, 4, "0.0299"},
775     {0.0299f, chars_format::general, 5, "0.0299"},
776     {0.0299f, chars_format::general, 6, "0.0299"},
777 
778     {0.029f, chars_format::general, 1, "0.03"},
779     {0.029f, chars_format::general, 2, "0.029"},
780     {0.029f, chars_format::general, 3, "0.029"},
781     {0.029f, chars_format::general, 4, "0.029"},
782     {0.029f, chars_format::general, 5, "0.029"},
783     {0.029f, chars_format::general, 6, "0.029"},
784 
785     {0.02f, chars_format::general, 1, "0.02"},
786     {0.02f, chars_format::general, 2, "0.02"},
787     {0.02f, chars_format::general, 3, "0.02"},
788     {0.02f, chars_format::general, 4, "0.02"},
789     {0.02f, chars_format::general, 5, "0.02"},
790     {0.02f, chars_format::general, 6, "0.02"},
791 
792     {0.002999f, chars_format::general, 1, "0.003"},
793     {0.002999f, chars_format::general, 2, "0.003"},
794     {0.002999f, chars_format::general, 3, "0.003"},
795     {0.002999f, chars_format::general, 4, "0.002999"},
796     {0.002999f, chars_format::general, 5, "0.002999"},
797     {0.002999f, chars_format::general, 6, "0.002999"},
798 
799     {0.00299f, chars_format::general, 1, "0.003"},
800     {0.00299f, chars_format::general, 2, "0.003"},
801     {0.00299f, chars_format::general, 3, "0.00299"},
802     {0.00299f, chars_format::general, 4, "0.00299"},
803     {0.00299f, chars_format::general, 5, "0.00299"},
804     {0.00299f, chars_format::general, 6, "0.00299"},
805 
806     {0.0029f, chars_format::general, 1, "0.003"},
807     {0.0029f, chars_format::general, 2, "0.0029"},
808     {0.0029f, chars_format::general, 3, "0.0029"},
809     {0.0029f, chars_format::general, 4, "0.0029"},
810     {0.0029f, chars_format::general, 5, "0.0029"},
811     {0.0029f, chars_format::general, 6, "0.0029"},
812 
813     {0.002f, chars_format::general, 1, "0.002"},
814     {0.002f, chars_format::general, 2, "0.002"},
815     {0.002f, chars_format::general, 3, "0.002"},
816     {0.002f, chars_format::general, 4, "0.002"},
817     {0.002f, chars_format::general, 5, "0.002"},
818     {0.002f, chars_format::general, 6, "0.002"},
819 
820     {0.0002999f, chars_format::general, 1, "0.0003"},
821     {0.0002999f, chars_format::general, 2, "0.0003"},
822     {0.0002999f, chars_format::general, 3, "0.0003"},
823     {0.0002999f, chars_format::general, 4, "0.0002999"},
824     {0.0002999f, chars_format::general, 5, "0.0002999"},
825     {0.0002999f, chars_format::general, 6, "0.0002999"},
826 
827     {0.000299f, chars_format::general, 1, "0.0003"},
828     {0.000299f, chars_format::general, 2, "0.0003"},
829     {0.000299f, chars_format::general, 3, "0.000299"},
830     {0.000299f, chars_format::general, 4, "0.000299"},
831     {0.000299f, chars_format::general, 5, "0.000299"},
832     {0.000299f, chars_format::general, 6, "0.000299"},
833 
834     {0.00029f, chars_format::general, 1, "0.0003"},
835     {0.00029f, chars_format::general, 2, "0.00029"},
836     {0.00029f, chars_format::general, 3, "0.00029"},
837     {0.00029f, chars_format::general, 4, "0.00029"},
838     {0.00029f, chars_format::general, 5, "0.00029"},
839     {0.00029f, chars_format::general, 6, "0.00029"},
840 
841     {0.0002f, chars_format::general, 1, "0.0002"},
842     {0.0002f, chars_format::general, 2, "0.0002"},
843     {0.0002f, chars_format::general, 3, "0.0002"},
844     {0.0002f, chars_format::general, 4, "0.0002"},
845     {0.0002f, chars_format::general, 5, "0.0002"},
846     {0.0002f, chars_format::general, 6, "0.0002"},
847 
848     {0.00002999f, chars_format::general, 1, "3e-05"},
849     {0.00002999f, chars_format::general, 2, "3e-05"},
850     {0.00002999f, chars_format::general, 3, "3e-05"},
851     {0.00002999f, chars_format::general, 4, "2.999e-05"},
852     {0.00002999f, chars_format::general, 5, "2.999e-05"},
853     {0.00002999f, chars_format::general, 6, "2.999e-05"},
854 
855     {0.0000299f, chars_format::general, 1, "3e-05"},
856     {0.0000299f, chars_format::general, 2, "3e-05"},
857     {0.0000299f, chars_format::general, 3, "2.99e-05"},
858     {0.0000299f, chars_format::general, 4, "2.99e-05"},
859     {0.0000299f, chars_format::general, 5, "2.99e-05"},
860     {0.0000299f, chars_format::general, 6, "2.99e-05"},
861 
862     {0.000029f, chars_format::general, 1, "3e-05"},
863     {0.000029f, chars_format::general, 2, "2.9e-05"},
864     {0.000029f, chars_format::general, 3, "2.9e-05"},
865     {0.000029f, chars_format::general, 4, "2.9e-05"},
866     {0.000029f, chars_format::general, 5, "2.9e-05"},
867     {0.000029f, chars_format::general, 6, "2.9e-05"},
868 
869     {0.00002f, chars_format::general, 1, "2e-05"},
870     {0.00002f, chars_format::general, 2, "2e-05"},
871     {0.00002f, chars_format::general, 3, "2e-05"},
872     {0.00002f, chars_format::general, 4, "2e-05"},
873     {0.00002f, chars_format::general, 5, "2e-05"},
874     {0.00002f, chars_format::general, 6, "2e-05"},
875 
876     // Test the transitions between values of the scientific exponent X.
877     // For brevity, we avoid testing all possible combinations of P and X. Instead, we test:
878     // * All values of P where some X can be affected by rounding. (For float, this is [1, 7].)
879     // * P == 25, which is arbitrary.
880     // * P == numeric_limits::max_exponent10 + 1. This selects fixed notation for numeric_limits::max(),
881     //   so it's the largest interesting value of P.
882     // * Finally, we test the transitions around X == P - 1, ensuring that we can recognize every value of X.
883     {0x1.8e7578p-14f, chars_format::general, 1, "9e-05"},
884     {0x1.8e757ap-14f, chars_format::general, 1, "0.0001"},
885     {0x1.f212d6p-11f, chars_format::general, 1, "0.0009"},
886     {0x1.f212d8p-11f, chars_format::general, 1, "0.001"},
887     {0x1.374bc6p-7f, chars_format::general, 1, "0.009"},
888     {0x1.374bc8p-7f, chars_format::general, 1, "0.01"},
889     {0x1.851eb8p-4f, chars_format::general, 1, "0.09"},
890     {0x1.851ebap-4f, chars_format::general, 1, "0.1"},
891     {0x1.e66666p-1f, chars_format::general, 1, "0.9"},
892     {0x1.e66668p-1f, chars_format::general, 1, "1"},
893     {0x1.2ffffep+3f, chars_format::general, 1, "9"},
894     {0x1.300000p+3f, chars_format::general, 1, "1e+01"},
895     {0x1.a1554ep-14f, chars_format::general, 2, "9.9e-05"},
896     {0x1.a15550p-14f, chars_format::general, 2, "0.0001"},
897     {0x1.04d550p-10f, chars_format::general, 2, "0.00099"},
898     {0x1.04d552p-10f, chars_format::general, 2, "0.001"},
899     {0x1.460aa6p-7f, chars_format::general, 2, "0.0099"},
900     {0x1.460aa8p-7f, chars_format::general, 2, "0.01"},
901     {0x1.978d4ep-4f, chars_format::general, 2, "0.099"},
902     {0x1.978d50p-4f, chars_format::general, 2, "0.1"},
903     {0x1.fd70a2p-1f, chars_format::general, 2, "0.99"},
904     {0x1.fd70a4p-1f, chars_format::general, 2, "1"},
905     {0x1.3e6666p+3f, chars_format::general, 2, "9.9"},
906     {0x1.3e6668p+3f, chars_format::general, 2, "10"},
907     {0x1.8dfffep+6f, chars_format::general, 2, "99"},
908     {0x1.8e0000p+6f, chars_format::general, 2, "1e+02"},
909     {0x1.a3387ep-14f, chars_format::general, 3, "9.99e-05"},
910     {0x1.a33880p-14f, chars_format::general, 3, "0.0001"},
911     {0x1.06034ep-10f, chars_format::general, 3, "0.000999"},
912     {0x1.060350p-10f, chars_format::general, 3, "0.001"},
913     {0x1.478422p-7f, chars_format::general, 3, "0.00999"},
914     {0x1.478424p-7f, chars_format::general, 3, "0.01"},
915     {0x1.99652ap-4f, chars_format::general, 3, "0.0999"},
916     {0x1.99652cp-4f, chars_format::general, 3, "0.1"},
917     {0x1.ffbe76p-1f, chars_format::general, 3, "0.999"},
918     {0x1.ffbe78p-1f, chars_format::general, 3, "1"},
919     {0x1.3fd70ap+3f, chars_format::general, 3, "9.99"},
920     {0x1.3fd70cp+3f, chars_format::general, 3, "10"},
921     {0x1.8fccccp+6f, chars_format::general, 3, "99.9"},
922     {0x1.8fcccep+6f, chars_format::general, 3, "100"},
923     {0x1.f3bffep+9f, chars_format::general, 3, "999"},
924     {0x1.f3c000p+9f, chars_format::general, 3, "1e+03"},
925     {0x1.a368d0p-14f, chars_format::general, 4, "9.999e-05"},
926     {0x1.a368d2p-14f, chars_format::general, 4, "0.0001"},
927     {0x1.062182p-10f, chars_format::general, 4, "0.0009999"},
928     {0x1.062184p-10f, chars_format::general, 4, "0.001"},
929     {0x1.47a9e2p-7f, chars_format::general, 4, "0.009999"},
930     {0x1.47a9e4p-7f, chars_format::general, 4, "0.01"},
931     {0x1.99945ap-4f, chars_format::general, 4, "0.09999"},
932     {0x1.99945cp-4f, chars_format::general, 4, "0.1"},
933     {0x1.fff972p-1f, chars_format::general, 4, "0.9999"},
934     {0x1.fff974p-1f, chars_format::general, 4, "1"},
935     {0x1.3ffbe6p+3f, chars_format::general, 4, "9.999"},
936     {0x1.3ffbe8p+3f, chars_format::general, 4, "10"},
937     {0x1.8ffae0p+6f, chars_format::general, 4, "99.99"},
938     {0x1.8ffae2p+6f, chars_format::general, 4, "100"},
939     {0x1.f3f998p+9f, chars_format::general, 4, "999.9"},
940     {0x1.f3f99ap+9f, chars_format::general, 4, "1000"},
941     {0x1.387bfep+13f, chars_format::general, 4, "9999"},
942     {0x1.387c00p+13f, chars_format::general, 4, "1e+04"},
943     {0x1.a36da4p-14f, chars_format::general, 5, "9.9999e-05"},
944     {0x1.a36da6p-14f, chars_format::general, 5, "0.0001"},
945     {0x1.062486p-10f, chars_format::general, 5, "0.00099999"},
946     {0x1.062488p-10f, chars_format::general, 5, "0.001"},
947     {0x1.47ada8p-7f, chars_format::general, 5, "0.0099999"},
948     {0x1.47adaap-7f, chars_format::general, 5, "0.01"},
949     {0x1.999912p-4f, chars_format::general, 5, "0.099999"},
950     {0x1.999914p-4f, chars_format::general, 5, "0.1"},
951     {0x1.ffff58p-1f, chars_format::general, 5, "0.99999"},
952     {0x1.ffff5ap-1f, chars_format::general, 5, "1"},
953     {0x1.3fff96p+3f, chars_format::general, 5, "9.9999"},
954     {0x1.3fff98p+3f, chars_format::general, 5, "10"},
955     {0x1.8fff7cp+6f, chars_format::general, 5, "99.999"},
956     {0x1.8fff7ep+6f, chars_format::general, 5, "100"},
957     {0x1.f3ff5cp+9f, chars_format::general, 5, "999.99"},
958     {0x1.f3ff5ep+9f, chars_format::general, 5, "1000"},
959     {0x1.387f98p+13f, chars_format::general, 5, "9999.9"},
960     {0x1.387f9ap+13f, chars_format::general, 5, "10000"},
961     {0x1.869f7ep+16f, chars_format::general, 5, "99999"},
962     {0x1.869f80p+16f, chars_format::general, 5, "1e+05"},
963     {0x1.a36e20p-14f, chars_format::general, 6, "9.99999e-05"},
964     {0x1.a36e22p-14f, chars_format::general, 6, "0.0001"},
965     {0x1.0624d4p-10f, chars_format::general, 6, "0.000999999"},
966     {0x1.0624d6p-10f, chars_format::general, 6, "0.001"},
967     {0x1.47ae08p-7f, chars_format::general, 6, "0.00999999"},
968     {0x1.47ae0ap-7f, chars_format::general, 6, "0.01"},
969     {0x1.99998cp-4f, chars_format::general, 6, "0.0999999"},
970     {0x1.99998ep-4f, chars_format::general, 6, "0.1"},
971     {0x1.ffffeep-1f, chars_format::general, 6, "0.999999"},
972     {0x1.fffff0p-1f, chars_format::general, 6, "1"},
973     {0x1.3ffff4p+3f, chars_format::general, 6, "9.99999"},
974     {0x1.3ffff6p+3f, chars_format::general, 6, "10"},
975     {0x1.8ffff2p+6f, chars_format::general, 6, "99.9999"},
976     {0x1.8ffff4p+6f, chars_format::general, 6, "100"},
977     {0x1.f3ffeep+9f, chars_format::general, 6, "999.999"},
978     {0x1.f3fff0p+9f, chars_format::general, 6, "1000"},
979     {0x1.387ff4p+13f, chars_format::general, 6, "9999.99"},
980     {0x1.387ff6p+13f, chars_format::general, 6, "10000"},
981     {0x1.869ff2p+16f, chars_format::general, 6, "99999.9"},
982     {0x1.869ff4p+16f, chars_format::general, 6, "100000"},
983     {0x1.e847eep+19f, chars_format::general, 6, "999999"},
984     {0x1.e847f0p+19f, chars_format::general, 6, "1e+06"},
985     {0x1.a36e2cp-14f, chars_format::general, 7, "9.999999e-05"},
986     {0x1.a36e2ep-14f, chars_format::general, 7, "0.0001"},
987     {0x1.0624dcp-10f, chars_format::general, 7, "0.0009999999"},
988     {0x1.0624dep-10f, chars_format::general, 7, "0.001"},
989     {0x1.47ae12p-7f, chars_format::general, 7, "0.009999999"},
990     {0x1.47ae14p-7f, chars_format::general, 7, "0.01"},
991     {0x1.999998p-4f, chars_format::general, 7, "0.09999999"},
992     {0x1.99999ap-4f, chars_format::general, 7, "0.1"},
993     {0x1.fffffep-1f, chars_format::general, 7, "0.9999999"},
994     {0x1.000000p+0f, chars_format::general, 7, "1"},
995     {0x1.3ffffep+3f, chars_format::general, 7, "9.999999"},
996     {0x1.400000p+3f, chars_format::general, 7, "10"},
997     {0x1.8ffffep+6f, chars_format::general, 7, "99.99999"},
998     {0x1.900000p+6f, chars_format::general, 7, "100"},
999     {0x1.f3fffep+9f, chars_format::general, 7, "999.9999"},
1000     {0x1.f40000p+9f, chars_format::general, 7, "1000"},
1001     {0x1.387ffep+13f, chars_format::general, 7, "9999.999"},
1002     {0x1.388000p+13f, chars_format::general, 7, "10000"},
1003     {0x1.869ffep+16f, chars_format::general, 7, "99999.99"},
1004     {0x1.86a000p+16f, chars_format::general, 7, "100000"},
1005     {0x1.e847fep+19f, chars_format::general, 7, "999999.9"},
1006     {0x1.e84800p+19f, chars_format::general, 7, "1000000"},
1007     {0x1.312cfep+23f, chars_format::general, 7, "9999999"},
1008     {0x1.312d00p+23f, chars_format::general, 7, "1e+07"},
1009     {0x1.7d783ep+26f, chars_format::general, 8, "99999992"},
1010     {0x1.7d7840p+26f, chars_format::general, 8, "1e+08"},
1011     {0x1.dcd64ep+29f, chars_format::general, 9, "999999936"},
1012     {0x1.dcd650p+29f, chars_format::general, 9, "1e+09"},
1013     {0x1.2a05f0p+33f, chars_format::general, 10, "9999998976"},
1014     {0x1.2a05f2p+33f, chars_format::general, 10, "1e+10"},
1015     {0x1.74876ep+36f, chars_format::general, 11, "99999997952"},
1016     {0x1.748770p+36f, chars_format::general, 11, "1.0000000614e+11"},
1017     {0x1.d1a94ap+39f, chars_format::general, 12, "999999995904"},
1018     {0x1.d1a94cp+39f, chars_format::general, 12, "1.00000006144e+12"},
1019     {0x1.2309cep+43f, chars_format::general, 13, "9999999827968"},
1020     {0x1.2309d0p+43f, chars_format::general, 13, "1.000000087654e+13"},
1021     {0x1.6bcc40p+46f, chars_format::general, 14, "99999991988224"},
1022     {0x1.6bcc42p+46f, chars_format::general, 14, "1.0000000037683e+14"},
1023     {0x1.c6bf52p+49f, chars_format::general, 15, "999999986991104"},
1024     {0x1.c6bf54p+49f, chars_format::general, 15, "1.00000005409997e+15"},
1025     {0x1.1c3792p+53f, chars_format::general, 16, "9999999198822400"},
1026     {0x1.1c3794p+53f, chars_format::general, 16, "1.000000027256422e+16"},
1027     {0x1.634578p+56f, chars_format::general, 17, "99999998430674944"},
1028     {0x1.63457ap+56f, chars_format::general, 17, "1.0000000702060954e+17"},
1029     {0x1.bc16d6p+59f, chars_format::general, 18, "999999984306749440"},
1030     {0x1.bc16d8p+59f, chars_format::general, 18, "1.00000005302622618e+18"},
1031     {0x1.158e46p+63f, chars_format::general, 19, "9999999980506447872"},
1032     {0x1.158e48p+63f, chars_format::general, 19, "1.000000108001807565e+19"},
1033     {0x1.5af1d6p+66f, chars_format::general, 20, "99999993207994712064"},
1034     {0x1.5af1d8p+66f, chars_format::general, 20, "1.0000000200408773427e+20"},
1035     {0x1.b1ae4cp+69f, chars_format::general, 21, "999999949672133165056"},
1036     {0x1.b1ae4ep+69f, chars_format::general, 21, "1.00000002004087734272e+21"},
1037     {0x1.0f0cf0p+73f, chars_format::general, 22, "9999999778196308361216"},
1038     {0x1.0f0cf2p+73f, chars_format::general, 22, "1.000000090409621520384e+22"},
1039     {0x1.52d02cp+76f, chars_format::general, 23, "99999997781963083612160"},
1040     {0x1.52d02ep+76f, chars_format::general, 23, "1.0000000678916233835315e+23"},
1041     {0x1.a78436p+79f, chars_format::general, 24, "999999941790833817157632"},
1042     {0x1.a78438p+79f, chars_format::general, 24, "1.00000001384842785508557e+24"},
1043     {0x1.a36e2ep-14f, chars_format::general, 25, "9.999999747378751635551453e-05"},
1044     {0x1.a36e30p-14f, chars_format::general, 25, "0.0001000000047497451305389404"},
1045     {0x1.0624dcp-10f, chars_format::general, 25, "0.0009999999310821294784545898"},
1046     {0x1.0624dep-10f, chars_format::general, 25, "0.001000000047497451305389404"},
1047     {0x1.47ae14p-7f, chars_format::general, 25, "0.009999999776482582092285156"},
1048     {0x1.47ae16p-7f, chars_format::general, 25, "0.01000000070780515670776367"},
1049     {0x1.999998p-4f, chars_format::general, 25, "0.0999999940395355224609375"},
1050     {0x1.99999ap-4f, chars_format::general, 25, "0.1000000014901161193847656"},
1051     {0x1.fffffep-1f, chars_format::general, 25, "0.999999940395355224609375"},
1052     {0x1.000000p+0f, chars_format::general, 25, "1"},
1053     {0x1.3ffffep+3f, chars_format::general, 25, "9.99999904632568359375"},
1054     {0x1.400000p+3f, chars_format::general, 25, "10"},
1055     {0x1.8ffffep+6f, chars_format::general, 25, "99.99999237060546875"},
1056     {0x1.900000p+6f, chars_format::general, 25, "100"},
1057     {0x1.f3fffep+9f, chars_format::general, 25, "999.99993896484375"},
1058     {0x1.f40000p+9f, chars_format::general, 25, "1000"},
1059     {0x1.387ffep+13f, chars_format::general, 25, "9999.9990234375"},
1060     {0x1.388000p+13f, chars_format::general, 25, "10000"},
1061     {0x1.869ffep+16f, chars_format::general, 25, "99999.9921875"},
1062     {0x1.86a000p+16f, chars_format::general, 25, "100000"},
1063     {0x1.e847fep+19f, chars_format::general, 25, "999999.9375"},
1064     {0x1.e84800p+19f, chars_format::general, 25, "1000000"},
1065     {0x1.312cfep+23f, chars_format::general, 25, "9999999"},
1066     {0x1.312d00p+23f, chars_format::general, 25, "10000000"},
1067     {0x1.7d783ep+26f, chars_format::general, 25, "99999992"},
1068     {0x1.7d7840p+26f, chars_format::general, 25, "100000000"},
1069     {0x1.dcd64ep+29f, chars_format::general, 25, "999999936"},
1070     {0x1.dcd650p+29f, chars_format::general, 25, "1000000000"},
1071     {0x1.2a05f0p+33f, chars_format::general, 25, "9999998976"},
1072     {0x1.2a05f2p+33f, chars_format::general, 25, "10000000000"},
1073     {0x1.74876ep+36f, chars_format::general, 25, "99999997952"},
1074     {0x1.748770p+36f, chars_format::general, 25, "100000006144"},
1075     {0x1.d1a94ap+39f, chars_format::general, 25, "999999995904"},
1076     {0x1.d1a94cp+39f, chars_format::general, 25, "1000000061440"},
1077     {0x1.2309cep+43f, chars_format::general, 25, "9999999827968"},
1078     {0x1.2309d0p+43f, chars_format::general, 25, "10000000876544"},
1079     {0x1.6bcc40p+46f, chars_format::general, 25, "99999991988224"},
1080     {0x1.6bcc42p+46f, chars_format::general, 25, "100000000376832"},
1081     {0x1.c6bf52p+49f, chars_format::general, 25, "999999986991104"},
1082     {0x1.c6bf54p+49f, chars_format::general, 25, "1000000054099968"},
1083     {0x1.1c3792p+53f, chars_format::general, 25, "9999999198822400"},
1084     {0x1.1c3794p+53f, chars_format::general, 25, "10000000272564224"},
1085     {0x1.634578p+56f, chars_format::general, 25, "99999998430674944"},
1086     {0x1.63457ap+56f, chars_format::general, 25, "100000007020609536"},
1087     {0x1.bc16d6p+59f, chars_format::general, 25, "999999984306749440"},
1088     {0x1.bc16d8p+59f, chars_format::general, 25, "1000000053026226176"},
1089     {0x1.158e46p+63f, chars_format::general, 25, "9999999980506447872"},
1090     {0x1.158e48p+63f, chars_format::general, 25, "10000001080018075648"},
1091     {0x1.5af1d6p+66f, chars_format::general, 25, "99999993207994712064"},
1092     {0x1.5af1d8p+66f, chars_format::general, 25, "100000002004087734272"},
1093     {0x1.b1ae4cp+69f, chars_format::general, 25, "999999949672133165056"},
1094     {0x1.b1ae4ep+69f, chars_format::general, 25, "1000000020040877342720"},
1095     {0x1.0f0cf0p+73f, chars_format::general, 25, "9999999778196308361216"},
1096     {0x1.0f0cf2p+73f, chars_format::general, 25, "10000000904096215203840"},
1097     {0x1.52d02cp+76f, chars_format::general, 25, "99999997781963083612160"},
1098     {0x1.52d02ep+76f, chars_format::general, 25, "100000006789162338353152"},
1099     {0x1.a78436p+79f, chars_format::general, 25, "999999941790833817157632"},
1100     {0x1.a78438p+79f, chars_format::general, 25, "1000000013848427855085568"},
1101     {0x1.08b2a2p+83f, chars_format::general, 25, "9999999562023526247432192"},
1102     {0x1.08b2a4p+83f, chars_format::general, 25, "1.000000071494503085427917e+25"},
1103     {0x1.4adf4ap+86f, chars_format::general, 26, "99999993314392253260627968"},
1104     {0x1.4adf4cp+86f, chars_format::general, 26, "1.0000000253776429011540378e+26"},
1105     {0x1.9d971ep+89f, chars_format::general, 27, "999999988484154753734934528"},
1106     {0x1.9d9720p+89f, chars_format::general, 27, "1.00000006227113104857314099e+27"},
1107     {0x1.027e72p+93f, chars_format::general, 28, "9999999442119689768320106496"},
1108     {0x1.027e74p+93f, chars_format::general, 28, "1.000000062271131048573140992e+28"},
1109     {0x1.431e0ep+96f, chars_format::general, 29, "99999992060013656248378458112"},
1110     {0x1.431e10p+96f, chars_format::general, 29, "1.000000015047466219876688855e+29"},
1111     {0x1.93e592p+99f, chars_format::general, 30, "999999939489602493962365435904"},
1112     {0x1.93e594p+99f, chars_format::general, 30, "1.00000001504746621987668885504e+30"},
1113     {0x1.f8def8p+102f, chars_format::general, 31, "9999999848243207295109594873856"},
1114     {0x1.f8defap+102f, chars_format::general, 31, "1.000000045270611710242418222694e+31"},
1115     {0x1.3b8b5ap+106f, chars_format::general, 32, "99999993646728794492579249913856"},
1116     {0x1.3b8b5cp+106f, chars_format::general, 32, "1.0000000331813535140961264756326e+32"},
1117     {0x1.8a6e32p+109f, chars_format::general, 33, "999999994495727286427992885035008"},
1118     {0x1.8a6e34p+109f, chars_format::general, 33, "1.00000007186697974176426006623027e+33"},
1119     {0x1.ed09bep+112f, chars_format::general, 34, "9999999790214767953607394487959552"},
1120     {0x1.ed09c0p+112f, chars_format::general, 34, "1.000000040918478759629753193752166e+34"},
1121     {0x1.342616p+116f, chars_format::general, 35, "99999994188327561679933120182222848"},
1122     {0x1.342618p+116f, chars_format::general, 35, "1.0000000409184787596297531937521664e+35"},
1123     {0x1.812f9cp+119f, chars_format::general, 36, "999999961690316245365415600208216064"},
1124     {0x1.812f9ep+119f, chars_format::general, 36, "1.0000000409184787596297531937521664e+36"},
1125     {0x1.e17b84p+122f, chars_format::general, 37, "9999999933815812510711506376257961984"},
1126     {0x1.e17b86p+122f, chars_format::general, 37, "1.000000056764111262482620712460956467e+37"},
1127     {0x1.2ced32p+126f, chars_format::general, 38, "99999996802856924650656260769173209088"},
1128     {0x1.2ced34p+126f, chars_format::general, 38, "1.000000069440617264764914727427988521e+38"},
1129     {0x1.a36e2ep-14f, chars_format::general, 39, "9.99999974737875163555145263671875e-05"},
1130     {0x1.a36e30p-14f, chars_format::general, 39, "0.0001000000047497451305389404296875"},
1131     {0x1.0624dcp-10f, chars_format::general, 39, "0.00099999993108212947845458984375"},
1132     {0x1.0624dep-10f, chars_format::general, 39, "0.001000000047497451305389404296875"},
1133     {0x1.47ae14p-7f, chars_format::general, 39, "0.00999999977648258209228515625"},
1134     {0x1.47ae16p-7f, chars_format::general, 39, "0.010000000707805156707763671875"},
1135     {0x1.999998p-4f, chars_format::general, 39, "0.0999999940395355224609375"},
1136     {0x1.99999ap-4f, chars_format::general, 39, "0.100000001490116119384765625"},
1137     {0x1.fffffep-1f, chars_format::general, 39, "0.999999940395355224609375"},
1138     {0x1.000000p+0f, chars_format::general, 39, "1"},
1139     {0x1.3ffffep+3f, chars_format::general, 39, "9.99999904632568359375"},
1140     {0x1.400000p+3f, chars_format::general, 39, "10"},
1141     {0x1.8ffffep+6f, chars_format::general, 39, "99.99999237060546875"},
1142     {0x1.900000p+6f, chars_format::general, 39, "100"},
1143     {0x1.f3fffep+9f, chars_format::general, 39, "999.99993896484375"},
1144     {0x1.f40000p+9f, chars_format::general, 39, "1000"},
1145     {0x1.387ffep+13f, chars_format::general, 39, "9999.9990234375"},
1146     {0x1.388000p+13f, chars_format::general, 39, "10000"},
1147     {0x1.869ffep+16f, chars_format::general, 39, "99999.9921875"},
1148     {0x1.86a000p+16f, chars_format::general, 39, "100000"},
1149     {0x1.e847fep+19f, chars_format::general, 39, "999999.9375"},
1150     {0x1.e84800p+19f, chars_format::general, 39, "1000000"},
1151     {0x1.312cfep+23f, chars_format::general, 39, "9999999"},
1152     {0x1.312d00p+23f, chars_format::general, 39, "10000000"},
1153     {0x1.7d783ep+26f, chars_format::general, 39, "99999992"},
1154     {0x1.7d7840p+26f, chars_format::general, 39, "100000000"},
1155     {0x1.dcd64ep+29f, chars_format::general, 39, "999999936"},
1156     {0x1.dcd650p+29f, chars_format::general, 39, "1000000000"},
1157     {0x1.2a05f0p+33f, chars_format::general, 39, "9999998976"},
1158     {0x1.2a05f2p+33f, chars_format::general, 39, "10000000000"},
1159     {0x1.74876ep+36f, chars_format::general, 39, "99999997952"},
1160     {0x1.748770p+36f, chars_format::general, 39, "100000006144"},
1161     {0x1.d1a94ap+39f, chars_format::general, 39, "999999995904"},
1162     {0x1.d1a94cp+39f, chars_format::general, 39, "1000000061440"},
1163     {0x1.2309cep+43f, chars_format::general, 39, "9999999827968"},
1164     {0x1.2309d0p+43f, chars_format::general, 39, "10000000876544"},
1165     {0x1.6bcc40p+46f, chars_format::general, 39, "99999991988224"},
1166     {0x1.6bcc42p+46f, chars_format::general, 39, "100000000376832"},
1167     {0x1.c6bf52p+49f, chars_format::general, 39, "999999986991104"},
1168     {0x1.c6bf54p+49f, chars_format::general, 39, "1000000054099968"},
1169     {0x1.1c3792p+53f, chars_format::general, 39, "9999999198822400"},
1170     {0x1.1c3794p+53f, chars_format::general, 39, "10000000272564224"},
1171     {0x1.634578p+56f, chars_format::general, 39, "99999998430674944"},
1172     {0x1.63457ap+56f, chars_format::general, 39, "100000007020609536"},
1173     {0x1.bc16d6p+59f, chars_format::general, 39, "999999984306749440"},
1174     {0x1.bc16d8p+59f, chars_format::general, 39, "1000000053026226176"},
1175     {0x1.158e46p+63f, chars_format::general, 39, "9999999980506447872"},
1176     {0x1.158e48p+63f, chars_format::general, 39, "10000001080018075648"},
1177     {0x1.5af1d6p+66f, chars_format::general, 39, "99999993207994712064"},
1178     {0x1.5af1d8p+66f, chars_format::general, 39, "100000002004087734272"},
1179     {0x1.b1ae4cp+69f, chars_format::general, 39, "999999949672133165056"},
1180     {0x1.b1ae4ep+69f, chars_format::general, 39, "1000000020040877342720"},
1181     {0x1.0f0cf0p+73f, chars_format::general, 39, "9999999778196308361216"},
1182     {0x1.0f0cf2p+73f, chars_format::general, 39, "10000000904096215203840"},
1183     {0x1.52d02cp+76f, chars_format::general, 39, "99999997781963083612160"},
1184     {0x1.52d02ep+76f, chars_format::general, 39, "100000006789162338353152"},
1185     {0x1.a78436p+79f, chars_format::general, 39, "999999941790833817157632"},
1186     {0x1.a78438p+79f, chars_format::general, 39, "1000000013848427855085568"},
1187     {0x1.08b2a2p+83f, chars_format::general, 39, "9999999562023526247432192"},
1188     {0x1.08b2a4p+83f, chars_format::general, 39, "10000000714945030854279168"},
1189     {0x1.4adf4ap+86f, chars_format::general, 39, "99999993314392253260627968"},
1190     {0x1.4adf4cp+86f, chars_format::general, 39, "100000002537764290115403776"},
1191     {0x1.9d971ep+89f, chars_format::general, 39, "999999988484154753734934528"},
1192     {0x1.9d9720p+89f, chars_format::general, 39, "1000000062271131048573140992"},
1193     {0x1.027e72p+93f, chars_format::general, 39, "9999999442119689768320106496"},
1194     {0x1.027e74p+93f, chars_format::general, 39, "10000000622711310485731409920"},
1195     {0x1.431e0ep+96f, chars_format::general, 39, "99999992060013656248378458112"},
1196     {0x1.431e10p+96f, chars_format::general, 39, "100000001504746621987668885504"},
1197     {0x1.93e592p+99f, chars_format::general, 39, "999999939489602493962365435904"},
1198     {0x1.93e594p+99f, chars_format::general, 39, "1000000015047466219876688855040"},
1199     {0x1.f8def8p+102f, chars_format::general, 39, "9999999848243207295109594873856"},
1200     {0x1.f8defap+102f, chars_format::general, 39, "10000000452706117102424182226944"},
1201     {0x1.3b8b5ap+106f, chars_format::general, 39, "99999993646728794492579249913856"},
1202     {0x1.3b8b5cp+106f, chars_format::general, 39, "100000003318135351409612647563264"},
1203     {0x1.8a6e32p+109f, chars_format::general, 39, "999999994495727286427992885035008"},
1204     {0x1.8a6e34p+109f, chars_format::general, 39, "1000000071866979741764260066230272"},
1205     {0x1.ed09bep+112f, chars_format::general, 39, "9999999790214767953607394487959552"},
1206     {0x1.ed09c0p+112f, chars_format::general, 39, "10000000409184787596297531937521664"},
1207     {0x1.342616p+116f, chars_format::general, 39, "99999994188327561679933120182222848"},
1208     {0x1.342618p+116f, chars_format::general, 39, "100000004091847875962975319375216640"},
1209     {0x1.812f9cp+119f, chars_format::general, 39, "999999961690316245365415600208216064"},
1210     {0x1.812f9ep+119f, chars_format::general, 39, "1000000040918478759629753193752166400"},
1211     {0x1.e17b84p+122f, chars_format::general, 39, "9999999933815812510711506376257961984"},
1212     {0x1.e17b86p+122f, chars_format::general, 39, "10000000567641112624826207124609564672"},
1213     {0x1.2ced32p+126f, chars_format::general, 39, "99999996802856924650656260769173209088"},
1214     {0x1.2ced34p+126f, chars_format::general, 39, "100000006944061726476491472742798852096"},
1215     {0x1.fffffep+127f, chars_format::general, 39, "340282346638528859811704183484516925440"},
1216 };
1217 
1218 #endif // FLOAT_GENERAL_PRECISION_TO_CHARS_TEST_CASES_HPP
1219