1//! x^n where n is an integer.
2//!
3//! Method described at: <https://stackoverflow.com/a/101613>
4//!
5//! Note: not optimal for all powers, is NP complete
6//! <https://en.wikipedia.org/wiki/Addition-chain_exponentiation>
7//! will result in an addition multiplication for x^15 for example
8
9use super::{F32, MANTISSA_BITS};
10
11impl F32 {
12 /// Approximates a number raised to an integer power.
13 pub fn powi(self, n: i32) -> Self {
14 let mut base = self;
15 let mut abs_n = i32::abs(n);
16 let mut result = 1.0;
17
18 if n < 0 {
19 base = 1.0 / self;
20 }
21
22 if n == 0 {
23 return Self::ONE;
24 }
25
26 // 0.0 == 0.0 and -0.0 according to IEEE standards.
27 if self == Self::ZERO && n > 0 {
28 return self;
29 }
30
31 // For values less than 2.0, but greater than 0.5 (1.0/2.0), you can multiply longer without
32 // going over exponent, i.e. 1.1 multiplied against itself will grow slowly.
33 if !(0.5..2.0).contains(&self.abs().0) {
34 // Approximation if we end up outside of the range of floating point values,
35 // then we end early
36 let approx_final_exponent = self.extract_exponent_value() * n;
37 let max_representable_exponent = 127;
38 let min_representable_exponent = -126 - (MANTISSA_BITS as i32);
39 if approx_final_exponent > max_representable_exponent
40 || (self == Self::ZERO && approx_final_exponent < 0)
41 {
42 if self.is_sign_positive() || n & 1 == 0 {
43 return Self::INFINITY;
44 } else {
45 return Self::NEG_INFINITY;
46 }
47 } else if approx_final_exponent < min_representable_exponent {
48 // We may want to copy the sign and do the same thing as above,
49 // but that seems like an awful amount of work when 99.99999% of people only care
50 // about bare zero
51 return Self::ZERO;
52 }
53 }
54
55 loop {
56 if (abs_n & 1) == 1 {
57 result *= base;
58 }
59
60 abs_n >>= 1;
61
62 if abs_n == 0 {
63 return Self(result);
64 }
65
66 base *= base;
67 }
68 }
69}
70
71#[cfg(test)]
72mod tests {
73 use super::F32;
74
75 /// Error builds up from both exp and ln approximation, so we double the error allowed.
76 pub(crate) const MAX_ERROR: f32 = 0.002;
77
78 /// `powi(3,x)` test vectors - `(input_base, input_power, output)`
79 pub(crate) const TEST_VECTORS: &[(f32, f32, f32)] = &[
80 (-100000.0, -128.0, 0.0),
81 (-10.0, -128.0, 0.0),
82 (-3.0, -128.0, 0.0),
83 (-2.0, -128.0, 2.938736e-39),
84 (-1.0, -128.0, 1.0),
85 (1.0, -128.0, 1.0),
86 (2.0, -128.0, 2.938736e-39),
87 (3.0, -128.0, 0.0),
88 (10.0, -128.0, 0.0),
89 (100000.0, -128.0, 0.0),
90 (-100000.0, -127.0, -0.0),
91 (-10.0, -127.0, -0.0),
92 (-3.0, -127.0, -0.0),
93 (-2.0, -127.0, -5.877472e-39),
94 (-1.0, -127.0, -1.0),
95 (1.0, -127.0, 1.0),
96 (2.0, -127.0, 5.877472e-39),
97 (3.0, -127.0, 0.0),
98 (10.0, -127.0, 0.0),
99 (100000.0, -127.0, 0.0),
100 (-100000.0, -126.0, 0.0),
101 (-10.0, -126.0, 0.0),
102 (-3.0, -126.0, 0.0),
103 (-2.0, -126.0, 1.1754944e-38),
104 (-1.0, -126.0, 1.0),
105 (1.0, -126.0, 1.0),
106 (2.0, -126.0, 1.1754944e-38),
107 (3.0, -126.0, 0.0),
108 (10.0, -126.0, 0.0),
109 (100000.0, -126.0, 0.0),
110 (-100000.0, -125.0, -0.0),
111 (-10.0, -125.0, -0.0),
112 (-3.0, -125.0, -0.0),
113 (-2.0, -125.0, -2.3509887e-38),
114 (-1.0, -125.0, -1.0),
115 (1.0, -125.0, 1.0),
116 (2.0, -125.0, 2.3509887e-38),
117 (3.0, -125.0, 0.0),
118 (10.0, -125.0, 0.0),
119 (100000.0, -125.0, 0.0),
120 (-100000.0, -124.0, 0.0),
121 (-10.0, -124.0, 0.0),
122 (-3.0, -124.0, 0.0),
123 (-2.0, -124.0, 4.7019774e-38),
124 (-1.0, -124.0, 1.0),
125 (1.0, -124.0, 1.0),
126 (2.0, -124.0, 4.7019774e-38),
127 (3.0, -124.0, 0.0),
128 (10.0, -124.0, 0.0),
129 (100000.0, -124.0, 0.0),
130 (-100000.0, -123.0, -0.0),
131 (-10.0, -123.0, -0.0),
132 (-3.0, -123.0, -0.0),
133 (-2.0, -123.0, -9.403955e-38),
134 (-1.0, -123.0, -1.0),
135 (1.0, -123.0, 1.0),
136 (2.0, -123.0, 9.403955e-38),
137 (3.0, -123.0, 0.0),
138 (10.0, -123.0, 0.0),
139 (100000.0, -123.0, 0.0),
140 (-100000.0, -122.0, 0.0),
141 (-10.0, -122.0, 0.0),
142 (-3.0, -122.0, 0.0),
143 (-2.0, -122.0, 1.880791e-37),
144 (-1.0, -122.0, 1.0),
145 (1.0, -122.0, 1.0),
146 (2.0, -122.0, 1.880791e-37),
147 (3.0, -122.0, 0.0),
148 (10.0, -122.0, 0.0),
149 (100000.0, -122.0, 0.0),
150 (-100000.0, -121.0, -0.0),
151 (-10.0, -121.0, -0.0),
152 (-3.0, -121.0, -0.0),
153 (-2.0, -121.0, -3.761582e-37),
154 (-1.0, -121.0, -1.0),
155 (1.0, -121.0, 1.0),
156 (2.0, -121.0, 3.761582e-37),
157 (3.0, -121.0, 0.0),
158 (10.0, -121.0, 0.0),
159 (100000.0, -121.0, 0.0),
160 (-100000.0, -120.0, 0.0),
161 (-10.0, -120.0, 0.0),
162 (-3.0, -120.0, 0.0),
163 (-2.0, -120.0, 7.523164e-37),
164 (-1.0, -120.0, 1.0),
165 (1.0, -120.0, 1.0),
166 (2.0, -120.0, 7.523164e-37),
167 (3.0, -120.0, 0.0),
168 (10.0, -120.0, 0.0),
169 (100000.0, -120.0, 0.0),
170 (-100000.0, -119.0, -0.0),
171 (-10.0, -119.0, -0.0),
172 (-3.0, -119.0, -0.0),
173 (-2.0, -119.0, -1.5046328e-36),
174 (-1.0, -119.0, -1.0),
175 (1.0, -119.0, 1.0),
176 (2.0, -119.0, 1.5046328e-36),
177 (3.0, -119.0, 0.0),
178 (10.0, -119.0, 0.0),
179 (100000.0, -119.0, 0.0),
180 (-100000.0, -118.0, 0.0),
181 (-10.0, -118.0, 0.0),
182 (-3.0, -118.0, 0.0),
183 (-2.0, -118.0, 3.0092655e-36),
184 (-1.0, -118.0, 1.0),
185 (1.0, -118.0, 1.0),
186 (2.0, -118.0, 3.0092655e-36),
187 (3.0, -118.0, 0.0),
188 (10.0, -118.0, 0.0),
189 (100000.0, -118.0, 0.0),
190 (-100000.0, -117.0, -0.0),
191 (-10.0, -117.0, -0.0),
192 (-3.0, -117.0, -0.0),
193 (-2.0, -117.0, -6.018531e-36),
194 (-1.0, -117.0, -1.0),
195 (1.0, -117.0, 1.0),
196 (2.0, -117.0, 6.018531e-36),
197 (3.0, -117.0, 0.0),
198 (10.0, -117.0, 0.0),
199 (100000.0, -117.0, 0.0),
200 (-100000.0, -116.0, 0.0),
201 (-10.0, -116.0, 0.0),
202 (-3.0, -116.0, 0.0),
203 (-2.0, -116.0, 1.2037062e-35),
204 (-1.0, -116.0, 1.0),
205 (1.0, -116.0, 1.0),
206 (2.0, -116.0, 1.2037062e-35),
207 (3.0, -116.0, 0.0),
208 (10.0, -116.0, 0.0),
209 (100000.0, -116.0, 0.0),
210 (-100000.0, -115.0, -0.0),
211 (-10.0, -115.0, -0.0),
212 (-3.0, -115.0, -0.0),
213 (-2.0, -115.0, -2.4074124e-35),
214 (-1.0, -115.0, -1.0),
215 (1.0, -115.0, 1.0),
216 (2.0, -115.0, 2.4074124e-35),
217 (3.0, -115.0, 0.0),
218 (10.0, -115.0, 0.0),
219 (100000.0, -115.0, 0.0),
220 (-100000.0, -114.0, 0.0),
221 (-10.0, -114.0, 0.0),
222 (-3.0, -114.0, 0.0),
223 (-2.0, -114.0, 4.814825e-35),
224 (-1.0, -114.0, 1.0),
225 (1.0, -114.0, 1.0),
226 (2.0, -114.0, 4.814825e-35),
227 (3.0, -114.0, 0.0),
228 (10.0, -114.0, 0.0),
229 (100000.0, -114.0, 0.0),
230 (-100000.0, -113.0, -0.0),
231 (-10.0, -113.0, -0.0),
232 (-3.0, -113.0, -0.0),
233 (-2.0, -113.0, -9.62965e-35),
234 (-1.0, -113.0, -1.0),
235 (1.0, -113.0, 1.0),
236 (2.0, -113.0, 9.62965e-35),
237 (3.0, -113.0, 0.0),
238 (10.0, -113.0, 0.0),
239 (100000.0, -113.0, 0.0),
240 (-100000.0, -112.0, 0.0),
241 (-10.0, -112.0, 0.0),
242 (-3.0, -112.0, 0.0),
243 (-2.0, -112.0, 1.92593e-34),
244 (-1.0, -112.0, 1.0),
245 (1.0, -112.0, 1.0),
246 (2.0, -112.0, 1.92593e-34),
247 (3.0, -112.0, 0.0),
248 (10.0, -112.0, 0.0),
249 (100000.0, -112.0, 0.0),
250 (-100000.0, -111.0, -0.0),
251 (-10.0, -111.0, -0.0),
252 (-3.0, -111.0, -0.0),
253 (-2.0, -111.0, -3.85186e-34),
254 (-1.0, -111.0, -1.0),
255 (1.0, -111.0, 1.0),
256 (2.0, -111.0, 3.85186e-34),
257 (3.0, -111.0, 0.0),
258 (10.0, -111.0, 0.0),
259 (100000.0, -111.0, 0.0),
260 (-100000.0, -110.0, 0.0),
261 (-10.0, -110.0, 0.0),
262 (-3.0, -110.0, 0.0),
263 (-2.0, -110.0, 7.70372e-34),
264 (-1.0, -110.0, 1.0),
265 (1.0, -110.0, 1.0),
266 (2.0, -110.0, 7.70372e-34),
267 (3.0, -110.0, 0.0),
268 (10.0, -110.0, 0.0),
269 (100000.0, -110.0, 0.0),
270 (-100000.0, -109.0, -0.0),
271 (-10.0, -109.0, -0.0),
272 (-3.0, -109.0, -0.0),
273 (-2.0, -109.0, -1.540744e-33),
274 (-1.0, -109.0, -1.0),
275 (1.0, -109.0, 1.0),
276 (2.0, -109.0, 1.540744e-33),
277 (3.0, -109.0, 0.0),
278 (10.0, -109.0, 0.0),
279 (100000.0, -109.0, 0.0),
280 (-100000.0, -108.0, 0.0),
281 (-10.0, -108.0, 0.0),
282 (-3.0, -108.0, 0.0),
283 (-2.0, -108.0, 3.081488e-33),
284 (-1.0, -108.0, 1.0),
285 (1.0, -108.0, 1.0),
286 (2.0, -108.0, 3.081488e-33),
287 (3.0, -108.0, 0.0),
288 (10.0, -108.0, 0.0),
289 (100000.0, -108.0, 0.0),
290 (-100000.0, -107.0, -0.0),
291 (-10.0, -107.0, -0.0),
292 (-3.0, -107.0, -0.0),
293 (-2.0, -107.0, -6.162976e-33),
294 (-1.0, -107.0, -1.0),
295 (1.0, -107.0, 1.0),
296 (2.0, -107.0, 6.162976e-33),
297 (3.0, -107.0, 0.0),
298 (10.0, -107.0, 0.0),
299 (100000.0, -107.0, 0.0),
300 (-100000.0, -106.0, 0.0),
301 (-10.0, -106.0, 0.0),
302 (-3.0, -106.0, 0.0),
303 (-2.0, -106.0, 1.2325952e-32),
304 (-1.0, -106.0, 1.0),
305 (1.0, -106.0, 1.0),
306 (2.0, -106.0, 1.2325952e-32),
307 (3.0, -106.0, 0.0),
308 (10.0, -106.0, 0.0),
309 (100000.0, -106.0, 0.0),
310 (-100000.0, -105.0, -0.0),
311 (-10.0, -105.0, -0.0),
312 (-3.0, -105.0, -0.0),
313 (-2.0, -105.0, -2.4651903e-32),
314 (-1.0, -105.0, -1.0),
315 (1.0, -105.0, 1.0),
316 (2.0, -105.0, 2.4651903e-32),
317 (3.0, -105.0, 0.0),
318 (10.0, -105.0, 0.0),
319 (100000.0, -105.0, 0.0),
320 (-100000.0, -104.0, 0.0),
321 (-10.0, -104.0, 0.0),
322 (-3.0, -104.0, 0.0),
323 (-2.0, -104.0, 4.9303807e-32),
324 (-1.0, -104.0, 1.0),
325 (1.0, -104.0, 1.0),
326 (2.0, -104.0, 4.9303807e-32),
327 (3.0, -104.0, 0.0),
328 (10.0, -104.0, 0.0),
329 (100000.0, -104.0, 0.0),
330 (-100000.0, -103.0, -0.0),
331 (-10.0, -103.0, -0.0),
332 (-3.0, -103.0, -0.0),
333 (-2.0, -103.0, -9.8607613e-32),
334 (-1.0, -103.0, -1.0),
335 (1.0, -103.0, 1.0),
336 (2.0, -103.0, 9.8607613e-32),
337 (3.0, -103.0, 0.0),
338 (10.0, -103.0, 0.0),
339 (100000.0, -103.0, 0.0),
340 (-100000.0, -102.0, 0.0),
341 (-10.0, -102.0, 0.0),
342 (-3.0, -102.0, 0.0),
343 (-2.0, -102.0, 1.9721523e-31),
344 (-1.0, -102.0, 1.0),
345 (1.0, -102.0, 1.0),
346 (2.0, -102.0, 1.9721523e-31),
347 (3.0, -102.0, 0.0),
348 (10.0, -102.0, 0.0),
349 (100000.0, -102.0, 0.0),
350 (-100000.0, -101.0, -0.0),
351 (-10.0, -101.0, -0.0),
352 (-3.0, -101.0, -0.0),
353 (-2.0, -101.0, -3.9443045e-31),
354 (-1.0, -101.0, -1.0),
355 (1.0, -101.0, 1.0),
356 (2.0, -101.0, 3.9443045e-31),
357 (3.0, -101.0, 0.0),
358 (10.0, -101.0, 0.0),
359 (100000.0, -101.0, 0.0),
360 (-100000.0, -100.0, 0.0),
361 (-10.0, -100.0, 0.0),
362 (-3.0, -100.0, 0.0),
363 (-2.0, -100.0, 7.888609e-31),
364 (-1.0, -100.0, 1.0),
365 (1.0, -100.0, 1.0),
366 (2.0, -100.0, 7.888609e-31),
367 (3.0, -100.0, 0.0),
368 (10.0, -100.0, 0.0),
369 (100000.0, -100.0, 0.0),
370 (-100000.0, -99.0, -0.0),
371 (-10.0, -99.0, -0.0),
372 (-3.0, -99.0, -0.0),
373 (-2.0, -99.0, -1.5777218e-30),
374 (-1.0, -99.0, -1.0),
375 (1.0, -99.0, 1.0),
376 (2.0, -99.0, 1.5777218e-30),
377 (3.0, -99.0, 0.0),
378 (10.0, -99.0, 0.0),
379 (100000.0, -99.0, 0.0),
380 (-100000.0, -98.0, 0.0),
381 (-10.0, -98.0, 0.0),
382 (-3.0, -98.0, 0.0),
383 (-2.0, -98.0, 3.1554436e-30),
384 (-1.0, -98.0, 1.0),
385 (1.0, -98.0, 1.0),
386 (2.0, -98.0, 3.1554436e-30),
387 (3.0, -98.0, 0.0),
388 (10.0, -98.0, 0.0),
389 (100000.0, -98.0, 0.0),
390 (-100000.0, -97.0, -0.0),
391 (-10.0, -97.0, -0.0),
392 (-3.0, -97.0, -0.0),
393 (-2.0, -97.0, -6.3108872e-30),
394 (-1.0, -97.0, -1.0),
395 (1.0, -97.0, 1.0),
396 (2.0, -97.0, 6.3108872e-30),
397 (3.0, -97.0, 0.0),
398 (10.0, -97.0, 0.0),
399 (100000.0, -97.0, 0.0),
400 (-100000.0, -96.0, 0.0),
401 (-10.0, -96.0, 0.0),
402 (-3.0, -96.0, 0.0),
403 (-2.0, -96.0, 1.2621775e-29),
404 (-1.0, -96.0, 1.0),
405 (1.0, -96.0, 1.0),
406 (2.0, -96.0, 1.2621775e-29),
407 (3.0, -96.0, 0.0),
408 (10.0, -96.0, 0.0),
409 (100000.0, -96.0, 0.0),
410 (-100000.0, -95.0, -0.0),
411 (-10.0, -95.0, -0.0),
412 (-3.0, -95.0, -0.0),
413 (-2.0, -95.0, -2.524355e-29),
414 (-1.0, -95.0, -1.0),
415 (1.0, -95.0, 1.0),
416 (2.0, -95.0, 2.524355e-29),
417 (3.0, -95.0, 0.0),
418 (10.0, -95.0, 0.0),
419 (100000.0, -95.0, 0.0),
420 (-100000.0, -94.0, 0.0),
421 (-10.0, -94.0, 0.0),
422 (-3.0, -94.0, 1e-45),
423 (-2.0, -94.0, 5.04871e-29),
424 (-1.0, -94.0, 1.0),
425 (1.0, -94.0, 1.0),
426 (2.0, -94.0, 5.04871e-29),
427 (3.0, -94.0, 1e-45),
428 (10.0, -94.0, 0.0),
429 (100000.0, -94.0, 0.0),
430 (-100000.0, -93.0, -0.0),
431 (-10.0, -93.0, -0.0),
432 (-3.0, -93.0, -4e-45),
433 (-2.0, -93.0, -1.009742e-28),
434 (-1.0, -93.0, -1.0),
435 (1.0, -93.0, 1.0),
436 (2.0, -93.0, 1.009742e-28),
437 (3.0, -93.0, 4e-45),
438 (10.0, -93.0, 0.0),
439 (100000.0, -93.0, 0.0),
440 (-100000.0, -92.0, 0.0),
441 (-10.0, -92.0, 0.0),
442 (-3.0, -92.0, 1.3e-44),
443 (-2.0, -92.0, 2.019484e-28),
444 (-1.0, -92.0, 1.0),
445 (1.0, -92.0, 1.0),
446 (2.0, -92.0, 2.019484e-28),
447 (3.0, -92.0, 1.3e-44),
448 (10.0, -92.0, 0.0),
449 (100000.0, -92.0, 0.0),
450 (-100000.0, -91.0, -0.0),
451 (-10.0, -91.0, -0.0),
452 (-3.0, -91.0, -3.8e-44),
453 (-2.0, -91.0, -4.038968e-28),
454 (-1.0, -91.0, -1.0),
455 (1.0, -91.0, 1.0),
456 (2.0, -91.0, 4.038968e-28),
457 (3.0, -91.0, 3.8e-44),
458 (10.0, -91.0, 0.0),
459 (100000.0, -91.0, 0.0),
460 (-100000.0, -90.0, 0.0),
461 (-10.0, -90.0, 0.0),
462 (-3.0, -90.0, 1.15e-43),
463 (-2.0, -90.0, 8.077936e-28),
464 (-1.0, -90.0, 1.0),
465 (1.0, -90.0, 1.0),
466 (2.0, -90.0, 8.077936e-28),
467 (3.0, -90.0, 1.15e-43),
468 (10.0, -90.0, 0.0),
469 (100000.0, -90.0, 0.0),
470 (-100000.0, -89.0, -0.0),
471 (-10.0, -89.0, -0.0),
472 (-3.0, -89.0, -3.43e-43),
473 (-2.0, -89.0, -1.6155871e-27),
474 (-1.0, -89.0, -1.0),
475 (1.0, -89.0, 1.0),
476 (2.0, -89.0, 1.6155871e-27),
477 (3.0, -89.0, 3.43e-43),
478 (10.0, -89.0, 0.0),
479 (100000.0, -89.0, 0.0),
480 (-100000.0, -88.0, 0.0),
481 (-10.0, -88.0, 0.0),
482 (-3.0, -88.0, 1.031e-42),
483 (-2.0, -88.0, 3.2311743e-27),
484 (-1.0, -88.0, 1.0),
485 (1.0, -88.0, 1.0),
486 (2.0, -88.0, 3.2311743e-27),
487 (3.0, -88.0, 1.031e-42),
488 (10.0, -88.0, 0.0),
489 (100000.0, -88.0, 0.0),
490 (-100000.0, -87.0, -0.0),
491 (-10.0, -87.0, -0.0),
492 (-3.0, -87.0, -3.094e-42),
493 (-2.0, -87.0, -6.4623485e-27),
494 (-1.0, -87.0, -1.0),
495 (1.0, -87.0, 1.0),
496 (2.0, -87.0, 6.4623485e-27),
497 (3.0, -87.0, 3.094e-42),
498 (10.0, -87.0, 0.0),
499 (100000.0, -87.0, 0.0),
500 (-100000.0, -86.0, 0.0),
501 (-10.0, -86.0, 0.0),
502 (-3.0, -86.0, 9.281e-42),
503 (-2.0, -86.0, 1.2924697e-26),
504 (-1.0, -86.0, 1.0),
505 (1.0, -86.0, 1.0),
506 (2.0, -86.0, 1.2924697e-26),
507 (3.0, -86.0, 9.281e-42),
508 (10.0, -86.0, 0.0),
509 (100000.0, -86.0, 0.0),
510 (-100000.0, -85.0, -0.0),
511 (-10.0, -85.0, -0.0),
512 (-3.0, -85.0, -2.7841e-41),
513 (-2.0, -85.0, -2.5849394e-26),
514 (-1.0, -85.0, -1.0),
515 (1.0, -85.0, 1.0),
516 (2.0, -85.0, 2.5849394e-26),
517 (3.0, -85.0, 2.7841e-41),
518 (10.0, -85.0, 0.0),
519 (100000.0, -85.0, 0.0),
520 (-100000.0, -84.0, 0.0),
521 (-10.0, -84.0, 0.0),
522 (-3.0, -84.0, 8.3524e-41),
523 (-2.0, -84.0, 5.169879e-26),
524 (-1.0, -84.0, 1.0),
525 (1.0, -84.0, 1.0),
526 (2.0, -84.0, 5.169879e-26),
527 (3.0, -84.0, 8.3524e-41),
528 (10.0, -84.0, 0.0),
529 (100000.0, -84.0, 0.0),
530 (-100000.0, -83.0, -0.0),
531 (-10.0, -83.0, -0.0),
532 (-3.0, -83.0, -2.50575e-40),
533 (-2.0, -83.0, -1.0339758e-25),
534 (-1.0, -83.0, -1.0),
535 (1.0, -83.0, 1.0),
536 (2.0, -83.0, 1.0339758e-25),
537 (3.0, -83.0, 2.50575e-40),
538 (10.0, -83.0, 0.0),
539 (100000.0, -83.0, 0.0),
540 (-100000.0, -82.0, 0.0),
541 (-10.0, -82.0, 0.0),
542 (-3.0, -82.0, 7.51722e-40),
543 (-2.0, -82.0, 2.0679515e-25),
544 (-1.0, -82.0, 1.0),
545 (1.0, -82.0, 1.0),
546 (2.0, -82.0, 2.0679515e-25),
547 (3.0, -82.0, 7.51722e-40),
548 (10.0, -82.0, 0.0),
549 (100000.0, -82.0, 0.0),
550 (-100000.0, -81.0, -0.0),
551 (-10.0, -81.0, -0.0),
552 (-3.0, -81.0, -2.255166e-39),
553 (-2.0, -81.0, -4.135903e-25),
554 (-1.0, -81.0, -1.0),
555 (1.0, -81.0, 1.0),
556 (2.0, -81.0, 4.135903e-25),
557 (3.0, -81.0, 2.255166e-39),
558 (10.0, -81.0, 0.0),
559 (100000.0, -81.0, 0.0),
560 (-100000.0, -80.0, 0.0),
561 (-10.0, -80.0, 0.0),
562 (-3.0, -80.0, 6.765496e-39),
563 (-2.0, -80.0, 8.271806e-25),
564 (-1.0, -80.0, 1.0),
565 (1.0, -80.0, 1.0),
566 (2.0, -80.0, 8.271806e-25),
567 (3.0, -80.0, 6.765496e-39),
568 (10.0, -80.0, 0.0),
569 (100000.0, -80.0, 0.0),
570 (-100000.0, -79.0, -0.0),
571 (-10.0, -79.0, -0.0),
572 (-3.0, -79.0, -2.0296487e-38),
573 (-2.0, -79.0, -1.6543612e-24),
574 (-1.0, -79.0, -1.0),
575 (1.0, -79.0, 1.0),
576 (2.0, -79.0, 1.6543612e-24),
577 (3.0, -79.0, 2.0296487e-38),
578 (10.0, -79.0, 0.0),
579 (100000.0, -79.0, 0.0),
580 (-100000.0, -78.0, 0.0),
581 (-10.0, -78.0, 0.0),
582 (-3.0, -78.0, 6.088946e-38),
583 (-2.0, -78.0, 3.3087225e-24),
584 (-1.0, -78.0, 1.0),
585 (1.0, -78.0, 1.0),
586 (2.0, -78.0, 3.3087225e-24),
587 (3.0, -78.0, 6.088946e-38),
588 (10.0, -78.0, 0.0),
589 (100000.0, -78.0, 0.0),
590 (-100000.0, -77.0, -0.0),
591 (-10.0, -77.0, -0.0),
592 (-3.0, -77.0, -1.8266838e-37),
593 (-2.0, -77.0, -6.617445e-24),
594 (-1.0, -77.0, -1.0),
595 (1.0, -77.0, 1.0),
596 (2.0, -77.0, 6.617445e-24),
597 (3.0, -77.0, 1.8266838e-37),
598 (10.0, -77.0, 0.0),
599 (100000.0, -77.0, 0.0),
600 (-100000.0, -76.0, 0.0),
601 (-10.0, -76.0, 0.0),
602 (-3.0, -76.0, 5.4800514e-37),
603 (-2.0, -76.0, 1.323489e-23),
604 (-1.0, -76.0, 1.0),
605 (1.0, -76.0, 1.0),
606 (2.0, -76.0, 1.323489e-23),
607 (3.0, -76.0, 5.4800514e-37),
608 (10.0, -76.0, 0.0),
609 (100000.0, -76.0, 0.0),
610 (-100000.0, -75.0, -0.0),
611 (-10.0, -75.0, -0.0),
612 (-3.0, -75.0, -1.6440154e-36),
613 (-2.0, -75.0, -2.646978e-23),
614 (-1.0, -75.0, -1.0),
615 (1.0, -75.0, 1.0),
616 (2.0, -75.0, 2.646978e-23),
617 (3.0, -75.0, 1.6440154e-36),
618 (10.0, -75.0, 0.0),
619 (100000.0, -75.0, 0.0),
620 (-100000.0, -74.0, 0.0),
621 (-10.0, -74.0, 0.0),
622 (-3.0, -74.0, 4.9320465e-36),
623 (-2.0, -74.0, 5.293956e-23),
624 (-1.0, -74.0, 1.0),
625 (1.0, -74.0, 1.0),
626 (2.0, -74.0, 5.293956e-23),
627 (3.0, -74.0, 4.9320465e-36),
628 (10.0, -74.0, 0.0),
629 (100000.0, -74.0, 0.0),
630 (-100000.0, -73.0, -0.0),
631 (-10.0, -73.0, -0.0),
632 (-3.0, -73.0, -1.4796139e-35),
633 (-2.0, -73.0, -1.0587912e-22),
634 (-1.0, -73.0, -1.0),
635 (1.0, -73.0, 1.0),
636 (2.0, -73.0, 1.0587912e-22),
637 (3.0, -73.0, 1.4796139e-35),
638 (10.0, -73.0, 0.0),
639 (100000.0, -73.0, 0.0),
640 (-100000.0, -72.0, 0.0),
641 (-10.0, -72.0, 0.0),
642 (-3.0, -72.0, 4.4388417e-35),
643 (-2.0, -72.0, 2.1175824e-22),
644 (-1.0, -72.0, 1.0),
645 (1.0, -72.0, 1.0),
646 (2.0, -72.0, 2.1175824e-22),
647 (3.0, -72.0, 4.4388417e-35),
648 (10.0, -72.0, 0.0),
649 (100000.0, -72.0, 0.0),
650 (-100000.0, -71.0, -0.0),
651 (-10.0, -71.0, -0.0),
652 (-3.0, -71.0, -1.3316525e-34),
653 (-2.0, -71.0, -4.2351647e-22),
654 (-1.0, -71.0, -1.0),
655 (1.0, -71.0, 1.0),
656 (2.0, -71.0, 4.2351647e-22),
657 (3.0, -71.0, 1.3316525e-34),
658 (10.0, -71.0, 0.0),
659 (100000.0, -71.0, 0.0),
660 (-100000.0, -70.0, 0.0),
661 (-10.0, -70.0, 0.0),
662 (-3.0, -70.0, 3.9949575e-34),
663 (-2.0, -70.0, 8.4703295e-22),
664 (-1.0, -70.0, 1.0),
665 (1.0, -70.0, 1.0),
666 (2.0, -70.0, 8.4703295e-22),
667 (3.0, -70.0, 3.9949575e-34),
668 (10.0, -70.0, 0.0),
669 (100000.0, -70.0, 0.0),
670 (-100000.0, -69.0, -0.0),
671 (-10.0, -69.0, -0.0),
672 (-3.0, -69.0, -1.1984873e-33),
673 (-2.0, -69.0, -1.6940659e-21),
674 (-1.0, -69.0, -1.0),
675 (1.0, -69.0, 1.0),
676 (2.0, -69.0, 1.6940659e-21),
677 (3.0, -69.0, 1.1984873e-33),
678 (10.0, -69.0, 0.0),
679 (100000.0, -69.0, 0.0),
680 (-100000.0, -68.0, 0.0),
681 (-10.0, -68.0, 0.0),
682 (-3.0, -68.0, 3.5954618e-33),
683 (-2.0, -68.0, 3.3881318e-21),
684 (-1.0, -68.0, 1.0),
685 (1.0, -68.0, 1.0),
686 (2.0, -68.0, 3.3881318e-21),
687 (3.0, -68.0, 3.5954618e-33),
688 (10.0, -68.0, 0.0),
689 (100000.0, -68.0, 0.0),
690 (-100000.0, -67.0, -0.0),
691 (-10.0, -67.0, -0.0),
692 (-3.0, -67.0, -1.07863854e-32),
693 (-2.0, -67.0, -6.7762636e-21),
694 (-1.0, -67.0, -1.0),
695 (1.0, -67.0, 1.0),
696 (2.0, -67.0, 6.7762636e-21),
697 (3.0, -67.0, 1.07863854e-32),
698 (10.0, -67.0, 0.0),
699 (100000.0, -67.0, 0.0),
700 (-100000.0, -66.0, 0.0),
701 (-10.0, -66.0, 0.0),
702 (-3.0, -66.0, 3.2359155e-32),
703 (-2.0, -66.0, 1.3552527e-20),
704 (-1.0, -66.0, 1.0),
705 (1.0, -66.0, 1.0),
706 (2.0, -66.0, 1.3552527e-20),
707 (3.0, -66.0, 3.2359155e-32),
708 (10.0, -66.0, 0.0),
709 (100000.0, -66.0, 0.0),
710 (-100000.0, -65.0, -0.0),
711 (-10.0, -65.0, -0.0),
712 (-3.0, -65.0, -9.7077466e-32),
713 (-2.0, -65.0, -2.7105054e-20),
714 (-1.0, -65.0, -1.0),
715 (1.0, -65.0, 1.0),
716 (2.0, -65.0, 2.7105054e-20),
717 (3.0, -65.0, 9.7077466e-32),
718 (10.0, -65.0, 0.0),
719 (100000.0, -65.0, 0.0),
720 (-100000.0, -64.0, 0.0),
721 (-10.0, -64.0, 0.0),
722 (-3.0, -64.0, 2.9123242e-31),
723 (-2.0, -64.0, 5.421011e-20),
724 (-1.0, -64.0, 1.0),
725 (1.0, -64.0, 1.0),
726 (2.0, -64.0, 5.421011e-20),
727 (3.0, -64.0, 2.9123242e-31),
728 (10.0, -64.0, 0.0),
729 (100000.0, -64.0, 0.0),
730 (-100000.0, -63.0, -0.0),
731 (-10.0, -63.0, -0.0),
732 (-3.0, -63.0, -8.736972e-31),
733 (-2.0, -63.0, -1.0842022e-19),
734 (-1.0, -63.0, -1.0),
735 (1.0, -63.0, 1.0),
736 (2.0, -63.0, 1.0842022e-19),
737 (3.0, -63.0, 8.736972e-31),
738 (10.0, -63.0, 0.0),
739 (100000.0, -63.0, 0.0),
740 (-100000.0, -62.0, 0.0),
741 (-10.0, -62.0, 0.0),
742 (-3.0, -62.0, 2.6210917e-30),
743 (-2.0, -62.0, 2.1684043e-19),
744 (-1.0, -62.0, 1.0),
745 (1.0, -62.0, 1.0),
746 (2.0, -62.0, 2.1684043e-19),
747 (3.0, -62.0, 2.6210917e-30),
748 (10.0, -62.0, 0.0),
749 (100000.0, -62.0, 0.0),
750 (-100000.0, -61.0, -0.0),
751 (-10.0, -61.0, -0.0),
752 (-3.0, -61.0, -7.863275e-30),
753 (-2.0, -61.0, -4.3368087e-19),
754 (-1.0, -61.0, -1.0),
755 (1.0, -61.0, 1.0),
756 (2.0, -61.0, 4.3368087e-19),
757 (3.0, -61.0, 7.863275e-30),
758 (10.0, -61.0, 0.0),
759 (100000.0, -61.0, 0.0),
760 (-100000.0, -60.0, 0.0),
761 (-10.0, -60.0, 0.0),
762 (-3.0, -60.0, 2.3589825e-29),
763 (-2.0, -60.0, 8.6736174e-19),
764 (-1.0, -60.0, 1.0),
765 (1.0, -60.0, 1.0),
766 (2.0, -60.0, 8.6736174e-19),
767 (3.0, -60.0, 2.3589825e-29),
768 (10.0, -60.0, 0.0),
769 (100000.0, -60.0, 0.0),
770 (-100000.0, -59.0, -0.0),
771 (-10.0, -59.0, -0.0),
772 (-3.0, -59.0, -7.0769475e-29),
773 (-2.0, -59.0, -1.7347235e-18),
774 (-1.0, -59.0, -1.0),
775 (1.0, -59.0, 1.0),
776 (2.0, -59.0, 1.7347235e-18),
777 (3.0, -59.0, 7.0769475e-29),
778 (10.0, -59.0, 0.0),
779 (100000.0, -59.0, 0.0),
780 (-100000.0, -58.0, 0.0),
781 (-10.0, -58.0, 0.0),
782 (-3.0, -58.0, 2.1230843e-28),
783 (-2.0, -58.0, 3.469447e-18),
784 (-1.0, -58.0, 1.0),
785 (1.0, -58.0, 1.0),
786 (2.0, -58.0, 3.469447e-18),
787 (3.0, -58.0, 2.1230843e-28),
788 (10.0, -58.0, 0.0),
789 (100000.0, -58.0, 0.0),
790 (-100000.0, -57.0, -0.0),
791 (-10.0, -57.0, -0.0),
792 (-3.0, -57.0, -6.3692525e-28),
793 (-2.0, -57.0, -6.938894e-18),
794 (-1.0, -57.0, -1.0),
795 (1.0, -57.0, 1.0),
796 (2.0, -57.0, 6.938894e-18),
797 (3.0, -57.0, 6.3692525e-28),
798 (10.0, -57.0, 0.0),
799 (100000.0, -57.0, 0.0),
800 (-100000.0, -56.0, 0.0),
801 (-10.0, -56.0, 0.0),
802 (-3.0, -56.0, 1.9107758e-27),
803 (-2.0, -56.0, 1.3877788e-17),
804 (-1.0, -56.0, 1.0),
805 (1.0, -56.0, 1.0),
806 (2.0, -56.0, 1.3877788e-17),
807 (3.0, -56.0, 1.9107758e-27),
808 (10.0, -56.0, 0.0),
809 (100000.0, -56.0, 0.0),
810 (-100000.0, -55.0, -0.0),
811 (-10.0, -55.0, -0.0),
812 (-3.0, -55.0, -5.7323275e-27),
813 (-2.0, -55.0, -2.7755576e-17),
814 (-1.0, -55.0, -1.0),
815 (1.0, -55.0, 1.0),
816 (2.0, -55.0, 2.7755576e-17),
817 (3.0, -55.0, 5.7323275e-27),
818 (10.0, -55.0, 0.0),
819 (100000.0, -55.0, 0.0),
820 (-100000.0, -54.0, 0.0),
821 (-10.0, -54.0, 0.0),
822 (-3.0, -54.0, 1.7196983e-26),
823 (-2.0, -54.0, 5.551115e-17),
824 (-1.0, -54.0, 1.0),
825 (1.0, -54.0, 1.0),
826 (2.0, -54.0, 5.551115e-17),
827 (3.0, -54.0, 1.7196983e-26),
828 (10.0, -54.0, 0.0),
829 (100000.0, -54.0, 0.0),
830 (-100000.0, -53.0, -0.0),
831 (-10.0, -53.0, -0.0),
832 (-3.0, -53.0, -5.159095e-26),
833 (-2.0, -53.0, -1.110223e-16),
834 (-1.0, -53.0, -1.0),
835 (1.0, -53.0, 1.0),
836 (2.0, -53.0, 1.110223e-16),
837 (3.0, -53.0, 5.159095e-26),
838 (10.0, -53.0, 0.0),
839 (100000.0, -53.0, 0.0),
840 (-100000.0, -52.0, 0.0),
841 (-10.0, -52.0, 0.0),
842 (-3.0, -52.0, 1.5477285e-25),
843 (-2.0, -52.0, 2.220446e-16),
844 (-1.0, -52.0, 1.0),
845 (1.0, -52.0, 1.0),
846 (2.0, -52.0, 2.220446e-16),
847 (3.0, -52.0, 1.5477285e-25),
848 (10.0, -52.0, 0.0),
849 (100000.0, -52.0, 0.0),
850 (-100000.0, -51.0, -0.0),
851 (-10.0, -51.0, -0.0),
852 (-3.0, -51.0, -4.643185e-25),
853 (-2.0, -51.0, -4.440892e-16),
854 (-1.0, -51.0, -1.0),
855 (1.0, -51.0, 1.0),
856 (2.0, -51.0, 4.440892e-16),
857 (3.0, -51.0, 4.643185e-25),
858 (10.0, -51.0, 0.0),
859 (100000.0, -51.0, 0.0),
860 (-100000.0, -50.0, 0.0),
861 (-10.0, -50.0, 0.0),
862 (-3.0, -50.0, 1.3929556e-24),
863 (-2.0, -50.0, 8.881784e-16),
864 (-1.0, -50.0, 1.0),
865 (1.0, -50.0, 1.0),
866 (2.0, -50.0, 8.881784e-16),
867 (3.0, -50.0, 1.3929556e-24),
868 (10.0, -50.0, 0.0),
869 (100000.0, -50.0, 0.0),
870 (-100000.0, -49.0, -0.0),
871 (-10.0, -49.0, -0.0),
872 (-3.0, -49.0, -4.1788668e-24),
873 (-2.0, -49.0, -1.7763568e-15),
874 (-1.0, -49.0, -1.0),
875 (1.0, -49.0, 1.0),
876 (2.0, -49.0, 1.7763568e-15),
877 (3.0, -49.0, 4.1788668e-24),
878 (10.0, -49.0, 0.0),
879 (100000.0, -49.0, 0.0),
880 (-100000.0, -48.0, 0.0),
881 (-10.0, -48.0, 0.0),
882 (-3.0, -48.0, 1.25366e-23),
883 (-2.0, -48.0, 3.5527137e-15),
884 (-1.0, -48.0, 1.0),
885 (1.0, -48.0, 1.0),
886 (2.0, -48.0, 3.5527137e-15),
887 (3.0, -48.0, 1.25366e-23),
888 (10.0, -48.0, 0.0),
889 (100000.0, -48.0, 0.0),
890 (-100000.0, -47.0, -0.0),
891 (-10.0, -47.0, -0.0),
892 (-3.0, -47.0, -3.7609802e-23),
893 (-2.0, -47.0, -7.1054274e-15),
894 (-1.0, -47.0, -1.0),
895 (1.0, -47.0, 1.0),
896 (2.0, -47.0, 7.1054274e-15),
897 (3.0, -47.0, 3.7609802e-23),
898 (10.0, -47.0, 0.0),
899 (100000.0, -47.0, 0.0),
900 (-100000.0, -46.0, 0.0),
901 (-10.0, -46.0, 0.0),
902 (-3.0, -46.0, 1.128294e-22),
903 (-2.0, -46.0, 1.4210855e-14),
904 (-1.0, -46.0, 1.0),
905 (1.0, -46.0, 1.0),
906 (2.0, -46.0, 1.4210855e-14),
907 (3.0, -46.0, 1.128294e-22),
908 (10.0, -46.0, 0.0),
909 (100000.0, -46.0, 0.0),
910 (-100000.0, -45.0, -0.0),
911 (-10.0, -45.0, -0.0),
912 (-3.0, -45.0, -3.384882e-22),
913 (-2.0, -45.0, -2.842171e-14),
914 (-1.0, -45.0, -1.0),
915 (1.0, -45.0, 1.0),
916 (2.0, -45.0, 2.842171e-14),
917 (3.0, -45.0, 3.384882e-22),
918 (10.0, -45.0, 0.0),
919 (100000.0, -45.0, 0.0),
920 (-100000.0, -44.0, 0.0),
921 (-10.0, -44.0, 1e-44),
922 (-3.0, -44.0, 1.0154646e-21),
923 (-2.0, -44.0, 5.684342e-14),
924 (-1.0, -44.0, 1.0),
925 (1.0, -44.0, 1.0),
926 (2.0, -44.0, 5.684342e-14),
927 (3.0, -44.0, 1.0154646e-21),
928 (10.0, -44.0, 1e-44),
929 (100000.0, -44.0, 0.0),
930 (-100000.0, -43.0, -0.0),
931 (-10.0, -43.0, -1e-43),
932 (-3.0, -43.0, -3.046394e-21),
933 (-2.0, -43.0, -1.1368684e-13),
934 (-1.0, -43.0, -1.0),
935 (1.0, -43.0, 1.0),
936 (2.0, -43.0, 1.1368684e-13),
937 (3.0, -43.0, 3.046394e-21),
938 (10.0, -43.0, 1e-43),
939 (100000.0, -43.0, 0.0),
940 (-100000.0, -42.0, 0.0),
941 (-10.0, -42.0, 1e-42),
942 (-3.0, -42.0, 9.139182e-21),
943 (-2.0, -42.0, 2.2737368e-13),
944 (-1.0, -42.0, 1.0),
945 (1.0, -42.0, 1.0),
946 (2.0, -42.0, 2.2737368e-13),
947 (3.0, -42.0, 9.139182e-21),
948 (10.0, -42.0, 1e-42),
949 (100000.0, -42.0, 0.0),
950 (-100000.0, -41.0, -0.0),
951 (-10.0, -41.0, -1e-41),
952 (-3.0, -41.0, -2.7417544e-20),
953 (-2.0, -41.0, -4.5474735e-13),
954 (-1.0, -41.0, -1.0),
955 (1.0, -41.0, 1.0),
956 (2.0, -41.0, 4.5474735e-13),
957 (3.0, -41.0, 2.7417544e-20),
958 (10.0, -41.0, 1e-41),
959 (100000.0, -41.0, 0.0),
960 (-100000.0, -40.0, 0.0),
961 (-10.0, -40.0, 1e-40),
962 (-3.0, -40.0, 8.2252636e-20),
963 (-2.0, -40.0, 9.094947e-13),
964 (-1.0, -40.0, 1.0),
965 (1.0, -40.0, 1.0),
966 (2.0, -40.0, 9.094947e-13),
967 (3.0, -40.0, 8.2252636e-20),
968 (10.0, -40.0, 1e-40),
969 (100000.0, -40.0, 0.0),
970 (-100000.0, -39.0, -0.0),
971 (-10.0, -39.0, -1e-39),
972 (-3.0, -39.0, -2.467579e-19),
973 (-2.0, -39.0, -1.8189894e-12),
974 (-1.0, -39.0, -1.0),
975 (1.0, -39.0, 1.0),
976 (2.0, -39.0, 1.8189894e-12),
977 (3.0, -39.0, 2.467579e-19),
978 (10.0, -39.0, 1e-39),
979 (100000.0, -39.0, 0.0),
980 (-100000.0, -38.0, 0.0),
981 (-10.0, -38.0, 1e-38),
982 (-3.0, -38.0, 7.402737e-19),
983 (-2.0, -38.0, 3.637979e-12),
984 (-1.0, -38.0, 1.0),
985 (1.0, -38.0, 1.0),
986 (2.0, -38.0, 3.637979e-12),
987 (3.0, -38.0, 7.402737e-19),
988 (10.0, -38.0, 1e-38),
989 (100000.0, -38.0, 0.0),
990 (-100000.0, -37.0, -0.0),
991 (-10.0, -37.0, -1e-37),
992 (-3.0, -37.0, -2.2208211e-18),
993 (-2.0, -37.0, -7.275958e-12),
994 (-1.0, -37.0, -1.0),
995 (1.0, -37.0, 1.0),
996 (2.0, -37.0, 7.275958e-12),
997 (3.0, -37.0, 2.2208211e-18),
998 (10.0, -37.0, 1e-37),
999 (100000.0, -37.0, 0.0),
1000 (-100000.0, -36.0, 0.0),
1001 (-10.0, -36.0, 1e-36),
1002 (-3.0, -36.0, 6.6624634e-18),
1003 (-2.0, -36.0, 1.4551915e-11),
1004 (-1.0, -36.0, 1.0),
1005 (1.0, -36.0, 1.0),
1006 (2.0, -36.0, 1.4551915e-11),
1007 (3.0, -36.0, 6.6624634e-18),
1008 (10.0, -36.0, 1e-36),
1009 (100000.0, -36.0, 0.0),
1010 (-100000.0, -35.0, -0.0),
1011 (-10.0, -35.0, -1e-35),
1012 (-3.0, -35.0, -1.998739e-17),
1013 (-2.0, -35.0, -2.910383e-11),
1014 (-1.0, -35.0, -1.0),
1015 (1.0, -35.0, 1.0),
1016 (2.0, -35.0, 2.910383e-11),
1017 (3.0, -35.0, 1.998739e-17),
1018 (10.0, -35.0, 1e-35),
1019 (100000.0, -35.0, 0.0),
1020 (-100000.0, -34.0, 0.0),
1021 (-10.0, -34.0, 1e-34),
1022 (-3.0, -34.0, 5.996217e-17),
1023 (-2.0, -34.0, 5.820766e-11),
1024 (-1.0, -34.0, 1.0),
1025 (1.0, -34.0, 1.0),
1026 (2.0, -34.0, 5.820766e-11),
1027 (3.0, -34.0, 5.996217e-17),
1028 (10.0, -34.0, 1e-34),
1029 (100000.0, -34.0, 0.0),
1030 (-100000.0, -33.0, -0.0),
1031 (-10.0, -33.0, -1e-33),
1032 (-3.0, -33.0, -1.798865e-16),
1033 (-2.0, -33.0, -1.1641532e-10),
1034 (-1.0, -33.0, -1.0),
1035 (1.0, -33.0, 1.0),
1036 (2.0, -33.0, 1.1641532e-10),
1037 (3.0, -33.0, 1.798865e-16),
1038 (10.0, -33.0, 1e-33),
1039 (100000.0, -33.0, 0.0),
1040 (-100000.0, -32.0, 0.0),
1041 (-10.0, -32.0, 1e-32),
1042 (-3.0, -32.0, 5.396595e-16),
1043 (-2.0, -32.0, 2.3283064e-10),
1044 (-1.0, -32.0, 1.0),
1045 (1.0, -32.0, 1.0),
1046 (2.0, -32.0, 2.3283064e-10),
1047 (3.0, -32.0, 5.396595e-16),
1048 (10.0, -32.0, 1e-32),
1049 (100000.0, -32.0, 0.0),
1050 (-100000.0, -31.0, -0.0),
1051 (-10.0, -31.0, -1e-31),
1052 (-3.0, -31.0, -1.6189785e-15),
1053 (-2.0, -31.0, -4.656613e-10),
1054 (-1.0, -31.0, -1.0),
1055 (1.0, -31.0, 1.0),
1056 (2.0, -31.0, 4.656613e-10),
1057 (3.0, -31.0, 1.6189785e-15),
1058 (10.0, -31.0, 1e-31),
1059 (100000.0, -31.0, 0.0),
1060 (-100000.0, -30.0, 0.0),
1061 (-10.0, -30.0, 1e-30),
1062 (-3.0, -30.0, 4.8569356e-15),
1063 (-2.0, -30.0, 9.313226e-10),
1064 (-1.0, -30.0, 1.0),
1065 (1.0, -30.0, 1.0),
1066 (2.0, -30.0, 9.313226e-10),
1067 (3.0, -30.0, 4.8569356e-15),
1068 (10.0, -30.0, 1e-30),
1069 (100000.0, -30.0, 0.0),
1070 (-100000.0, -29.0, -0.0),
1071 (-10.0, -29.0, -1e-29),
1072 (-3.0, -29.0, -1.4570806e-14),
1073 (-2.0, -29.0, -1.862_645_1e-9),
1074 (-1.0, -29.0, -1.0),
1075 (1.0, -29.0, 1.0),
1076 (2.0, -29.0, 1.862_645_1e-9),
1077 (3.0, -29.0, 1.4570806e-14),
1078 (10.0, -29.0, 1e-29),
1079 (100000.0, -29.0, 0.0),
1080 (-100000.0, -28.0, 0.0),
1081 (-10.0, -28.0, 1e-28),
1082 (-3.0, -28.0, 4.3712423e-14),
1083 (-2.0, -28.0, 3.725_290_3e-9),
1084 (-1.0, -28.0, 1.0),
1085 (1.0, -28.0, 1.0),
1086 (2.0, -28.0, 3.725_290_3e-9),
1087 (3.0, -28.0, 4.3712423e-14),
1088 (10.0, -28.0, 1e-28),
1089 (100000.0, -28.0, 0.0),
1090 (-100000.0, -27.0, -0.0),
1091 (-10.0, -27.0, -1e-27),
1092 (-3.0, -27.0, -1.3113726e-13),
1093 (-2.0, -27.0, -7.450_581e-9),
1094 (-1.0, -27.0, -1.0),
1095 (1.0, -27.0, 1.0),
1096 (2.0, -27.0, 7.450_581e-9),
1097 (3.0, -27.0, 1.3113726e-13),
1098 (10.0, -27.0, 1e-27),
1099 (100000.0, -27.0, 0.0),
1100 (-100000.0, -26.0, 0.0),
1101 (-10.0, -26.0, 1e-26),
1102 (-3.0, -26.0, 3.9341178e-13),
1103 (-2.0, -26.0, 1.490_116_1e-8),
1104 (-1.0, -26.0, 1.0),
1105 (1.0, -26.0, 1.0),
1106 (2.0, -26.0, 1.490_116_1e-8),
1107 (3.0, -26.0, 3.9341178e-13),
1108 (10.0, -26.0, 1e-26),
1109 (100000.0, -26.0, 0.0),
1110 (-100000.0, -25.0, -0.0),
1111 (-10.0, -25.0, -1e-25),
1112 (-3.0, -25.0, -1.1802354e-12),
1113 (-2.0, -25.0, -2.980_232_2e-8),
1114 (-1.0, -25.0, -1.0),
1115 (1.0, -25.0, 1.0),
1116 (2.0, -25.0, 2.980_232_2e-8),
1117 (3.0, -25.0, 1.1802354e-12),
1118 (10.0, -25.0, 1e-25),
1119 (100000.0, -25.0, 0.0),
1120 (-100000.0, -24.0, 0.0),
1121 (-10.0, -24.0, 1e-24),
1122 (-3.0, -24.0, 3.5407061e-12),
1123 (-2.0, -24.0, 5.960_464_5e-8),
1124 (-1.0, -24.0, 1.0),
1125 (1.0, -24.0, 1.0),
1126 (2.0, -24.0, 5.960_464_5e-8),
1127 (3.0, -24.0, 3.5407061e-12),
1128 (10.0, -24.0, 1e-24),
1129 (100000.0, -24.0, 0.0),
1130 (-100000.0, -23.0, -0.0),
1131 (-10.0, -23.0, -1e-23),
1132 (-3.0, -23.0, -1.0622119e-11),
1133 (-2.0, -23.0, -1.192_092_9e-7),
1134 (-1.0, -23.0, -1.0),
1135 (1.0, -23.0, 1.0),
1136 (2.0, -23.0, 1.192_092_9e-7),
1137 (3.0, -23.0, 1.0622119e-11),
1138 (10.0, -23.0, 1e-23),
1139 (100000.0, -23.0, 0.0),
1140 (-100000.0, -22.0, 0.0),
1141 (-10.0, -22.0, 1e-22),
1142 (-3.0, -22.0, 3.1866357e-11),
1143 (-2.0, -22.0, 2.384_185_8e-7),
1144 (-1.0, -22.0, 1.0),
1145 (1.0, -22.0, 1.0),
1146 (2.0, -22.0, 2.384_185_8e-7),
1147 (3.0, -22.0, 3.1866357e-11),
1148 (10.0, -22.0, 1e-22),
1149 (100000.0, -22.0, 0.0),
1150 (-100000.0, -21.0, -0.0),
1151 (-10.0, -21.0, -1e-21),
1152 (-3.0, -21.0, -9.559906e-11),
1153 (-2.0, -21.0, -4.768_371_6e-7),
1154 (-1.0, -21.0, -1.0),
1155 (1.0, -21.0, 1.0),
1156 (2.0, -21.0, 4.768_371_6e-7),
1157 (3.0, -21.0, 9.559906e-11),
1158 (10.0, -21.0, 1e-21),
1159 (100000.0, -21.0, 0.0),
1160 (-100000.0, -20.0, 0.0),
1161 (-10.0, -20.0, 1e-20),
1162 (-3.0, -20.0, 2.867972e-10),
1163 (-2.0, -20.0, 9.536_743e-7),
1164 (-1.0, -20.0, 1.0),
1165 (1.0, -20.0, 1.0),
1166 (2.0, -20.0, 9.536_743e-7),
1167 (3.0, -20.0, 2.867972e-10),
1168 (10.0, -20.0, 1e-20),
1169 (100000.0, -20.0, 0.0),
1170 (-100000.0, -19.0, -0.0),
1171 (-10.0, -19.0, -1e-19),
1172 (-3.0, -19.0, -8.603916e-10),
1173 (-2.0, -19.0, -1.907_348_6e-6),
1174 (-1.0, -19.0, -1.0),
1175 (1.0, -19.0, 1.0),
1176 (2.0, -19.0, 1.907_348_6e-6),
1177 (3.0, -19.0, 8.603916e-10),
1178 (10.0, -19.0, 1e-19),
1179 (100000.0, -19.0, 0.0),
1180 (-100000.0, -18.0, 0.0),
1181 (-10.0, -18.0, 1e-18),
1182 (-3.0, -18.0, 2.581_174_8e-9),
1183 (-2.0, -18.0, 3.814_697_3e-6),
1184 (-1.0, -18.0, 1.0),
1185 (1.0, -18.0, 1.0),
1186 (2.0, -18.0, 3.814_697_3e-6),
1187 (3.0, -18.0, 2.581_174_8e-9),
1188 (10.0, -18.0, 1e-18),
1189 (100000.0, -18.0, 0.0),
1190 (-100000.0, -17.0, -0.0),
1191 (-10.0, -17.0, -1e-17),
1192 (-3.0, -17.0, -7.743_524e-9),
1193 (-2.0, -17.0, -7.629_394_5e-6),
1194 (-1.0, -17.0, -1.0),
1195 (1.0, -17.0, 1.0),
1196 (2.0, -17.0, 7.629_394_5e-6),
1197 (3.0, -17.0, 7.743_524e-9),
1198 (10.0, -17.0, 1e-17),
1199 (100000.0, -17.0, 0.0),
1200 (-100000.0, -16.0, 0.0),
1201 (-10.0, -16.0, 1e-16),
1202 (-3.0, -16.0, 2.323_057_3e-8),
1203 (-2.0, -16.0, 1.525_878_9e-5),
1204 (-1.0, -16.0, 1.0),
1205 (1.0, -16.0, 1.0),
1206 (2.0, -16.0, 1.525_878_9e-5),
1207 (3.0, -16.0, 2.323_057_3e-8),
1208 (10.0, -16.0, 1e-16),
1209 (100000.0, -16.0, 0.0),
1210 (-100000.0, -15.0, -0.0),
1211 (-10.0, -15.0, -1e-15),
1212 (-3.0, -15.0, -6.969_172e-8),
1213 (-2.0, -15.0, -3.051_757_8e-5),
1214 (-1.0, -15.0, -1.0),
1215 (1.0, -15.0, 1.0),
1216 (2.0, -15.0, 3.051_757_8e-5),
1217 (3.0, -15.0, 6.969_172e-8),
1218 (10.0, -15.0, 1e-15),
1219 (100000.0, -15.0, 0.0),
1220 (-100000.0, -14.0, 0.0),
1221 (-10.0, -14.0, 1e-14),
1222 (-3.0, -14.0, 2.090_751_5e-7),
1223 (-2.0, -14.0, 6.103_515_6e-5),
1224 (-1.0, -14.0, 1.0),
1225 (1.0, -14.0, 1.0),
1226 (2.0, -14.0, 6.103_515_6e-5),
1227 (3.0, -14.0, 2.090_751_5e-7),
1228 (10.0, -14.0, 1e-14),
1229 (100000.0, -14.0, 0.0),
1230 (-100000.0, -13.0, -0.0),
1231 (-10.0, -13.0, -1e-13),
1232 (-3.0, -13.0, -6.272_254_6e-7),
1233 (-2.0, -13.0, -0.00012207031),
1234 (-1.0, -13.0, -1.0),
1235 (1.0, -13.0, 1.0),
1236 (2.0, -13.0, 0.00012207031),
1237 (3.0, -13.0, 6.272_254_6e-7),
1238 (10.0, -13.0, 1e-13),
1239 (100000.0, -13.0, 0.0),
1240 (-100000.0, -12.0, 0.0),
1241 (-10.0, -12.0, 1e-12),
1242 (-3.0, -12.0, 1.881_676_4e-6),
1243 (-2.0, -12.0, 0.000_244_140_63),
1244 (-1.0, -12.0, 1.0),
1245 (1.0, -12.0, 1.0),
1246 (2.0, -12.0, 0.000_244_140_63),
1247 (3.0, -12.0, 1.881_676_4e-6),
1248 (10.0, -12.0, 1e-12),
1249 (100000.0, -12.0, 0.0),
1250 (-100000.0, -11.0, -0.0),
1251 (-10.0, -11.0, -1e-11),
1252 (-3.0, -11.0, -5.645_029_4e-6),
1253 (-2.0, -11.0, -0.00048828125),
1254 (-1.0, -11.0, -1.0),
1255 (1.0, -11.0, 1.0),
1256 (2.0, -11.0, 0.00048828125),
1257 (3.0, -11.0, 5.645_029_4e-6),
1258 (10.0, -11.0, 1e-11),
1259 (100000.0, -11.0, 0.0),
1260 (-100000.0, -10.0, 0.0),
1261 (-10.0, -10.0, 1e-10),
1262 (-3.0, -10.0, 1.693_508_8e-5),
1263 (-2.0, -10.0, 0.0009765625),
1264 (-1.0, -10.0, 1.0),
1265 (1.0, -10.0, 1.0),
1266 (2.0, -10.0, 0.0009765625),
1267 (3.0, -10.0, 1.693_508_8e-5),
1268 (10.0, -10.0, 1e-10),
1269 (100000.0, -10.0, 0.0),
1270 (-100000.0, -9.0, -0.0),
1271 (-10.0, -9.0, -1e-09),
1272 (-3.0, -9.0, -5.080_526e-5),
1273 (-2.0, -9.0, -0.001953125),
1274 (-1.0, -9.0, -1.0),
1275 (1.0, -9.0, 1.0),
1276 (2.0, -9.0, 0.001953125),
1277 (3.0, -9.0, 5.080_526e-5),
1278 (10.0, -9.0, 1e-09),
1279 (100000.0, -9.0, 0.0),
1280 (-100000.0, -8.0, 1e-40),
1281 (-10.0, -8.0, 1e-08),
1282 (-3.0, -8.0, 0.00015241579),
1283 (-2.0, -8.0, 0.00390625),
1284 (-1.0, -8.0, 1.0),
1285 (1.0, -8.0, 1.0),
1286 (2.0, -8.0, 0.00390625),
1287 (3.0, -8.0, 0.00015241579),
1288 (10.0, -8.0, 1e-08),
1289 (100000.0, -8.0, 1e-40),
1290 (-100000.0, -7.0, -1e-35),
1291 (-10.0, -7.0, -1e-07),
1292 (-3.0, -7.0, -0.00045724737),
1293 (-2.0, -7.0, -0.0078125),
1294 (-1.0, -7.0, -1.0),
1295 (1.0, -7.0, 1.0),
1296 (2.0, -7.0, 0.0078125),
1297 (3.0, -7.0, 0.00045724737),
1298 (10.0, -7.0, 1e-07),
1299 (100000.0, -7.0, 1e-35),
1300 (-100000.0, -6.0, 1e-30),
1301 (-10.0, -6.0, 1e-06),
1302 (-3.0, -6.0, 0.0013717421),
1303 (-2.0, -6.0, 0.015625),
1304 (-1.0, -6.0, 1.0),
1305 (1.0, -6.0, 1.0),
1306 (2.0, -6.0, 0.015625),
1307 (3.0, -6.0, 0.0013717421),
1308 (10.0, -6.0, 1e-06),
1309 (100000.0, -6.0, 1e-30),
1310 (-100000.0, -5.0, -1e-25),
1311 (-10.0, -5.0, -1e-05),
1312 (-3.0, -5.0, -0.004115226),
1313 (-2.0, -5.0, -0.03125),
1314 (-1.0, -5.0, -1.0),
1315 (1.0, -5.0, 1.0),
1316 (2.0, -5.0, 0.03125),
1317 (3.0, -5.0, 0.004115226),
1318 (10.0, -5.0, 1e-05),
1319 (100000.0, -5.0, 1e-25),
1320 (-100000.0, -4.0, 1e-20),
1321 (-10.0, -4.0, 1e-04),
1322 (-3.0, -4.0, 0.012345679),
1323 (-2.0, -4.0, 0.0625),
1324 (-1.0, -4.0, 1.0),
1325 (1.0, -4.0, 1.0),
1326 (2.0, -4.0, 0.0625),
1327 (3.0, -4.0, 0.012345679),
1328 (10.0, -4.0, 1e-04),
1329 (100000.0, -4.0, 1e-20),
1330 (-100000.0, -3.0, -1e-15),
1331 (-10.0, -3.0, -0.001),
1332 (-3.0, -3.0, -0.037037037),
1333 (-2.0, -3.0, -0.125),
1334 (-1.0, -3.0, -1.0),
1335 (1.0, -3.0, 1.0),
1336 (2.0, -3.0, 0.125),
1337 (3.0, -3.0, 0.037037037),
1338 (10.0, -3.0, 0.001),
1339 (100000.0, -3.0, 1e-15),
1340 (-100000.0, -2.0, 1e-10),
1341 (-10.0, -2.0, 0.01),
1342 (-3.0, -2.0, 0.11111111),
1343 (-2.0, -2.0, 0.25),
1344 (-1.0, -2.0, 1.0),
1345 (1.0, -2.0, 1.0),
1346 (2.0, -2.0, 0.25),
1347 (3.0, -2.0, 0.11111111),
1348 (10.0, -2.0, 0.01),
1349 (100000.0, -2.0, 1e-10),
1350 (-100000.0, -1.0, -1e-05),
1351 (-10.0, -1.0, -0.1),
1352 (-3.0, -1.0, -0.33333334),
1353 (-2.0, -1.0, -0.5),
1354 (-1.0, -1.0, -1.0),
1355 (1.0, -1.0, 1.0),
1356 (2.0, -1.0, 0.5),
1357 (3.0, -1.0, 0.33333334),
1358 (10.0, -1.0, 0.1),
1359 (100000.0, -1.0, 1e-05),
1360 (-100000.0, 0.0, 1.0),
1361 (-10.0, 0.0, 1.0),
1362 (-3.0, 0.0, 1.0),
1363 (-2.0, 0.0, 1.0),
1364 (-1.0, 0.0, 1.0),
1365 (1.0, 0.0, 1.0),
1366 (2.0, 0.0, 1.0),
1367 (3.0, 0.0, 1.0),
1368 (10.0, 0.0, 1.0),
1369 (100000.0, 0.0, 1.0),
1370 (-100000.0, 1.0, -100000.0),
1371 (-10.0, 1.0, -10.0),
1372 (-3.0, 1.0, -3.0),
1373 (-2.0, 1.0, -2.0),
1374 (-1.0, 1.0, -1.0),
1375 (1.0, 1.0, 1.0),
1376 (2.0, 1.0, 2.0),
1377 (3.0, 1.0, 3.0),
1378 (10.0, 1.0, 10.0),
1379 (100000.0, 1.0, 100000.0),
1380 (-100000.0, 2.0, 10000000000.0),
1381 (-10.0, 2.0, 100.0),
1382 (-3.0, 2.0, 9.0),
1383 (-2.0, 2.0, 4.0),
1384 (-1.0, 2.0, 1.0),
1385 (1.0, 2.0, 1.0),
1386 (2.0, 2.0, 4.0),
1387 (3.0, 2.0, 9.0),
1388 (10.0, 2.0, 100.0),
1389 (100000.0, 2.0, 10000000000.0),
1390 (-100000.0, 3.0, -1000000000000000.0),
1391 (-10.0, 3.0, -1000.0),
1392 (-3.0, 3.0, -27.0),
1393 (-2.0, 3.0, -8.0),
1394 (-1.0, 3.0, -1.0),
1395 (1.0, 3.0, 1.0),
1396 (2.0, 3.0, 8.0),
1397 (3.0, 3.0, 27.0),
1398 (10.0, 3.0, 1000.0),
1399 (100000.0, 3.0, 1000000000000000.0),
1400 (-100000.0, 4.0, 1e+20),
1401 (-10.0, 4.0, 10000.0),
1402 (-3.0, 4.0, 81.0),
1403 (-2.0, 4.0, 16.0),
1404 (-1.0, 4.0, 1.0),
1405 (1.0, 4.0, 1.0),
1406 (2.0, 4.0, 16.0),
1407 (3.0, 4.0, 81.0),
1408 (10.0, 4.0, 10000.0),
1409 (100000.0, 4.0, 1e+20),
1410 (-100000.0, 5.0, -1e+25),
1411 (-10.0, 5.0, -100000.0),
1412 (-3.0, 5.0, -243.0),
1413 (-2.0, 5.0, -32.0),
1414 (-1.0, 5.0, -1.0),
1415 (1.0, 5.0, 1.0),
1416 (2.0, 5.0, 32.0),
1417 (3.0, 5.0, 243.0),
1418 (10.0, 5.0, 100000.0),
1419 (100000.0, 5.0, 1e+25),
1420 (-100000.0, 6.0, 1e+30),
1421 (-10.0, 6.0, 1000000.0),
1422 (-3.0, 6.0, 729.0),
1423 (-2.0, 6.0, 64.0),
1424 (-1.0, 6.0, 1.0),
1425 (1.0, 6.0, 1.0),
1426 (2.0, 6.0, 64.0),
1427 (3.0, 6.0, 729.0),
1428 (10.0, 6.0, 1000000.0),
1429 (100000.0, 6.0, 1e+30),
1430 (-100000.0, 7.0, -1e+35),
1431 (-10.0, 7.0, -10000000.0),
1432 (-3.0, 7.0, -2187.0),
1433 (-2.0, 7.0, -128.0),
1434 (-1.0, 7.0, -1.0),
1435 (1.0, 7.0, 1.0),
1436 (2.0, 7.0, 128.0),
1437 (3.0, 7.0, 2187.0),
1438 (10.0, 7.0, 10000000.0),
1439 (100000.0, 7.0, 1e+35),
1440 (-100000.0, 8.0, f32::INFINITY),
1441 (-10.0, 8.0, 100000000.0),
1442 (-3.0, 8.0, 6561.0),
1443 (-2.0, 8.0, 256.0),
1444 (-1.0, 8.0, 1.0),
1445 (1.0, 8.0, 1.0),
1446 (2.0, 8.0, 256.0),
1447 (3.0, 8.0, 6561.0),
1448 (10.0, 8.0, 100000000.0),
1449 (100000.0, 8.0, f32::INFINITY),
1450 (-100000.0, 9.0, -f32::INFINITY),
1451 (-10.0, 9.0, -1000000000.0),
1452 (-3.0, 9.0, -19683.0),
1453 (-2.0, 9.0, -512.0),
1454 (-1.0, 9.0, -1.0),
1455 (1.0, 9.0, 1.0),
1456 (2.0, 9.0, 512.0),
1457 (3.0, 9.0, 19683.0),
1458 (10.0, 9.0, 1000000000.0),
1459 (100000.0, 9.0, f32::INFINITY),
1460 (-100000.0, 10.0, f32::INFINITY),
1461 (-10.0, 10.0, 10000000000.0),
1462 (-3.0, 10.0, 59049.0),
1463 (-2.0, 10.0, 1024.0),
1464 (-1.0, 10.0, 1.0),
1465 (1.0, 10.0, 1.0),
1466 (2.0, 10.0, 1024.0),
1467 (3.0, 10.0, 59049.0),
1468 (10.0, 10.0, 10000000000.0),
1469 (100000.0, 10.0, f32::INFINITY),
1470 (-100000.0, 11.0, -f32::INFINITY),
1471 (-10.0, 11.0, -100000000000.0),
1472 (-3.0, 11.0, -177147.0),
1473 (-2.0, 11.0, -2048.0),
1474 (-1.0, 11.0, -1.0),
1475 (1.0, 11.0, 1.0),
1476 (2.0, 11.0, 2048.0),
1477 (3.0, 11.0, 177147.0),
1478 (10.0, 11.0, 100000000000.0),
1479 (100000.0, 11.0, f32::INFINITY),
1480 (-100000.0, 12.0, f32::INFINITY),
1481 (-10.0, 12.0, 1000000000000.0),
1482 (-3.0, 12.0, 531441.0),
1483 (-2.0, 12.0, 4096.0),
1484 (-1.0, 12.0, 1.0),
1485 (1.0, 12.0, 1.0),
1486 (2.0, 12.0, 4096.0),
1487 (3.0, 12.0, 531441.0),
1488 (10.0, 12.0, 1000000000000.0),
1489 (100000.0, 12.0, f32::INFINITY),
1490 (-100000.0, 13.0, -f32::INFINITY),
1491 (-10.0, 13.0, -10000000000000.0),
1492 (-3.0, 13.0, -1594323.0),
1493 (-2.0, 13.0, -8192.0),
1494 (-1.0, 13.0, -1.0),
1495 (1.0, 13.0, 1.0),
1496 (2.0, 13.0, 8192.0),
1497 (3.0, 13.0, 1594323.0),
1498 (10.0, 13.0, 10000000000000.0),
1499 (100000.0, 13.0, f32::INFINITY),
1500 (-100000.0, 14.0, f32::INFINITY),
1501 (-10.0, 14.0, 100000000000000.0),
1502 (-3.0, 14.0, 4782969.0),
1503 (-2.0, 14.0, 16384.0),
1504 (-1.0, 14.0, 1.0),
1505 (1.0, 14.0, 1.0),
1506 (2.0, 14.0, 16384.0),
1507 (3.0, 14.0, 4782969.0),
1508 (10.0, 14.0, 100000000000000.0),
1509 (100000.0, 14.0, f32::INFINITY),
1510 (-100000.0, 15.0, -f32::INFINITY),
1511 (-10.0, 15.0, -1000000000000000.0),
1512 (-3.0, 15.0, -14348907.0),
1513 (-2.0, 15.0, -32768.0),
1514 (-1.0, 15.0, -1.0),
1515 (1.0, 15.0, 1.0),
1516 (2.0, 15.0, 32768.0),
1517 (3.0, 15.0, 14348907.0),
1518 (10.0, 15.0, 1000000000000000.0),
1519 (100000.0, 15.0, f32::INFINITY),
1520 (-100000.0, 16.0, f32::INFINITY),
1521 (-10.0, 16.0, 1e+16),
1522 (-3.0, 16.0, 43046720.0),
1523 (-2.0, 16.0, 65536.0),
1524 (-1.0, 16.0, 1.0),
1525 (1.0, 16.0, 1.0),
1526 (2.0, 16.0, 65536.0),
1527 (3.0, 16.0, 43046720.0),
1528 (10.0, 16.0, 1e+16),
1529 (100000.0, 16.0, f32::INFINITY),
1530 (-100000.0, 17.0, -f32::INFINITY),
1531 (-10.0, 17.0, -1e+17),
1532 (-3.0, 17.0, -129140160.0),
1533 (-2.0, 17.0, -131072.0),
1534 (-1.0, 17.0, -1.0),
1535 (1.0, 17.0, 1.0),
1536 (2.0, 17.0, 131072.0),
1537 (3.0, 17.0, 129140160.0),
1538 (10.0, 17.0, 1e+17),
1539 (100000.0, 17.0, f32::INFINITY),
1540 (-100000.0, 18.0, f32::INFINITY),
1541 (-10.0, 18.0, 1e+18),
1542 (-3.0, 18.0, 387420480.0),
1543 (-2.0, 18.0, 262144.0),
1544 (-1.0, 18.0, 1.0),
1545 (1.0, 18.0, 1.0),
1546 (2.0, 18.0, 262144.0),
1547 (3.0, 18.0, 387420480.0),
1548 (10.0, 18.0, 1e+18),
1549 (100000.0, 18.0, f32::INFINITY),
1550 (-100000.0, 19.0, -f32::INFINITY),
1551 (-10.0, 19.0, -1e+19),
1552 (-3.0, 19.0, -1162261500.0),
1553 (-2.0, 19.0, -524288.0),
1554 (-1.0, 19.0, -1.0),
1555 (1.0, 19.0, 1.0),
1556 (2.0, 19.0, 524288.0),
1557 (3.0, 19.0, 1162261500.0),
1558 (10.0, 19.0, 1e+19),
1559 (100000.0, 19.0, f32::INFINITY),
1560 (-100000.0, 20.0, f32::INFINITY),
1561 (-10.0, 20.0, 1e+20),
1562 (-3.0, 20.0, 3486784500.0),
1563 (-2.0, 20.0, 1048576.0),
1564 (-1.0, 20.0, 1.0),
1565 (1.0, 20.0, 1.0),
1566 (2.0, 20.0, 1048576.0),
1567 (3.0, 20.0, 3486784500.0),
1568 (10.0, 20.0, 1e+20),
1569 (100000.0, 20.0, f32::INFINITY),
1570 (-100000.0, 21.0, -f32::INFINITY),
1571 (-10.0, 21.0, -1e+21),
1572 (-3.0, 21.0, -10460354000.0),
1573 (-2.0, 21.0, -2097152.0),
1574 (-1.0, 21.0, -1.0),
1575 (1.0, 21.0, 1.0),
1576 (2.0, 21.0, 2097152.0),
1577 (3.0, 21.0, 10460354000.0),
1578 (10.0, 21.0, 1e+21),
1579 (100000.0, 21.0, f32::INFINITY),
1580 (-100000.0, 22.0, f32::INFINITY),
1581 (-10.0, 22.0, 1e+22),
1582 (-3.0, 22.0, 31381060000.0),
1583 (-2.0, 22.0, 4194304.0),
1584 (-1.0, 22.0, 1.0),
1585 (1.0, 22.0, 1.0),
1586 (2.0, 22.0, 4194304.0),
1587 (3.0, 22.0, 31381060000.0),
1588 (10.0, 22.0, 1e+22),
1589 (100000.0, 22.0, f32::INFINITY),
1590 (-100000.0, 23.0, -f32::INFINITY),
1591 (-10.0, 23.0, -1e+23),
1592 (-3.0, 23.0, -94143180000.0),
1593 (-2.0, 23.0, -8388608.0),
1594 (-1.0, 23.0, -1.0),
1595 (1.0, 23.0, 1.0),
1596 (2.0, 23.0, 8388608.0),
1597 (3.0, 23.0, 94143180000.0),
1598 (10.0, 23.0, 1e+23),
1599 (100000.0, 23.0, f32::INFINITY),
1600 (-100000.0, 24.0, f32::INFINITY),
1601 (-10.0, 24.0, 1e+24),
1602 (-3.0, 24.0, 282429520000.0),
1603 (-2.0, 24.0, 16777216.0),
1604 (-1.0, 24.0, 1.0),
1605 (1.0, 24.0, 1.0),
1606 (2.0, 24.0, 16777216.0),
1607 (3.0, 24.0, 282429520000.0),
1608 (10.0, 24.0, 1e+24),
1609 (100000.0, 24.0, f32::INFINITY),
1610 (-100000.0, 25.0, -f32::INFINITY),
1611 (-10.0, 25.0, -1e+25),
1612 (-3.0, 25.0, -847288600000.0),
1613 (-2.0, 25.0, -33554432.0),
1614 (-1.0, 25.0, -1.0),
1615 (1.0, 25.0, 1.0),
1616 (2.0, 25.0, 33554432.0),
1617 (3.0, 25.0, 847288600000.0),
1618 (10.0, 25.0, 1e+25),
1619 (100000.0, 25.0, f32::INFINITY),
1620 (-100000.0, 26.0, f32::INFINITY),
1621 (-10.0, 26.0, 1e+26),
1622 (-3.0, 26.0, 2541866000000.0),
1623 (-2.0, 26.0, 67108864.0),
1624 (-1.0, 26.0, 1.0),
1625 (1.0, 26.0, 1.0),
1626 (2.0, 26.0, 67108864.0),
1627 (3.0, 26.0, 2541866000000.0),
1628 (10.0, 26.0, 1e+26),
1629 (100000.0, 26.0, f32::INFINITY),
1630 (-100000.0, 27.0, -f32::INFINITY),
1631 (-10.0, 27.0, -1e+27),
1632 (-3.0, 27.0, -7625597500000.0),
1633 (-2.0, 27.0, -134217730.0),
1634 (-1.0, 27.0, -1.0),
1635 (1.0, 27.0, 1.0),
1636 (2.0, 27.0, 134217730.0),
1637 (3.0, 27.0, 7625597500000.0),
1638 (10.0, 27.0, 1e+27),
1639 (100000.0, 27.0, f32::INFINITY),
1640 (-100000.0, 28.0, f32::INFINITY),
1641 (-10.0, 28.0, 1e+28),
1642 (-3.0, 28.0, 22876793000000.0),
1643 (-2.0, 28.0, 268435460.0),
1644 (-1.0, 28.0, 1.0),
1645 (1.0, 28.0, 1.0),
1646 (2.0, 28.0, 268435460.0),
1647 (3.0, 28.0, 22876793000000.0),
1648 (10.0, 28.0, 1e+28),
1649 (100000.0, 28.0, f32::INFINITY),
1650 (-100000.0, 29.0, -f32::INFINITY),
1651 (-10.0, 29.0, -1e+29),
1652 (-3.0, 29.0, -68630377000000.0),
1653 (-2.0, 29.0, -536870900.0),
1654 (-1.0, 29.0, -1.0),
1655 (1.0, 29.0, 1.0),
1656 (2.0, 29.0, 536870900.0),
1657 (3.0, 29.0, 68630377000000.0),
1658 (10.0, 29.0, 1e+29),
1659 (100000.0, 29.0, f32::INFINITY),
1660 (-100000.0, 30.0, f32::INFINITY),
1661 (-10.0, 30.0, 1e+30),
1662 (-3.0, 30.0, 205891140000000.0),
1663 (-2.0, 30.0, 1073741800.0),
1664 (-1.0, 30.0, 1.0),
1665 (1.0, 30.0, 1.0),
1666 (2.0, 30.0, 1073741800.0),
1667 (3.0, 30.0, 205891140000000.0),
1668 (10.0, 30.0, 1e+30),
1669 (100000.0, 30.0, f32::INFINITY),
1670 (-100000.0, 31.0, -f32::INFINITY),
1671 (-10.0, 31.0, -1e+31),
1672 (-3.0, 31.0, -617673400000000.0),
1673 (-2.0, 31.0, -2147483600.0),
1674 (-1.0, 31.0, -1.0),
1675 (1.0, 31.0, 1.0),
1676 (2.0, 31.0, 2147483600.0),
1677 (3.0, 31.0, 617673400000000.0),
1678 (10.0, 31.0, 1e+31),
1679 (100000.0, 31.0, f32::INFINITY),
1680 (-100000.0, 32.0, f32::INFINITY),
1681 (-10.0, 32.0, 1e+32),
1682 (-3.0, 32.0, 1853020200000000.0),
1683 (-2.0, 32.0, 4294967300.0),
1684 (-1.0, 32.0, 1.0),
1685 (1.0, 32.0, 1.0),
1686 (2.0, 32.0, 4294967300.0),
1687 (3.0, 32.0, 1853020200000000.0),
1688 (10.0, 32.0, 1e+32),
1689 (100000.0, 32.0, f32::INFINITY),
1690 (-100000.0, 33.0, -f32::INFINITY),
1691 (-10.0, 33.0, -1e+33),
1692 (-3.0, 33.0, -5559060500000000.0),
1693 (-2.0, 33.0, -8589935000.0),
1694 (-1.0, 33.0, -1.0),
1695 (1.0, 33.0, 1.0),
1696 (2.0, 33.0, 8589935000.0),
1697 (3.0, 33.0, 5559060500000000.0),
1698 (10.0, 33.0, 1e+33),
1699 (100000.0, 33.0, f32::INFINITY),
1700 (-100000.0, 34.0, f32::INFINITY),
1701 (-10.0, 34.0, 1e+34),
1702 (-3.0, 34.0, 1.667_718_2e16),
1703 (-2.0, 34.0, 17179870000.0),
1704 (-1.0, 34.0, 1.0),
1705 (1.0, 34.0, 1.0),
1706 (2.0, 34.0, 17179870000.0),
1707 (3.0, 34.0, 1.667_718_2e16),
1708 (10.0, 34.0, 1e+34),
1709 (100000.0, 34.0, f32::INFINITY),
1710 (-100000.0, 35.0, -f32::INFINITY),
1711 (-10.0, 35.0, -1e+35),
1712 (-3.0, 35.0, -5.003_154_6e16),
1713 (-2.0, 35.0, -34359740000.0),
1714 (-1.0, 35.0, -1.0),
1715 (1.0, 35.0, 1.0),
1716 (2.0, 35.0, 34359740000.0),
1717 (3.0, 35.0, 5.003_154_6e16),
1718 (10.0, 35.0, 1e+35),
1719 (100000.0, 35.0, f32::INFINITY),
1720 (-100000.0, 36.0, f32::INFINITY),
1721 (-10.0, 36.0, 1e+36),
1722 (-3.0, 36.0, 1.500_946_4e17),
1723 (-2.0, 36.0, 68719480000.0),
1724 (-1.0, 36.0, 1.0),
1725 (1.0, 36.0, 1.0),
1726 (2.0, 36.0, 68719480000.0),
1727 (3.0, 36.0, 1.500_946_4e17),
1728 (10.0, 36.0, 1e+36),
1729 (100000.0, 36.0, f32::INFINITY),
1730 (-100000.0, 37.0, -f32::INFINITY),
1731 (-10.0, 37.0, -1e+37),
1732 (-3.0, 37.0, -4.502_839e17),
1733 (-2.0, 37.0, -137438950000.0),
1734 (-1.0, 37.0, -1.0),
1735 (1.0, 37.0, 1.0),
1736 (2.0, 37.0, 137438950000.0),
1737 (3.0, 37.0, 4.502_839e17),
1738 (10.0, 37.0, 1e+37),
1739 (100000.0, 37.0, f32::INFINITY),
1740 (-100000.0, 38.0, f32::INFINITY),
1741 (-10.0, 38.0, 1e+38),
1742 (-3.0, 38.0, 1.350_851_7e18),
1743 (-2.0, 38.0, 274877900000.0),
1744 (-1.0, 38.0, 1.0),
1745 (1.0, 38.0, 1.0),
1746 (2.0, 38.0, 274877900000.0),
1747 (3.0, 38.0, 1.350_851_7e18),
1748 (10.0, 38.0, 1e+38),
1749 (100000.0, 38.0, f32::INFINITY),
1750 (-100000.0, 39.0, -f32::INFINITY),
1751 (-10.0, 39.0, -f32::INFINITY),
1752 (-3.0, 39.0, -4.052_555_2e18),
1753 (-2.0, 39.0, -549755800000.0),
1754 (-1.0, 39.0, -1.0),
1755 (1.0, 39.0, 1.0),
1756 (2.0, 39.0, 549755800000.0),
1757 (3.0, 39.0, 4.052_555_2e18),
1758 (10.0, 39.0, f32::INFINITY),
1759 (100000.0, 39.0, f32::INFINITY),
1760 (-100000.0, 40.0, f32::INFINITY),
1761 (-10.0, 40.0, f32::INFINITY),
1762 (-3.0, 40.0, 1.215_766_5e19),
1763 (-2.0, 40.0, 1099511600000.0),
1764 (-1.0, 40.0, 1.0),
1765 (1.0, 40.0, 1.0),
1766 (2.0, 40.0, 1099511600000.0),
1767 (3.0, 40.0, 1.215_766_5e19),
1768 (10.0, 40.0, f32::INFINITY),
1769 (100000.0, 40.0, f32::INFINITY),
1770 (-100000.0, 41.0, -f32::INFINITY),
1771 (-10.0, 41.0, -f32::INFINITY),
1772 (-3.0, 41.0, -3.647_299_5e19),
1773 (-2.0, 41.0, -2199023300000.0),
1774 (-1.0, 41.0, -1.0),
1775 (1.0, 41.0, 1.0),
1776 (2.0, 41.0, 2199023300000.0),
1777 (3.0, 41.0, 3.647_299_5e19),
1778 (10.0, 41.0, f32::INFINITY),
1779 (100000.0, 41.0, f32::INFINITY),
1780 (-100000.0, 42.0, f32::INFINITY),
1781 (-10.0, 42.0, f32::INFINITY),
1782 (-3.0, 42.0, 1.094_189_9e20),
1783 (-2.0, 42.0, 4398046500000.0),
1784 (-1.0, 42.0, 1.0),
1785 (1.0, 42.0, 1.0),
1786 (2.0, 42.0, 4398046500000.0),
1787 (3.0, 42.0, 1.094_189_9e20),
1788 (10.0, 42.0, f32::INFINITY),
1789 (100000.0, 42.0, f32::INFINITY),
1790 (-100000.0, 43.0, -f32::INFINITY),
1791 (-10.0, 43.0, -f32::INFINITY),
1792 (-3.0, 43.0, -3.282_569_6e20),
1793 (-2.0, 43.0, -8796093000000.0),
1794 (-1.0, 43.0, -1.0),
1795 (1.0, 43.0, 1.0),
1796 (2.0, 43.0, 8796093000000.0),
1797 (3.0, 43.0, 3.282_569_6e20),
1798 (10.0, 43.0, f32::INFINITY),
1799 (100000.0, 43.0, f32::INFINITY),
1800 (-100000.0, 44.0, f32::INFINITY),
1801 (-10.0, 44.0, f32::INFINITY),
1802 (-3.0, 44.0, 9.847_709e20),
1803 (-2.0, 44.0, 17592186000000.0),
1804 (-1.0, 44.0, 1.0),
1805 (1.0, 44.0, 1.0),
1806 (2.0, 44.0, 17592186000000.0),
1807 (3.0, 44.0, 9.847_709e20),
1808 (10.0, 44.0, f32::INFINITY),
1809 (100000.0, 44.0, f32::INFINITY),
1810 (-100000.0, 45.0, -f32::INFINITY),
1811 (-10.0, 45.0, -f32::INFINITY),
1812 (-3.0, 45.0, -2.954_312_7e21),
1813 (-2.0, 45.0, -35184372000000.0),
1814 (-1.0, 45.0, -1.0),
1815 (1.0, 45.0, 1.0),
1816 (2.0, 45.0, 35184372000000.0),
1817 (3.0, 45.0, 2.954_312_7e21),
1818 (10.0, 45.0, f32::INFINITY),
1819 (100000.0, 45.0, f32::INFINITY),
1820 (-100000.0, 46.0, f32::INFINITY),
1821 (-10.0, 46.0, f32::INFINITY),
1822 (-3.0, 46.0, 8.862_938e21),
1823 (-2.0, 46.0, 70368744000000.0),
1824 (-1.0, 46.0, 1.0),
1825 (1.0, 46.0, 1.0),
1826 (2.0, 46.0, 70368744000000.0),
1827 (3.0, 46.0, 8.862_938e21),
1828 (10.0, 46.0, f32::INFINITY),
1829 (100000.0, 46.0, f32::INFINITY),
1830 (-100000.0, 47.0, -f32::INFINITY),
1831 (-10.0, 47.0, -f32::INFINITY),
1832 (-3.0, 47.0, -2.658_881_5e22),
1833 (-2.0, 47.0, -140737490000000.0),
1834 (-1.0, 47.0, -1.0),
1835 (1.0, 47.0, 1.0),
1836 (2.0, 47.0, 140737490000000.0),
1837 (3.0, 47.0, 2.658_881_5e22),
1838 (10.0, 47.0, f32::INFINITY),
1839 (100000.0, 47.0, f32::INFINITY),
1840 (-100000.0, 48.0, f32::INFINITY),
1841 (-10.0, 48.0, f32::INFINITY),
1842 (-3.0, 48.0, 7.976_644e22),
1843 (-2.0, 48.0, 281474980000000.0),
1844 (-1.0, 48.0, 1.0),
1845 (1.0, 48.0, 1.0),
1846 (2.0, 48.0, 281474980000000.0),
1847 (3.0, 48.0, 7.976_644e22),
1848 (10.0, 48.0, f32::INFINITY),
1849 (100000.0, 48.0, f32::INFINITY),
1850 (-100000.0, 49.0, -f32::INFINITY),
1851 (-10.0, 49.0, -f32::INFINITY),
1852 (-3.0, 49.0, -2.392_993_2e23),
1853 (-2.0, 49.0, -562949950000000.0),
1854 (-1.0, 49.0, -1.0),
1855 (1.0, 49.0, 1.0),
1856 (2.0, 49.0, 562949950000000.0),
1857 (3.0, 49.0, 2.392_993_2e23),
1858 (10.0, 49.0, f32::INFINITY),
1859 (100000.0, 49.0, f32::INFINITY),
1860 (-100000.0, 50.0, f32::INFINITY),
1861 (-10.0, 50.0, f32::INFINITY),
1862 (-3.0, 50.0, 7.17898e+23),
1863 (-2.0, 50.0, 1125899900000000.0),
1864 (-1.0, 50.0, 1.0),
1865 (1.0, 50.0, 1.0),
1866 (2.0, 50.0, 1125899900000000.0),
1867 (3.0, 50.0, 7.17898e+23),
1868 (10.0, 50.0, f32::INFINITY),
1869 (100000.0, 50.0, f32::INFINITY),
1870 (-100000.0, 51.0, -f32::INFINITY),
1871 (-10.0, 51.0, -f32::INFINITY),
1872 (-3.0, 51.0, -2.153_694e24),
1873 (-2.0, 51.0, -2251799800000000.0),
1874 (-1.0, 51.0, -1.0),
1875 (1.0, 51.0, 1.0),
1876 (2.0, 51.0, 2251799800000000.0),
1877 (3.0, 51.0, 2.153_694e24),
1878 (10.0, 51.0, f32::INFINITY),
1879 (100000.0, 51.0, f32::INFINITY),
1880 (-100000.0, 52.0, f32::INFINITY),
1881 (-10.0, 52.0, f32::INFINITY),
1882 (-3.0, 52.0, 6.461_081_6e24),
1883 (-2.0, 52.0, 4503599600000000.0),
1884 (-1.0, 52.0, 1.0),
1885 (1.0, 52.0, 1.0),
1886 (2.0, 52.0, 4503599600000000.0),
1887 (3.0, 52.0, 6.461_081_6e24),
1888 (10.0, 52.0, f32::INFINITY),
1889 (100000.0, 52.0, f32::INFINITY),
1890 (-100000.0, 53.0, -f32::INFINITY),
1891 (-10.0, 53.0, -f32::INFINITY),
1892 (-3.0, 53.0, -1.938_324_6e25),
1893 (-2.0, 53.0, -9007199000000000.0),
1894 (-1.0, 53.0, -1.0),
1895 (1.0, 53.0, 1.0),
1896 (2.0, 53.0, 9007199000000000.0),
1897 (3.0, 53.0, 1.938_324_6e25),
1898 (10.0, 53.0, f32::INFINITY),
1899 (100000.0, 53.0, f32::INFINITY),
1900 (-100000.0, 54.0, f32::INFINITY),
1901 (-10.0, 54.0, f32::INFINITY),
1902 (-3.0, 54.0, 5.814_973_6e25),
1903 (-2.0, 54.0, 1.801_439_9e16),
1904 (-1.0, 54.0, 1.0),
1905 (1.0, 54.0, 1.0),
1906 (2.0, 54.0, 1.801_439_9e16),
1907 (3.0, 54.0, 5.814_973_6e25),
1908 (10.0, 54.0, f32::INFINITY),
1909 (100000.0, 54.0, f32::INFINITY),
1910 (-100000.0, 55.0, -f32::INFINITY),
1911 (-10.0, 55.0, -f32::INFINITY),
1912 (-3.0, 55.0, -1.744_492_2e26),
1913 (-2.0, 55.0, -3.602_879_7e16),
1914 (-1.0, 55.0, -1.0),
1915 (1.0, 55.0, 1.0),
1916 (2.0, 55.0, 3.602_879_7e16),
1917 (3.0, 55.0, 1.744_492_2e26),
1918 (10.0, 55.0, f32::INFINITY),
1919 (100000.0, 55.0, f32::INFINITY),
1920 (-100000.0, 56.0, f32::INFINITY),
1921 (-10.0, 56.0, f32::INFINITY),
1922 (-3.0, 56.0, 5.233_476_3e26),
1923 (-2.0, 56.0, 7.205_759_4e16),
1924 (-1.0, 56.0, 1.0),
1925 (1.0, 56.0, 1.0),
1926 (2.0, 56.0, 7.205_759_4e16),
1927 (3.0, 56.0, 5.233_476_3e26),
1928 (10.0, 56.0, f32::INFINITY),
1929 (100000.0, 56.0, f32::INFINITY),
1930 (-100000.0, 57.0, -f32::INFINITY),
1931 (-10.0, 57.0, -f32::INFINITY),
1932 (-3.0, 57.0, -1.570_043e27),
1933 (-2.0, 57.0, -1.441_151_9e17),
1934 (-1.0, 57.0, -1.0),
1935 (1.0, 57.0, 1.0),
1936 (2.0, 57.0, 1.441_151_9e17),
1937 (3.0, 57.0, 1.570_043e27),
1938 (10.0, 57.0, f32::INFINITY),
1939 (100000.0, 57.0, f32::INFINITY),
1940 (-100000.0, 58.0, f32::INFINITY),
1941 (-10.0, 58.0, f32::INFINITY),
1942 (-3.0, 58.0, 4.710_128_8e27),
1943 (-2.0, 58.0, 2.882_303_8e17),
1944 (-1.0, 58.0, 1.0),
1945 (1.0, 58.0, 1.0),
1946 (2.0, 58.0, 2.882_303_8e17),
1947 (3.0, 58.0, 4.710_128_8e27),
1948 (10.0, 58.0, f32::INFINITY),
1949 (100000.0, 58.0, f32::INFINITY),
1950 (-100000.0, 59.0, -f32::INFINITY),
1951 (-10.0, 59.0, -f32::INFINITY),
1952 (-3.0, 59.0, -1.413_038_7e28),
1953 (-2.0, 59.0, -5.764_607_5e17),
1954 (-1.0, 59.0, -1.0),
1955 (1.0, 59.0, 1.0),
1956 (2.0, 59.0, 5.764_607_5e17),
1957 (3.0, 59.0, 1.413_038_7e28),
1958 (10.0, 59.0, f32::INFINITY),
1959 (100000.0, 59.0, f32::INFINITY),
1960 (-100000.0, 60.0, f32::INFINITY),
1961 (-10.0, 60.0, f32::INFINITY),
1962 (-3.0, 60.0, 4.239_116e28),
1963 (-2.0, 60.0, 1.152_921_5e18),
1964 (-1.0, 60.0, 1.0),
1965 (1.0, 60.0, 1.0),
1966 (2.0, 60.0, 1.152_921_5e18),
1967 (3.0, 60.0, 4.239_116e28),
1968 (10.0, 60.0, f32::INFINITY),
1969 (100000.0, 60.0, f32::INFINITY),
1970 (-100000.0, 61.0, -f32::INFINITY),
1971 (-10.0, 61.0, -f32::INFINITY),
1972 (-3.0, 61.0, -1.271_734_7e29),
1973 (-2.0, 61.0, -2.305_843e18),
1974 (-1.0, 61.0, -1.0),
1975 (1.0, 61.0, 1.0),
1976 (2.0, 61.0, 2.305_843e18),
1977 (3.0, 61.0, 1.271_734_7e29),
1978 (10.0, 61.0, f32::INFINITY),
1979 (100000.0, 61.0, f32::INFINITY),
1980 (-100000.0, 62.0, f32::INFINITY),
1981 (-10.0, 62.0, f32::INFINITY),
1982 (-3.0, 62.0, 3.815_204_4e29),
1983 (-2.0, 62.0, 4.611_686e18),
1984 (-1.0, 62.0, 1.0),
1985 (1.0, 62.0, 1.0),
1986 (2.0, 62.0, 4.611_686e18),
1987 (3.0, 62.0, 3.815_204_4e29),
1988 (10.0, 62.0, f32::INFINITY),
1989 (100000.0, 62.0, f32::INFINITY),
1990 (-100000.0, 63.0, -f32::INFINITY),
1991 (-10.0, 63.0, -f32::INFINITY),
1992 (-3.0, 63.0, -1.144_561_25e30),
1993 (-2.0, 63.0, -9.223_372e18),
1994 (-1.0, 63.0, -1.0),
1995 (1.0, 63.0, 1.0),
1996 (2.0, 63.0, 9.223_372e18),
1997 (3.0, 63.0, 1.144_561_25e30),
1998 (10.0, 63.0, f32::INFINITY),
1999 (100000.0, 63.0, f32::INFINITY),
2000 (-100000.0, 64.0, f32::INFINITY),
2001 (-10.0, 64.0, f32::INFINITY),
2002 (-3.0, 64.0, 3.433_684e30),
2003 (-2.0, 64.0, 1.844_674_4e19),
2004 (-1.0, 64.0, 1.0),
2005 (1.0, 64.0, 1.0),
2006 (2.0, 64.0, 1.844_674_4e19),
2007 (3.0, 64.0, 3.433_684e30),
2008 (10.0, 64.0, f32::INFINITY),
2009 (100000.0, 64.0, f32::INFINITY),
2010 (-100000.0, 65.0, -f32::INFINITY),
2011 (-10.0, 65.0, -f32::INFINITY),
2012 (-3.0, 65.0, -1.030_105_1e31),
2013 (-2.0, 65.0, -3.689_349e19),
2014 (-1.0, 65.0, -1.0),
2015 (1.0, 65.0, 1.0),
2016 (2.0, 65.0, 3.689_349e19),
2017 (3.0, 65.0, 1.030_105_1e31),
2018 (10.0, 65.0, f32::INFINITY),
2019 (100000.0, 65.0, f32::INFINITY),
2020 (-100000.0, 66.0, f32::INFINITY),
2021 (-10.0, 66.0, f32::INFINITY),
2022 (-3.0, 66.0, 3.090_315_4e31),
2023 (-2.0, 66.0, 7.378_698e19),
2024 (-1.0, 66.0, 1.0),
2025 (1.0, 66.0, 1.0),
2026 (2.0, 66.0, 7.378_698e19),
2027 (3.0, 66.0, 3.090_315_4e31),
2028 (10.0, 66.0, f32::INFINITY),
2029 (100000.0, 66.0, f32::INFINITY),
2030 (-100000.0, 67.0, -f32::INFINITY),
2031 (-10.0, 67.0, -f32::INFINITY),
2032 (-3.0, 67.0, -9.270_946_5e31),
2033 (-2.0, 67.0, -1.475_739_5e20),
2034 (-1.0, 67.0, -1.0),
2035 (1.0, 67.0, 1.0),
2036 (2.0, 67.0, 1.475_739_5e20),
2037 (3.0, 67.0, 9.270_946_5e31),
2038 (10.0, 67.0, f32::INFINITY),
2039 (100000.0, 67.0, f32::INFINITY),
2040 (-100000.0, 68.0, f32::INFINITY),
2041 (-10.0, 68.0, f32::INFINITY),
2042 (-3.0, 68.0, 2.781_284e32),
2043 (-2.0, 68.0, 2.951_479e20),
2044 (-1.0, 68.0, 1.0),
2045 (1.0, 68.0, 1.0),
2046 (2.0, 68.0, 2.951_479e20),
2047 (3.0, 68.0, 2.781_284e32),
2048 (10.0, 68.0, f32::INFINITY),
2049 (100000.0, 68.0, f32::INFINITY),
2050 (-100000.0, 69.0, -f32::INFINITY),
2051 (-10.0, 69.0, -f32::INFINITY),
2052 (-3.0, 69.0, -8.343_852e32),
2053 (-2.0, 69.0, -5.902_958e20),
2054 (-1.0, 69.0, -1.0),
2055 (1.0, 69.0, 1.0),
2056 (2.0, 69.0, 5.902_958e20),
2057 (3.0, 69.0, 8.343_852e32),
2058 (10.0, 69.0, f32::INFINITY),
2059 (100000.0, 69.0, f32::INFINITY),
2060 (-100000.0, 70.0, f32::INFINITY),
2061 (-10.0, 70.0, f32::INFINITY),
2062 (-3.0, 70.0, 2.503_155_5e33),
2063 (-2.0, 70.0, 1.180_591_6e21),
2064 (-1.0, 70.0, 1.0),
2065 (1.0, 70.0, 1.0),
2066 (2.0, 70.0, 1.180_591_6e21),
2067 (3.0, 70.0, 2.503_155_5e33),
2068 (10.0, 70.0, f32::INFINITY),
2069 (100000.0, 70.0, f32::INFINITY),
2070 (-100000.0, 71.0, -f32::INFINITY),
2071 (-10.0, 71.0, -f32::INFINITY),
2072 (-3.0, 71.0, -7.509_466e33),
2073 (-2.0, 71.0, -2.361_183_2e21),
2074 (-1.0, 71.0, -1.0),
2075 (1.0, 71.0, 1.0),
2076 (2.0, 71.0, 2.361_183_2e21),
2077 (3.0, 71.0, 7.509_466e33),
2078 (10.0, 71.0, f32::INFINITY),
2079 (100000.0, 71.0, f32::INFINITY),
2080 (-100000.0, 72.0, f32::INFINITY),
2081 (-10.0, 72.0, f32::INFINITY),
2082 (-3.0, 72.0, 2.25284e+34),
2083 (-2.0, 72.0, 4.722_366_5e21),
2084 (-1.0, 72.0, 1.0),
2085 (1.0, 72.0, 1.0),
2086 (2.0, 72.0, 4.722_366_5e21),
2087 (3.0, 72.0, 2.25284e+34),
2088 (10.0, 72.0, f32::INFINITY),
2089 (100000.0, 72.0, f32::INFINITY),
2090 (-100000.0, 73.0, -f32::INFINITY),
2091 (-10.0, 73.0, -f32::INFINITY),
2092 (-3.0, 73.0, -6.75852e+34),
2093 (-2.0, 73.0, -9.444_733e21),
2094 (-1.0, 73.0, -1.0),
2095 (1.0, 73.0, 1.0),
2096 (2.0, 73.0, 9.444_733e21),
2097 (3.0, 73.0, 6.75852e+34),
2098 (10.0, 73.0, f32::INFINITY),
2099 (100000.0, 73.0, f32::INFINITY),
2100 (-100000.0, 74.0, f32::INFINITY),
2101 (-10.0, 74.0, f32::INFINITY),
2102 (-3.0, 74.0, 2.027_556e35),
2103 (-2.0, 74.0, 1.888_946_6e22),
2104 (-1.0, 74.0, 1.0),
2105 (1.0, 74.0, 1.0),
2106 (2.0, 74.0, 1.888_946_6e22),
2107 (3.0, 74.0, 2.027_556e35),
2108 (10.0, 74.0, f32::INFINITY),
2109 (100000.0, 74.0, f32::INFINITY),
2110 (-100000.0, 75.0, -f32::INFINITY),
2111 (-10.0, 75.0, -f32::INFINITY),
2112 (-3.0, 75.0, -6.082_667_7e35),
2113 (-2.0, 75.0, -3.777_893_2e22),
2114 (-1.0, 75.0, -1.0),
2115 (1.0, 75.0, 1.0),
2116 (2.0, 75.0, 3.777_893_2e22),
2117 (3.0, 75.0, 6.082_667_7e35),
2118 (10.0, 75.0, f32::INFINITY),
2119 (100000.0, 75.0, f32::INFINITY),
2120 (-100000.0, 76.0, f32::INFINITY),
2121 (-10.0, 76.0, f32::INFINITY),
2122 (-3.0, 76.0, 1.824_800_3e36),
2123 (-2.0, 76.0, 7.555_786_4e22),
2124 (-1.0, 76.0, 1.0),
2125 (1.0, 76.0, 1.0),
2126 (2.0, 76.0, 7.555_786_4e22),
2127 (3.0, 76.0, 1.824_800_3e36),
2128 (10.0, 76.0, f32::INFINITY),
2129 (100000.0, 76.0, f32::INFINITY),
2130 (-100000.0, 77.0, -f32::INFINITY),
2131 (-10.0, 77.0, -f32::INFINITY),
2132 (-3.0, 77.0, -5.474_401e36),
2133 (-2.0, 77.0, -1.511_157_3e23),
2134 (-1.0, 77.0, -1.0),
2135 (1.0, 77.0, 1.0),
2136 (2.0, 77.0, 1.511_157_3e23),
2137 (3.0, 77.0, 5.474_401e36),
2138 (10.0, 77.0, f32::INFINITY),
2139 (100000.0, 77.0, f32::INFINITY),
2140 (-100000.0, 78.0, f32::INFINITY),
2141 (-10.0, 78.0, f32::INFINITY),
2142 (-3.0, 78.0, 1.642_320_3e37),
2143 (-2.0, 78.0, 3.022_314_5e23),
2144 (-1.0, 78.0, 1.0),
2145 (1.0, 78.0, 1.0),
2146 (2.0, 78.0, 3.022_314_5e23),
2147 (3.0, 78.0, 1.642_320_3e37),
2148 (10.0, 78.0, f32::INFINITY),
2149 (100000.0, 78.0, f32::INFINITY),
2150 (-100000.0, 79.0, -f32::INFINITY),
2151 (-10.0, 79.0, -f32::INFINITY),
2152 (-3.0, 79.0, -4.926_961e37),
2153 (-2.0, 79.0, -6.044_629e23),
2154 (-1.0, 79.0, -1.0),
2155 (1.0, 79.0, 1.0),
2156 (2.0, 79.0, 6.044_629e23),
2157 (3.0, 79.0, 4.926_961e37),
2158 (10.0, 79.0, f32::INFINITY),
2159 (100000.0, 79.0, f32::INFINITY),
2160 (-100000.0, 80.0, f32::INFINITY),
2161 (-10.0, 80.0, f32::INFINITY),
2162 (-3.0, 80.0, 1.478_088_3e38),
2163 (-2.0, 80.0, 1.208_925_8e24),
2164 (-1.0, 80.0, 1.0),
2165 (1.0, 80.0, 1.0),
2166 (2.0, 80.0, 1.208_925_8e24),
2167 (3.0, 80.0, 1.478_088_3e38),
2168 (10.0, 80.0, f32::INFINITY),
2169 (100000.0, 80.0, f32::INFINITY),
2170 (-100000.0, 81.0, -f32::INFINITY),
2171 (-10.0, 81.0, -f32::INFINITY),
2172 (-3.0, 81.0, -f32::INFINITY),
2173 (-2.0, 81.0, -2.417_851_6e24),
2174 (-1.0, 81.0, -1.0),
2175 (1.0, 81.0, 1.0),
2176 (2.0, 81.0, 2.417_851_6e24),
2177 (3.0, 81.0, f32::INFINITY),
2178 (10.0, 81.0, f32::INFINITY),
2179 (100000.0, 81.0, f32::INFINITY),
2180 (-100000.0, 82.0, f32::INFINITY),
2181 (-10.0, 82.0, f32::INFINITY),
2182 (-3.0, 82.0, f32::INFINITY),
2183 (-2.0, 82.0, 4.835_703_3e24),
2184 (-1.0, 82.0, 1.0),
2185 (1.0, 82.0, 1.0),
2186 (2.0, 82.0, 4.835_703_3e24),
2187 (3.0, 82.0, f32::INFINITY),
2188 (10.0, 82.0, f32::INFINITY),
2189 (100000.0, 82.0, f32::INFINITY),
2190 (-100000.0, 83.0, -f32::INFINITY),
2191 (-10.0, 83.0, -f32::INFINITY),
2192 (-3.0, 83.0, -f32::INFINITY),
2193 (-2.0, 83.0, -9.671_407e24),
2194 (-1.0, 83.0, -1.0),
2195 (1.0, 83.0, 1.0),
2196 (2.0, 83.0, 9.671_407e24),
2197 (3.0, 83.0, f32::INFINITY),
2198 (10.0, 83.0, f32::INFINITY),
2199 (100000.0, 83.0, f32::INFINITY),
2200 (-100000.0, 84.0, f32::INFINITY),
2201 (-10.0, 84.0, f32::INFINITY),
2202 (-3.0, 84.0, f32::INFINITY),
2203 (-2.0, 84.0, 1.934_281_3e25),
2204 (-1.0, 84.0, 1.0),
2205 (1.0, 84.0, 1.0),
2206 (2.0, 84.0, 1.934_281_3e25),
2207 (3.0, 84.0, f32::INFINITY),
2208 (10.0, 84.0, f32::INFINITY),
2209 (100000.0, 84.0, f32::INFINITY),
2210 (-100000.0, 85.0, -f32::INFINITY),
2211 (-10.0, 85.0, -f32::INFINITY),
2212 (-3.0, 85.0, -f32::INFINITY),
2213 (-2.0, 85.0, -3.868_562_6e25),
2214 (-1.0, 85.0, -1.0),
2215 (1.0, 85.0, 1.0),
2216 (2.0, 85.0, 3.868_562_6e25),
2217 (3.0, 85.0, f32::INFINITY),
2218 (10.0, 85.0, f32::INFINITY),
2219 (100000.0, 85.0, f32::INFINITY),
2220 (-100000.0, 86.0, f32::INFINITY),
2221 (-10.0, 86.0, f32::INFINITY),
2222 (-3.0, 86.0, f32::INFINITY),
2223 (-2.0, 86.0, 7.737_125_2e25),
2224 (-1.0, 86.0, 1.0),
2225 (1.0, 86.0, 1.0),
2226 (2.0, 86.0, 7.737_125_2e25),
2227 (3.0, 86.0, f32::INFINITY),
2228 (10.0, 86.0, f32::INFINITY),
2229 (100000.0, 86.0, f32::INFINITY),
2230 (-100000.0, 87.0, -f32::INFINITY),
2231 (-10.0, 87.0, -f32::INFINITY),
2232 (-3.0, 87.0, -f32::INFINITY),
2233 (-2.0, 87.0, -1.547_425_1e26),
2234 (-1.0, 87.0, -1.0),
2235 (1.0, 87.0, 1.0),
2236 (2.0, 87.0, 1.547_425_1e26),
2237 (3.0, 87.0, f32::INFINITY),
2238 (10.0, 87.0, f32::INFINITY),
2239 (100000.0, 87.0, f32::INFINITY),
2240 (-100000.0, 88.0, f32::INFINITY),
2241 (-10.0, 88.0, f32::INFINITY),
2242 (-3.0, 88.0, f32::INFINITY),
2243 (-2.0, 88.0, 3.094_850_1e26),
2244 (-1.0, 88.0, 1.0),
2245 (1.0, 88.0, 1.0),
2246 (2.0, 88.0, 3.094_850_1e26),
2247 (3.0, 88.0, f32::INFINITY),
2248 (10.0, 88.0, f32::INFINITY),
2249 (100000.0, 88.0, f32::INFINITY),
2250 (-100000.0, 89.0, -f32::INFINITY),
2251 (-10.0, 89.0, -f32::INFINITY),
2252 (-3.0, 89.0, -f32::INFINITY),
2253 (-2.0, 89.0, -6.189_700_2e26),
2254 (-1.0, 89.0, -1.0),
2255 (1.0, 89.0, 1.0),
2256 (2.0, 89.0, 6.189_700_2e26),
2257 (3.0, 89.0, f32::INFINITY),
2258 (10.0, 89.0, f32::INFINITY),
2259 (100000.0, 89.0, f32::INFINITY),
2260 (-100000.0, 90.0, f32::INFINITY),
2261 (-10.0, 90.0, f32::INFINITY),
2262 (-3.0, 90.0, f32::INFINITY),
2263 (-2.0, 90.0, 1.237_940_1e27),
2264 (-1.0, 90.0, 1.0),
2265 (1.0, 90.0, 1.0),
2266 (2.0, 90.0, 1.237_940_1e27),
2267 (3.0, 90.0, f32::INFINITY),
2268 (10.0, 90.0, f32::INFINITY),
2269 (100000.0, 90.0, f32::INFINITY),
2270 (-100000.0, 91.0, -f32::INFINITY),
2271 (-10.0, 91.0, -f32::INFINITY),
2272 (-3.0, 91.0, -f32::INFINITY),
2273 (-2.0, 91.0, -2.475_880_1e27),
2274 (-1.0, 91.0, -1.0),
2275 (1.0, 91.0, 1.0),
2276 (2.0, 91.0, 2.475_880_1e27),
2277 (3.0, 91.0, f32::INFINITY),
2278 (10.0, 91.0, f32::INFINITY),
2279 (100000.0, 91.0, f32::INFINITY),
2280 (-100000.0, 92.0, f32::INFINITY),
2281 (-10.0, 92.0, f32::INFINITY),
2282 (-3.0, 92.0, f32::INFINITY),
2283 (-2.0, 92.0, 4.951_760_2e27),
2284 (-1.0, 92.0, 1.0),
2285 (1.0, 92.0, 1.0),
2286 (2.0, 92.0, 4.951_760_2e27),
2287 (3.0, 92.0, f32::INFINITY),
2288 (10.0, 92.0, f32::INFINITY),
2289 (100000.0, 92.0, f32::INFINITY),
2290 (-100000.0, 93.0, -f32::INFINITY),
2291 (-10.0, 93.0, -f32::INFINITY),
2292 (-3.0, 93.0, -f32::INFINITY),
2293 (-2.0, 93.0, -9.903_520_3e27),
2294 (-1.0, 93.0, -1.0),
2295 (1.0, 93.0, 1.0),
2296 (2.0, 93.0, 9.903_520_3e27),
2297 (3.0, 93.0, f32::INFINITY),
2298 (10.0, 93.0, f32::INFINITY),
2299 (100000.0, 93.0, f32::INFINITY),
2300 (-100000.0, 94.0, f32::INFINITY),
2301 (-10.0, 94.0, f32::INFINITY),
2302 (-3.0, 94.0, f32::INFINITY),
2303 (-2.0, 94.0, 1.980_704_1e28),
2304 (-1.0, 94.0, 1.0),
2305 (1.0, 94.0, 1.0),
2306 (2.0, 94.0, 1.980_704_1e28),
2307 (3.0, 94.0, f32::INFINITY),
2308 (10.0, 94.0, f32::INFINITY),
2309 (100000.0, 94.0, f32::INFINITY),
2310 (-100000.0, 95.0, -f32::INFINITY),
2311 (-10.0, 95.0, -f32::INFINITY),
2312 (-3.0, 95.0, -f32::INFINITY),
2313 (-2.0, 95.0, -3.961_408_1e28),
2314 (-1.0, 95.0, -1.0),
2315 (1.0, 95.0, 1.0),
2316 (2.0, 95.0, 3.961_408_1e28),
2317 (3.0, 95.0, f32::INFINITY),
2318 (10.0, 95.0, f32::INFINITY),
2319 (100000.0, 95.0, f32::INFINITY),
2320 (-100000.0, 96.0, f32::INFINITY),
2321 (-10.0, 96.0, f32::INFINITY),
2322 (-3.0, 96.0, f32::INFINITY),
2323 (-2.0, 96.0, 7.922_816_3e28),
2324 (-1.0, 96.0, 1.0),
2325 (1.0, 96.0, 1.0),
2326 (2.0, 96.0, 7.922_816_3e28),
2327 (3.0, 96.0, f32::INFINITY),
2328 (10.0, 96.0, f32::INFINITY),
2329 (100000.0, 96.0, f32::INFINITY),
2330 (-100000.0, 97.0, -f32::INFINITY),
2331 (-10.0, 97.0, -f32::INFINITY),
2332 (-3.0, 97.0, -f32::INFINITY),
2333 (-2.0, 97.0, -1.584_563_3e29),
2334 (-1.0, 97.0, -1.0),
2335 (1.0, 97.0, 1.0),
2336 (2.0, 97.0, 1.584_563_3e29),
2337 (3.0, 97.0, f32::INFINITY),
2338 (10.0, 97.0, f32::INFINITY),
2339 (100000.0, 97.0, f32::INFINITY),
2340 (-100000.0, 98.0, f32::INFINITY),
2341 (-10.0, 98.0, f32::INFINITY),
2342 (-3.0, 98.0, f32::INFINITY),
2343 (-2.0, 98.0, 3.169_126_5e29),
2344 (-1.0, 98.0, 1.0),
2345 (1.0, 98.0, 1.0),
2346 (2.0, 98.0, 3.169_126_5e29),
2347 (3.0, 98.0, f32::INFINITY),
2348 (10.0, 98.0, f32::INFINITY),
2349 (100000.0, 98.0, f32::INFINITY),
2350 (-100000.0, 99.0, -f32::INFINITY),
2351 (-10.0, 99.0, -f32::INFINITY),
2352 (-3.0, 99.0, -f32::INFINITY),
2353 (-2.0, 99.0, -6.338_253e29),
2354 (-1.0, 99.0, -1.0),
2355 (1.0, 99.0, 1.0),
2356 (2.0, 99.0, 6.338_253e29),
2357 (3.0, 99.0, f32::INFINITY),
2358 (10.0, 99.0, f32::INFINITY),
2359 (100000.0, 99.0, f32::INFINITY),
2360 (-100000.0, 100.0, f32::INFINITY),
2361 (-10.0, 100.0, f32::INFINITY),
2362 (-3.0, 100.0, f32::INFINITY),
2363 (-2.0, 100.0, 1.267_650_6e30),
2364 (-1.0, 100.0, 1.0),
2365 (1.0, 100.0, 1.0),
2366 (2.0, 100.0, 1.267_650_6e30),
2367 (3.0, 100.0, f32::INFINITY),
2368 (10.0, 100.0, f32::INFINITY),
2369 (100000.0, 100.0, f32::INFINITY),
2370 (-100000.0, 101.0, -f32::INFINITY),
2371 (-10.0, 101.0, -f32::INFINITY),
2372 (-3.0, 101.0, -f32::INFINITY),
2373 (-2.0, 101.0, -2.535_301_2e30),
2374 (-1.0, 101.0, -1.0),
2375 (1.0, 101.0, 1.0),
2376 (2.0, 101.0, 2.535_301_2e30),
2377 (3.0, 101.0, f32::INFINITY),
2378 (10.0, 101.0, f32::INFINITY),
2379 (100000.0, 101.0, f32::INFINITY),
2380 (-100000.0, 102.0, f32::INFINITY),
2381 (-10.0, 102.0, f32::INFINITY),
2382 (-3.0, 102.0, f32::INFINITY),
2383 (-2.0, 102.0, 5.070_602_4e30),
2384 (-1.0, 102.0, 1.0),
2385 (1.0, 102.0, 1.0),
2386 (2.0, 102.0, 5.070_602_4e30),
2387 (3.0, 102.0, f32::INFINITY),
2388 (10.0, 102.0, f32::INFINITY),
2389 (100000.0, 102.0, f32::INFINITY),
2390 (-100000.0, 103.0, -f32::INFINITY),
2391 (-10.0, 103.0, -f32::INFINITY),
2392 (-3.0, 103.0, -f32::INFINITY),
2393 (-2.0, 103.0, -1.014_120_5e31),
2394 (-1.0, 103.0, -1.0),
2395 (1.0, 103.0, 1.0),
2396 (2.0, 103.0, 1.014_120_5e31),
2397 (3.0, 103.0, f32::INFINITY),
2398 (10.0, 103.0, f32::INFINITY),
2399 (100000.0, 103.0, f32::INFINITY),
2400 (-100000.0, 104.0, f32::INFINITY),
2401 (-10.0, 104.0, f32::INFINITY),
2402 (-3.0, 104.0, f32::INFINITY),
2403 (-2.0, 104.0, 2.028_241e31),
2404 (-1.0, 104.0, 1.0),
2405 (1.0, 104.0, 1.0),
2406 (2.0, 104.0, 2.028_241e31),
2407 (3.0, 104.0, f32::INFINITY),
2408 (10.0, 104.0, f32::INFINITY),
2409 (100000.0, 104.0, f32::INFINITY),
2410 (-100000.0, 105.0, -f32::INFINITY),
2411 (-10.0, 105.0, -f32::INFINITY),
2412 (-3.0, 105.0, -f32::INFINITY),
2413 (-2.0, 105.0, -4.056_482e31),
2414 (-1.0, 105.0, -1.0),
2415 (1.0, 105.0, 1.0),
2416 (2.0, 105.0, 4.056_482e31),
2417 (3.0, 105.0, f32::INFINITY),
2418 (10.0, 105.0, f32::INFINITY),
2419 (100000.0, 105.0, f32::INFINITY),
2420 (-100000.0, 106.0, f32::INFINITY),
2421 (-10.0, 106.0, f32::INFINITY),
2422 (-3.0, 106.0, f32::INFINITY),
2423 (-2.0, 106.0, 8.112_964e31),
2424 (-1.0, 106.0, 1.0),
2425 (1.0, 106.0, 1.0),
2426 (2.0, 106.0, 8.112_964e31),
2427 (3.0, 106.0, f32::INFINITY),
2428 (10.0, 106.0, f32::INFINITY),
2429 (100000.0, 106.0, f32::INFINITY),
2430 (-100000.0, 107.0, -f32::INFINITY),
2431 (-10.0, 107.0, -f32::INFINITY),
2432 (-3.0, 107.0, -f32::INFINITY),
2433 (-2.0, 107.0, -1.622_592_8e32),
2434 (-1.0, 107.0, -1.0),
2435 (1.0, 107.0, 1.0),
2436 (2.0, 107.0, 1.622_592_8e32),
2437 (3.0, 107.0, f32::INFINITY),
2438 (10.0, 107.0, f32::INFINITY),
2439 (100000.0, 107.0, f32::INFINITY),
2440 (-100000.0, 108.0, f32::INFINITY),
2441 (-10.0, 108.0, f32::INFINITY),
2442 (-3.0, 108.0, f32::INFINITY),
2443 (-2.0, 108.0, 3.245_185_5e32),
2444 (-1.0, 108.0, 1.0),
2445 (1.0, 108.0, 1.0),
2446 (2.0, 108.0, 3.245_185_5e32),
2447 (3.0, 108.0, f32::INFINITY),
2448 (10.0, 108.0, f32::INFINITY),
2449 (100000.0, 108.0, f32::INFINITY),
2450 (-100000.0, 109.0, -f32::INFINITY),
2451 (-10.0, 109.0, -f32::INFINITY),
2452 (-3.0, 109.0, -f32::INFINITY),
2453 (-2.0, 109.0, -6.490_371e32),
2454 (-1.0, 109.0, -1.0),
2455 (1.0, 109.0, 1.0),
2456 (2.0, 109.0, 6.490_371e32),
2457 (3.0, 109.0, f32::INFINITY),
2458 (10.0, 109.0, f32::INFINITY),
2459 (100000.0, 109.0, f32::INFINITY),
2460 (-100000.0, 110.0, f32::INFINITY),
2461 (-10.0, 110.0, f32::INFINITY),
2462 (-3.0, 110.0, f32::INFINITY),
2463 (-2.0, 110.0, 1.298_074_2e33),
2464 (-1.0, 110.0, 1.0),
2465 (1.0, 110.0, 1.0),
2466 (2.0, 110.0, 1.298_074_2e33),
2467 (3.0, 110.0, f32::INFINITY),
2468 (10.0, 110.0, f32::INFINITY),
2469 (100000.0, 110.0, f32::INFINITY),
2470 (-100000.0, 111.0, -f32::INFINITY),
2471 (-10.0, 111.0, -f32::INFINITY),
2472 (-3.0, 111.0, -f32::INFINITY),
2473 (-2.0, 111.0, -2.596_148_4e33),
2474 (-1.0, 111.0, -1.0),
2475 (1.0, 111.0, 1.0),
2476 (2.0, 111.0, 2.596_148_4e33),
2477 (3.0, 111.0, f32::INFINITY),
2478 (10.0, 111.0, f32::INFINITY),
2479 (100000.0, 111.0, f32::INFINITY),
2480 (-100000.0, 112.0, f32::INFINITY),
2481 (-10.0, 112.0, f32::INFINITY),
2482 (-3.0, 112.0, f32::INFINITY),
2483 (-2.0, 112.0, 5.192_297e33),
2484 (-1.0, 112.0, 1.0),
2485 (1.0, 112.0, 1.0),
2486 (2.0, 112.0, 5.192_297e33),
2487 (3.0, 112.0, f32::INFINITY),
2488 (10.0, 112.0, f32::INFINITY),
2489 (100000.0, 112.0, f32::INFINITY),
2490 (-100000.0, 113.0, -f32::INFINITY),
2491 (-10.0, 113.0, -f32::INFINITY),
2492 (-3.0, 113.0, -f32::INFINITY),
2493 (-2.0, 113.0, -1.038_459_4e34),
2494 (-1.0, 113.0, -1.0),
2495 (1.0, 113.0, 1.0),
2496 (2.0, 113.0, 1.038_459_4e34),
2497 (3.0, 113.0, f32::INFINITY),
2498 (10.0, 113.0, f32::INFINITY),
2499 (100000.0, 113.0, f32::INFINITY),
2500 (-100000.0, 114.0, f32::INFINITY),
2501 (-10.0, 114.0, f32::INFINITY),
2502 (-3.0, 114.0, f32::INFINITY),
2503 (-2.0, 114.0, 2.076_918_7e34),
2504 (-1.0, 114.0, 1.0),
2505 (1.0, 114.0, 1.0),
2506 (2.0, 114.0, 2.076_918_7e34),
2507 (3.0, 114.0, f32::INFINITY),
2508 (10.0, 114.0, f32::INFINITY),
2509 (100000.0, 114.0, f32::INFINITY),
2510 (-100000.0, 115.0, -f32::INFINITY),
2511 (-10.0, 115.0, -f32::INFINITY),
2512 (-3.0, 115.0, -f32::INFINITY),
2513 (-2.0, 115.0, -4.153_837_5e34),
2514 (-1.0, 115.0, -1.0),
2515 (1.0, 115.0, 1.0),
2516 (2.0, 115.0, 4.153_837_5e34),
2517 (3.0, 115.0, f32::INFINITY),
2518 (10.0, 115.0, f32::INFINITY),
2519 (100000.0, 115.0, f32::INFINITY),
2520 (-100000.0, 116.0, f32::INFINITY),
2521 (-10.0, 116.0, f32::INFINITY),
2522 (-3.0, 116.0, f32::INFINITY),
2523 (-2.0, 116.0, 8.307_675e34),
2524 (-1.0, 116.0, 1.0),
2525 (1.0, 116.0, 1.0),
2526 (2.0, 116.0, 8.307_675e34),
2527 (3.0, 116.0, f32::INFINITY),
2528 (10.0, 116.0, f32::INFINITY),
2529 (100000.0, 116.0, f32::INFINITY),
2530 (-100000.0, 117.0, -f32::INFINITY),
2531 (-10.0, 117.0, -f32::INFINITY),
2532 (-3.0, 117.0, -f32::INFINITY),
2533 (-2.0, 117.0, -1.661_535e35),
2534 (-1.0, 117.0, -1.0),
2535 (1.0, 117.0, 1.0),
2536 (2.0, 117.0, 1.661_535e35),
2537 (3.0, 117.0, f32::INFINITY),
2538 (10.0, 117.0, f32::INFINITY),
2539 (100000.0, 117.0, f32::INFINITY),
2540 (-100000.0, 118.0, f32::INFINITY),
2541 (-10.0, 118.0, f32::INFINITY),
2542 (-3.0, 118.0, f32::INFINITY),
2543 (-2.0, 118.0, 3.32307e+35),
2544 (-1.0, 118.0, 1.0),
2545 (1.0, 118.0, 1.0),
2546 (2.0, 118.0, 3.32307e+35),
2547 (3.0, 118.0, f32::INFINITY),
2548 (10.0, 118.0, f32::INFINITY),
2549 (100000.0, 118.0, f32::INFINITY),
2550 (-100000.0, 119.0, -f32::INFINITY),
2551 (-10.0, 119.0, -f32::INFINITY),
2552 (-3.0, 119.0, -f32::INFINITY),
2553 (-2.0, 119.0, -6.64614e+35),
2554 (-1.0, 119.0, -1.0),
2555 (1.0, 119.0, 1.0),
2556 (2.0, 119.0, 6.64614e+35),
2557 (3.0, 119.0, f32::INFINITY),
2558 (10.0, 119.0, f32::INFINITY),
2559 (100000.0, 119.0, f32::INFINITY),
2560 (-100000.0, 120.0, f32::INFINITY),
2561 (-10.0, 120.0, f32::INFINITY),
2562 (-3.0, 120.0, f32::INFINITY),
2563 (-2.0, 120.0, 1.329_228e36),
2564 (-1.0, 120.0, 1.0),
2565 (1.0, 120.0, 1.0),
2566 (2.0, 120.0, 1.329_228e36),
2567 (3.0, 120.0, f32::INFINITY),
2568 (10.0, 120.0, f32::INFINITY),
2569 (100000.0, 120.0, f32::INFINITY),
2570 (-100000.0, 121.0, -f32::INFINITY),
2571 (-10.0, 121.0, -f32::INFINITY),
2572 (-3.0, 121.0, -f32::INFINITY),
2573 (-2.0, 121.0, -2.658_456e36),
2574 (-1.0, 121.0, -1.0),
2575 (1.0, 121.0, 1.0),
2576 (2.0, 121.0, 2.658_456e36),
2577 (3.0, 121.0, f32::INFINITY),
2578 (10.0, 121.0, f32::INFINITY),
2579 (100000.0, 121.0, f32::INFINITY),
2580 (-100000.0, 122.0, f32::INFINITY),
2581 (-10.0, 122.0, f32::INFINITY),
2582 (-3.0, 122.0, f32::INFINITY),
2583 (-2.0, 122.0, 5.316_912e36),
2584 (-1.0, 122.0, 1.0),
2585 (1.0, 122.0, 1.0),
2586 (2.0, 122.0, 5.316_912e36),
2587 (3.0, 122.0, f32::INFINITY),
2588 (10.0, 122.0, f32::INFINITY),
2589 (100000.0, 122.0, f32::INFINITY),
2590 (-100000.0, 123.0, -f32::INFINITY),
2591 (-10.0, 123.0, -f32::INFINITY),
2592 (-3.0, 123.0, -f32::INFINITY),
2593 (-2.0, 123.0, -1.063_382_4e37),
2594 (-1.0, 123.0, -1.0),
2595 (1.0, 123.0, 1.0),
2596 (2.0, 123.0, 1.063_382_4e37),
2597 (3.0, 123.0, f32::INFINITY),
2598 (10.0, 123.0, f32::INFINITY),
2599 (100000.0, 123.0, f32::INFINITY),
2600 (-100000.0, 124.0, f32::INFINITY),
2601 (-10.0, 124.0, f32::INFINITY),
2602 (-3.0, 124.0, f32::INFINITY),
2603 (-2.0, 124.0, 2.126_764_8e37),
2604 (-1.0, 124.0, 1.0),
2605 (1.0, 124.0, 1.0),
2606 (2.0, 124.0, 2.126_764_8e37),
2607 (3.0, 124.0, f32::INFINITY),
2608 (10.0, 124.0, f32::INFINITY),
2609 (100000.0, 124.0, f32::INFINITY),
2610 (-100000.0, 125.0, -f32::INFINITY),
2611 (-10.0, 125.0, -f32::INFINITY),
2612 (-3.0, 125.0, -f32::INFINITY),
2613 (-2.0, 125.0, -4.253_529_6e37),
2614 (-1.0, 125.0, -1.0),
2615 (1.0, 125.0, 1.0),
2616 (2.0, 125.0, 4.253_529_6e37),
2617 (3.0, 125.0, f32::INFINITY),
2618 (10.0, 125.0, f32::INFINITY),
2619 (100000.0, 125.0, f32::INFINITY),
2620 (-100000.0, 126.0, f32::INFINITY),
2621 (-10.0, 126.0, f32::INFINITY),
2622 (-3.0, 126.0, f32::INFINITY),
2623 (-2.0, 126.0, 8.507_059e37),
2624 (-1.0, 126.0, 1.0),
2625 (1.0, 126.0, 1.0),
2626 (2.0, 126.0, 8.507_059e37),
2627 (3.0, 126.0, f32::INFINITY),
2628 (10.0, 126.0, f32::INFINITY),
2629 (100000.0, 126.0, f32::INFINITY),
2630 (-100000.0, 127.0, -f32::INFINITY),
2631 (-10.0, 127.0, -f32::INFINITY),
2632 (-3.0, 127.0, -f32::INFINITY),
2633 (-2.0, 127.0, -1.701_411_8e38),
2634 (-1.0, 127.0, -1.0),
2635 (1.0, 127.0, 1.0),
2636 (2.0, 127.0, 1.701_411_8e38),
2637 (3.0, 127.0, f32::INFINITY),
2638 (10.0, 127.0, f32::INFINITY),
2639 (100000.0, 127.0, f32::INFINITY),
2640 (-100000.0, 128.0, f32::INFINITY),
2641 (-10.0, 128.0, f32::INFINITY),
2642 (-3.0, 128.0, f32::INFINITY),
2643 (-2.0, 128.0, f32::INFINITY),
2644 (-1.0, 128.0, 1.0),
2645 (1.0, 128.0, 1.0),
2646 (2.0, 128.0, f32::INFINITY),
2647 (3.0, 128.0, f32::INFINITY),
2648 (10.0, 128.0, f32::INFINITY),
2649 (100000.0, 128.0, f32::INFINITY),
2650 (0.0, 3.0, 0.0),
2651 (-0.0, 3.0, 0.0),
2652 (0.0, -3.0, f32::INFINITY),
2653 (-0.0, -3.0, -f32::INFINITY),
2654 (-0.0, -2.0, f32::INFINITY),
2655 (0.75, -150.0, 5.505_674e18),
2656 (-0.75, -150.0, 5.505_674e18),
2657 (1.1, -150.0, 6.181_527_4e-7),
2658 (1.1, 150.0, 1617723.1),
2659 ];
2660
2661 fn calc_relative_error(experimental: F32, expected: f32) -> F32 {
2662 if experimental.is_nan() && expected.is_nan() || experimental.0 == expected {
2663 F32::ZERO
2664 } else if expected != 0.0 {
2665 (experimental - expected).abs() / expected
2666 } else {
2667 (experimental - expected).abs() / (expected + 1.0e-20)
2668 }
2669 }
2670
2671 #[test]
2672 fn sanity_check() {
2673 for &(base_input, power_input, expected) in TEST_VECTORS {
2674 let exp_x = F32(base_input).powi(power_input as i32);
2675 let relative_error = calc_relative_error(exp_x, expected);
2676
2677 assert!(
2678 relative_error <= MAX_ERROR,
2679 "relative_error {} too large for input {}.powi({}) : {} vs {}",
2680 relative_error,
2681 base_input,
2682 power_input,
2683 exp_x,
2684 expected
2685 );
2686 }
2687 }
2688}
2689