]> git.ipfire.org Git - thirdparty/gcc.git/blob - libstdc++-v3/testsuite/special_functions/02_assoc_legendre/check_value.cc
Only run math special function tests for C++11 and later
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / special_functions / 02_assoc_legendre / check_value.cc
1 // { dg-do run { target c++11 } }
2 // { dg-options "-D__STDCPP_WANT_MATH_SPEC_FUNCS__ -ffp-contract=off" }
3
4 // Copyright (C) 2016 Free Software Foundation, Inc.
5 //
6 // This file is part of the GNU ISO C++ Library. This library is free
7 // software; you can redistribute it and/or modify it under the
8 // terms of the GNU General Public License as published by the
9 // Free Software Foundation; either version 3, or (at your option)
10 // any later version.
11 //
12 // This library is distributed in the hope that it will be useful,
13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 // GNU General Public License for more details.
16 //
17 // You should have received a copy of the GNU General Public License along
18 // with this library; see the file COPYING3. If not see
19 // <http://www.gnu.org/licenses/>.
20
21 // assoc_legendre
22 // Compare against values generated by the GNU Scientific Library.
23 // The GSL can be found on the web: http://www.gnu.org/software/gsl/
24 #include <limits>
25 #include <cmath>
26 #if defined(__TEST_DEBUG)
27 # include <iostream>
28 # define VERIFY(A) \
29 if (!(A)) \
30 { \
31 std::cout << "line " << __LINE__ \
32 << " max_abs_frac = " << max_abs_frac \
33 << std::endl; \
34 }
35 #else
36 # include <testsuite_hooks.h>
37 #endif
38 #include <specfun_testcase.h>
39
40
41 // Test data for l=0, m=0.
42 // max(|f - f_GSL|): 0.0000000000000000
43 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
44 const testcase_assoc_legendre<double>
45 data001[21] =
46 {
47 { 1.0000000000000000, 0, 0,
48 -1.0000000000000000 },
49 { 1.0000000000000000, 0, 0,
50 -0.90000000000000002 },
51 { 1.0000000000000000, 0, 0,
52 -0.80000000000000004 },
53 { 1.0000000000000000, 0, 0,
54 -0.69999999999999996 },
55 { 1.0000000000000000, 0, 0,
56 -0.59999999999999998 },
57 { 1.0000000000000000, 0, 0,
58 -0.50000000000000000 },
59 { 1.0000000000000000, 0, 0,
60 -0.40000000000000002 },
61 { 1.0000000000000000, 0, 0,
62 -0.30000000000000004 },
63 { 1.0000000000000000, 0, 0,
64 -0.19999999999999996 },
65 { 1.0000000000000000, 0, 0,
66 -0.099999999999999978 },
67 { 1.0000000000000000, 0, 0,
68 0.0000000000000000 },
69 { 1.0000000000000000, 0, 0,
70 0.10000000000000009 },
71 { 1.0000000000000000, 0, 0,
72 0.19999999999999996 },
73 { 1.0000000000000000, 0, 0,
74 0.30000000000000004 },
75 { 1.0000000000000000, 0, 0,
76 0.39999999999999991 },
77 { 1.0000000000000000, 0, 0,
78 0.50000000000000000 },
79 { 1.0000000000000000, 0, 0,
80 0.60000000000000009 },
81 { 1.0000000000000000, 0, 0,
82 0.69999999999999996 },
83 { 1.0000000000000000, 0, 0,
84 0.80000000000000004 },
85 { 1.0000000000000000, 0, 0,
86 0.89999999999999991 },
87 { 1.0000000000000000, 0, 0,
88 1.0000000000000000 },
89 };
90 const double toler001 = 2.5000000000000020e-13;
91
92 // Test data for l=1, m=0.
93 // max(|f - f_GSL|): 0.0000000000000000
94 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
95 const testcase_assoc_legendre<double>
96 data002[21] =
97 {
98 { -1.0000000000000000, 1, 0,
99 -1.0000000000000000 },
100 { -0.90000000000000002, 1, 0,
101 -0.90000000000000002 },
102 { -0.80000000000000004, 1, 0,
103 -0.80000000000000004 },
104 { -0.69999999999999996, 1, 0,
105 -0.69999999999999996 },
106 { -0.59999999999999998, 1, 0,
107 -0.59999999999999998 },
108 { -0.50000000000000000, 1, 0,
109 -0.50000000000000000 },
110 { -0.40000000000000002, 1, 0,
111 -0.40000000000000002 },
112 { -0.30000000000000004, 1, 0,
113 -0.30000000000000004 },
114 { -0.19999999999999996, 1, 0,
115 -0.19999999999999996 },
116 { -0.099999999999999978, 1, 0,
117 -0.099999999999999978 },
118 { 0.0000000000000000, 1, 0,
119 0.0000000000000000 },
120 { 0.10000000000000009, 1, 0,
121 0.10000000000000009 },
122 { 0.19999999999999996, 1, 0,
123 0.19999999999999996 },
124 { 0.30000000000000004, 1, 0,
125 0.30000000000000004 },
126 { 0.39999999999999991, 1, 0,
127 0.39999999999999991 },
128 { 0.50000000000000000, 1, 0,
129 0.50000000000000000 },
130 { 0.60000000000000009, 1, 0,
131 0.60000000000000009 },
132 { 0.69999999999999996, 1, 0,
133 0.69999999999999996 },
134 { 0.80000000000000004, 1, 0,
135 0.80000000000000004 },
136 { 0.89999999999999991, 1, 0,
137 0.89999999999999991 },
138 { 1.0000000000000000, 1, 0,
139 1.0000000000000000 },
140 };
141 const double toler002 = 2.5000000000000020e-13;
142
143 // Test data for l=1, m=1.
144 // max(|f - f_GSL|): 0.0000000000000000
145 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
146 const testcase_assoc_legendre<double>
147 data003[21] =
148 {
149 { -0.0000000000000000, 1, 1,
150 -1.0000000000000000 },
151 { -0.43588989435406728, 1, 1,
152 -0.90000000000000002 },
153 { -0.59999999999999987, 1, 1,
154 -0.80000000000000004 },
155 { -0.71414284285428509, 1, 1,
156 -0.69999999999999996 },
157 { -0.80000000000000004, 1, 1,
158 -0.59999999999999998 },
159 { -0.86602540378443860, 1, 1,
160 -0.50000000000000000 },
161 { -0.91651513899116799, 1, 1,
162 -0.40000000000000002 },
163 { -0.95393920141694577, 1, 1,
164 -0.30000000000000004 },
165 { -0.97979589711327120, 1, 1,
166 -0.19999999999999996 },
167 { -0.99498743710661997, 1, 1,
168 -0.099999999999999978 },
169 { -1.0000000000000000, 1, 1,
170 0.0000000000000000 },
171 { -0.99498743710661997, 1, 1,
172 0.10000000000000009 },
173 { -0.97979589711327120, 1, 1,
174 0.19999999999999996 },
175 { -0.95393920141694577, 1, 1,
176 0.30000000000000004 },
177 { -0.91651513899116799, 1, 1,
178 0.39999999999999991 },
179 { -0.86602540378443860, 1, 1,
180 0.50000000000000000 },
181 { -0.79999999999999993, 1, 1,
182 0.60000000000000009 },
183 { -0.71414284285428509, 1, 1,
184 0.69999999999999996 },
185 { -0.59999999999999987, 1, 1,
186 0.80000000000000004 },
187 { -0.43588989435406750, 1, 1,
188 0.89999999999999991 },
189 { -0.0000000000000000, 1, 1,
190 1.0000000000000000 },
191 };
192 const double toler003 = 2.5000000000000020e-13;
193
194 // Test data for l=2, m=0.
195 // max(|f - f_GSL|): 1.1102230246251565e-16
196 // max(|f - f_GSL| / |f_GSL|): 1.3877787807814482e-15
197 const testcase_assoc_legendre<double>
198 data004[21] =
199 {
200 { 1.0000000000000000, 2, 0,
201 -1.0000000000000000 },
202 { 0.71500000000000008, 2, 0,
203 -0.90000000000000002 },
204 { 0.46000000000000019, 2, 0,
205 -0.80000000000000004 },
206 { 0.23499999999999988, 2, 0,
207 -0.69999999999999996 },
208 { 0.039999999999999925, 2, 0,
209 -0.59999999999999998 },
210 { -0.12500000000000000, 2, 0,
211 -0.50000000000000000 },
212 { -0.25999999999999995, 2, 0,
213 -0.40000000000000002 },
214 { -0.36499999999999999, 2, 0,
215 -0.30000000000000004 },
216 { -0.44000000000000006, 2, 0,
217 -0.19999999999999996 },
218 { -0.48499999999999999, 2, 0,
219 -0.099999999999999978 },
220 { -0.50000000000000000, 2, 0,
221 0.0000000000000000 },
222 { -0.48499999999999999, 2, 0,
223 0.10000000000000009 },
224 { -0.44000000000000006, 2, 0,
225 0.19999999999999996 },
226 { -0.36499999999999999, 2, 0,
227 0.30000000000000004 },
228 { -0.26000000000000012, 2, 0,
229 0.39999999999999991 },
230 { -0.12500000000000000, 2, 0,
231 0.50000000000000000 },
232 { 0.040000000000000147, 2, 0,
233 0.60000000000000009 },
234 { 0.23499999999999988, 2, 0,
235 0.69999999999999996 },
236 { 0.46000000000000019, 2, 0,
237 0.80000000000000004 },
238 { 0.71499999999999986, 2, 0,
239 0.89999999999999991 },
240 { 1.0000000000000000, 2, 0,
241 1.0000000000000000 },
242 };
243 const double toler004 = 2.5000000000000020e-13;
244
245 // Test data for l=2, m=1.
246 // max(|f - f_GSL|): 0.0000000000000000
247 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
248 const testcase_assoc_legendre<double>
249 data005[21] =
250 {
251 { 0.0000000000000000, 2, 1,
252 -1.0000000000000000 },
253 { 1.1769027147559816, 2, 1,
254 -0.90000000000000002 },
255 { 1.4399999999999999, 2, 1,
256 -0.80000000000000004 },
257 { 1.4996999699939983, 2, 1,
258 -0.69999999999999996 },
259 { 1.4399999999999999, 2, 1,
260 -0.59999999999999998 },
261 { 1.2990381056766580, 2, 1,
262 -0.50000000000000000 },
263 { 1.0998181667894018, 2, 1,
264 -0.40000000000000002 },
265 { 0.85854528127525132, 2, 1,
266 -0.30000000000000004 },
267 { 0.58787753826796263, 2, 1,
268 -0.19999999999999996 },
269 { 0.29849623113198592, 2, 1,
270 -0.099999999999999978 },
271 { -0.0000000000000000, 2, 1,
272 0.0000000000000000 },
273 { -0.29849623113198626, 2, 1,
274 0.10000000000000009 },
275 { -0.58787753826796263, 2, 1,
276 0.19999999999999996 },
277 { -0.85854528127525132, 2, 1,
278 0.30000000000000004 },
279 { -1.0998181667894014, 2, 1,
280 0.39999999999999991 },
281 { -1.2990381056766580, 2, 1,
282 0.50000000000000000 },
283 { -1.4400000000000002, 2, 1,
284 0.60000000000000009 },
285 { -1.4996999699939983, 2, 1,
286 0.69999999999999996 },
287 { -1.4399999999999999, 2, 1,
288 0.80000000000000004 },
289 { -1.1769027147559821, 2, 1,
290 0.89999999999999991 },
291 { -0.0000000000000000, 2, 1,
292 1.0000000000000000 },
293 };
294 const double toler005 = 2.5000000000000020e-13;
295
296 // Test data for l=2, m=2.
297 // max(|f - f_GSL|): 0.0000000000000000
298 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
299 const testcase_assoc_legendre<double>
300 data006[21] =
301 {
302 { 0.0000000000000000, 2, 2,
303 -1.0000000000000000 },
304 { 0.56999999999999984, 2, 2,
305 -0.90000000000000002 },
306 { 1.0799999999999996, 2, 2,
307 -0.80000000000000004 },
308 { 1.5300000000000005, 2, 2,
309 -0.69999999999999996 },
310 { 1.9200000000000004, 2, 2,
311 -0.59999999999999998 },
312 { 2.2500000000000000, 2, 2,
313 -0.50000000000000000 },
314 { 2.5200000000000000, 2, 2,
315 -0.40000000000000002 },
316 { 2.7300000000000004, 2, 2,
317 -0.30000000000000004 },
318 { 2.8799999999999999, 2, 2,
319 -0.19999999999999996 },
320 { 2.9700000000000002, 2, 2,
321 -0.099999999999999978 },
322 { 3.0000000000000000, 2, 2,
323 0.0000000000000000 },
324 { 2.9700000000000002, 2, 2,
325 0.10000000000000009 },
326 { 2.8799999999999999, 2, 2,
327 0.19999999999999996 },
328 { 2.7300000000000004, 2, 2,
329 0.30000000000000004 },
330 { 2.5200000000000000, 2, 2,
331 0.39999999999999991 },
332 { 2.2500000000000000, 2, 2,
333 0.50000000000000000 },
334 { 1.9199999999999997, 2, 2,
335 0.60000000000000009 },
336 { 1.5300000000000005, 2, 2,
337 0.69999999999999996 },
338 { 1.0799999999999996, 2, 2,
339 0.80000000000000004 },
340 { 0.57000000000000040, 2, 2,
341 0.89999999999999991 },
342 { 0.0000000000000000, 2, 2,
343 1.0000000000000000 },
344 };
345 const double toler006 = 2.5000000000000020e-13;
346
347 // Test data for l=5, m=0.
348 // max(|f - f_GSL|): 2.0122792321330962e-16
349 // max(|f - f_GSL| / |f_GSL|): 4.8911475274404243e-15
350 const testcase_assoc_legendre<double>
351 data007[21] =
352 {
353 { -1.0000000000000000, 5, 0,
354 -1.0000000000000000 },
355 { 0.041141250000000087, 5, 0,
356 -0.90000000000000002 },
357 { 0.39951999999999993, 5, 0,
358 -0.80000000000000004 },
359 { 0.36519874999999991, 5, 0,
360 -0.69999999999999996 },
361 { 0.15263999999999994, 5, 0,
362 -0.59999999999999998 },
363 { -0.089843750000000000, 5, 0,
364 -0.50000000000000000 },
365 { -0.27063999999999994, 5, 0,
366 -0.40000000000000002 },
367 { -0.34538625000000001, 5, 0,
368 -0.30000000000000004 },
369 { -0.30751999999999996, 5, 0,
370 -0.19999999999999996 },
371 { -0.17882874999999995, 5, 0,
372 -0.099999999999999978 },
373 { 0.0000000000000000, 5, 0,
374 0.0000000000000000 },
375 { 0.17882875000000015, 5, 0,
376 0.10000000000000009 },
377 { 0.30751999999999996, 5, 0,
378 0.19999999999999996 },
379 { 0.34538625000000001, 5, 0,
380 0.30000000000000004 },
381 { 0.27064000000000010, 5, 0,
382 0.39999999999999991 },
383 { 0.089843750000000000, 5, 0,
384 0.50000000000000000 },
385 { -0.15264000000000016, 5, 0,
386 0.60000000000000009 },
387 { -0.36519874999999991, 5, 0,
388 0.69999999999999996 },
389 { -0.39951999999999993, 5, 0,
390 0.80000000000000004 },
391 { -0.041141250000000261, 5, 0,
392 0.89999999999999991 },
393 { 1.0000000000000000, 5, 0,
394 1.0000000000000000 },
395 };
396 const double toler007 = 2.5000000000000020e-13;
397
398 // Test data for l=5, m=1.
399 // max(|f - f_GSL|): 0.0000000000000000
400 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
401 const testcase_assoc_legendre<double>
402 data008[21] =
403 {
404 { 0.0000000000000000, 5, 1,
405 -1.0000000000000000 },
406 { -2.8099369608350981, 5, 1,
407 -0.90000000000000002 },
408 { -0.72180000000000089, 5, 1,
409 -0.80000000000000004 },
410 { 1.0951826834447254, 5, 1,
411 -0.69999999999999996 },
412 { 1.9775999999999998, 5, 1,
413 -0.59999999999999998 },
414 { 1.9282596881137892, 5, 1,
415 -0.50000000000000000 },
416 { 1.2070504380513685, 5, 1,
417 -0.40000000000000002 },
418 { 0.16079837663884422, 5, 1,
419 -0.30000000000000004 },
420 { -0.87005875663658538, 5, 1,
421 -0.19999999999999996 },
422 { -1.6083350053680323, 5, 1,
423 -0.099999999999999978 },
424 { -1.8750000000000000, 5, 1,
425 0.0000000000000000 },
426 { -1.6083350053680314, 5, 1,
427 0.10000000000000009 },
428 { -0.87005875663658538, 5, 1,
429 0.19999999999999996 },
430 { 0.16079837663884422, 5, 1,
431 0.30000000000000004 },
432 { 1.2070504380513671, 5, 1,
433 0.39999999999999991 },
434 { 1.9282596881137892, 5, 1,
435 0.50000000000000000 },
436 { 1.9775999999999998, 5, 1,
437 0.60000000000000009 },
438 { 1.0951826834447254, 5, 1,
439 0.69999999999999996 },
440 { -0.72180000000000089, 5, 1,
441 0.80000000000000004 },
442 { -2.8099369608350973, 5, 1,
443 0.89999999999999991 },
444 { 0.0000000000000000, 5, 1,
445 1.0000000000000000 },
446 };
447 const double toler008 = 2.5000000000000020e-13;
448
449 // Test data for l=5, m=2.
450 // max(|f - f_GSL|): 0.0000000000000000
451 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
452 const testcase_assoc_legendre<double>
453 data009[21] =
454 {
455 { 0.0000000000000000, 5, 2,
456 -1.0000000000000000 },
457 { -12.837825000000000, 5, 2,
458 -0.90000000000000002 },
459 { -13.910400000000001, 5, 2,
460 -0.80000000000000004 },
461 { -8.8089749999999967, 5, 2,
462 -0.69999999999999996 },
463 { -1.6128000000000000, 5, 2,
464 -0.59999999999999998 },
465 { 4.9218750000000000, 5, 2,
466 -0.50000000000000000 },
467 { 9.1728000000000005, 5, 2,
468 -0.40000000000000002 },
469 { 10.462725000000001, 5, 2,
470 -0.30000000000000004 },
471 { 8.8703999999999983, 5, 2,
472 -0.19999999999999996 },
473 { 5.0415749999999990, 5, 2,
474 -0.099999999999999978 },
475 { -0.0000000000000000, 5, 2,
476 0.0000000000000000 },
477 { -5.0415750000000044, 5, 2,
478 0.10000000000000009 },
479 { -8.8703999999999983, 5, 2,
480 0.19999999999999996 },
481 { -10.462725000000001, 5, 2,
482 0.30000000000000004 },
483 { -9.1728000000000005, 5, 2,
484 0.39999999999999991 },
485 { -4.9218750000000000, 5, 2,
486 0.50000000000000000 },
487 { 1.6128000000000047, 5, 2,
488 0.60000000000000009 },
489 { 8.8089749999999967, 5, 2,
490 0.69999999999999996 },
491 { 13.910400000000001, 5, 2,
492 0.80000000000000004 },
493 { 12.837825000000004, 5, 2,
494 0.89999999999999991 },
495 { 0.0000000000000000, 5, 2,
496 1.0000000000000000 },
497 };
498 const double toler009 = 2.5000000000000020e-13;
499
500 // Test data for l=5, m=5.
501 // max(|f - f_GSL|): 0.0000000000000000
502 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
503 const testcase_assoc_legendre<double>
504 data010[21] =
505 {
506 { -0.0000000000000000, 5, 5,
507 -1.0000000000000000 },
508 { -14.870165800941818, 5, 5,
509 -0.90000000000000002 },
510 { -73.483199999999925, 5, 5,
511 -0.80000000000000004 },
512 { -175.53238298794764, 5, 5,
513 -0.69999999999999996 },
514 { -309.65760000000006, 5, 5,
515 -0.59999999999999998 },
516 { -460.34662869916559, 5, 5,
517 -0.50000000000000000 },
518 { -611.12496255819883, 5, 5,
519 -0.40000000000000002 },
520 { -746.50941479523760, 5, 5,
521 -0.30000000000000004 },
522 { -853.31600434671316, 5, 5,
523 -0.19999999999999996 },
524 { -921.55189181724734, 5, 5,
525 -0.099999999999999978 },
526 { -945.00000000000000, 5, 5,
527 0.0000000000000000 },
528 { -921.55189181724734, 5, 5,
529 0.10000000000000009 },
530 { -853.31600434671316, 5, 5,
531 0.19999999999999996 },
532 { -746.50941479523760, 5, 5,
533 0.30000000000000004 },
534 { -611.12496255819883, 5, 5,
535 0.39999999999999991 },
536 { -460.34662869916559, 5, 5,
537 0.50000000000000000 },
538 { -309.65759999999989, 5, 5,
539 0.60000000000000009 },
540 { -175.53238298794764, 5, 5,
541 0.69999999999999996 },
542 { -73.483199999999925, 5, 5,
543 0.80000000000000004 },
544 { -14.870165800941855, 5, 5,
545 0.89999999999999991 },
546 { -0.0000000000000000, 5, 5,
547 1.0000000000000000 },
548 };
549 const double toler010 = 2.5000000000000020e-13;
550
551 // Test data for l=10, m=0.
552 // max(|f - f_GSL|): 2.7755575615628914e-16
553 // max(|f - f_GSL| / |f_GSL|): 1.0547610802636413e-15
554 const testcase_assoc_legendre<double>
555 data011[21] =
556 {
557 { 1.0000000000000000, 10, 0,
558 -1.0000000000000000 },
559 { -0.26314561785585960, 10, 0,
560 -0.90000000000000002 },
561 { 0.30052979560000004, 10, 0,
562 -0.80000000000000004 },
563 { 0.085805795531640333, 10, 0,
564 -0.69999999999999996 },
565 { -0.24366274560000001, 10, 0,
566 -0.59999999999999998 },
567 { -0.18822860717773438, 10, 0,
568 -0.50000000000000000 },
569 { 0.096839064399999925, 10, 0,
570 -0.40000000000000002 },
571 { 0.25147634951601561, 10, 0,
572 -0.30000000000000004 },
573 { 0.12907202559999983, 10, 0,
574 -0.19999999999999996 },
575 { -0.12212499738710943, 10, 0,
576 -0.099999999999999978 },
577 { -0.24609375000000000, 10, 0,
578 0.0000000000000000 },
579 { -0.12212499738710922, 10, 0,
580 0.10000000000000009 },
581 { 0.12907202559999983, 10, 0,
582 0.19999999999999996 },
583 { 0.25147634951601561, 10, 0,
584 0.30000000000000004 },
585 { 0.096839064400000258, 10, 0,
586 0.39999999999999991 },
587 { -0.18822860717773438, 10, 0,
588 0.50000000000000000 },
589 { -0.24366274559999984, 10, 0,
590 0.60000000000000009 },
591 { 0.085805795531640333, 10, 0,
592 0.69999999999999996 },
593 { 0.30052979560000004, 10, 0,
594 0.80000000000000004 },
595 { -0.26314561785585899, 10, 0,
596 0.89999999999999991 },
597 { 1.0000000000000000, 10, 0,
598 1.0000000000000000 },
599 };
600 const double toler011 = 2.5000000000000020e-13;
601
602 // Test data for l=10, m=1.
603 // max(|f - f_GSL|): 0.0000000000000000
604 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
605 const testcase_assoc_legendre<double>
606 data012[21] =
607 {
608 { -0.0000000000000000, 10, 1,
609 -1.0000000000000000 },
610 { -3.0438748781479039, 10, 1,
611 -0.90000000000000002 },
612 { -0.87614260800000254, 10, 1,
613 -0.80000000000000004 },
614 { 2.9685359952934527, 10, 1,
615 -0.69999999999999996 },
616 { 1.2511825919999997, 10, 1,
617 -0.59999999999999998 },
618 { -2.0066877394361260, 10, 1,
619 -0.50000000000000000 },
620 { -2.4822196173476661, 10, 1,
621 -0.40000000000000002 },
622 { -0.12309508907433910, 10, 1,
623 -0.30000000000000004 },
624 { 2.2468221751958413, 10, 1,
625 -0.19999999999999996 },
626 { 2.2472659777983512, 10, 1,
627 -0.099999999999999978 },
628 { -0.0000000000000000, 10, 1,
629 0.0000000000000000 },
630 { -2.2472659777983535, 10, 1,
631 0.10000000000000009 },
632 { -2.2468221751958413, 10, 1,
633 0.19999999999999996 },
634 { 0.12309508907433910, 10, 1,
635 0.30000000000000004 },
636 { 2.4822196173476647, 10, 1,
637 0.39999999999999991 },
638 { 2.0066877394361260, 10, 1,
639 0.50000000000000000 },
640 { -1.2511825920000037, 10, 1,
641 0.60000000000000009 },
642 { -2.9685359952934527, 10, 1,
643 0.69999999999999996 },
644 { 0.87614260800000254, 10, 1,
645 0.80000000000000004 },
646 { 3.0438748781479115, 10, 1,
647 0.89999999999999991 },
648 { 0.0000000000000000, 10, 1,
649 1.0000000000000000 },
650 };
651 const double toler012 = 2.5000000000000020e-13;
652
653 // Test data for l=10, m=2.
654 // max(|f - f_GSL|): 0.0000000000000000
655 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
656 const testcase_assoc_legendre<double>
657 data013[21] =
658 {
659 { 0.0000000000000000, 10, 2,
660 -1.0000000000000000 },
661 { 16.376387762496137, 10, 2,
662 -0.90000000000000002 },
663 { -35.394657804000005, 10, 2,
664 -0.80000000000000004 },
665 { -3.6191429423788648, 10, 2,
666 -0.69999999999999996 },
667 { 28.679675904000014, 10, 2,
668 -0.59999999999999998 },
669 { 18.388023376464844, 10, 2,
670 -0.50000000000000000 },
671 { -12.818955995999994, 10, 2,
672 -0.40000000000000002 },
673 { -27.739821675972664, 10, 2,
674 -0.30000000000000004 },
675 { -13.280661503999987, 10, 2,
676 -0.19999999999999996 },
677 { 13.885467170308601, 10, 2,
678 -0.099999999999999978 },
679 { 27.070312500000000, 10, 2,
680 0.0000000000000000 },
681 { 13.885467170308573, 10, 2,
682 0.10000000000000009 },
683 { -13.280661503999987, 10, 2,
684 0.19999999999999996 },
685 { -27.739821675972664, 10, 2,
686 0.30000000000000004 },
687 { -12.818955996000021, 10, 2,
688 0.39999999999999991 },
689 { 18.388023376464844, 10, 2,
690 0.50000000000000000 },
691 { 28.679675904000000, 10, 2,
692 0.60000000000000009 },
693 { -3.6191429423788648, 10, 2,
694 0.69999999999999996 },
695 { -35.394657804000005, 10, 2,
696 0.80000000000000004 },
697 { 16.376387762496009, 10, 2,
698 0.89999999999999991 },
699 { 0.0000000000000000, 10, 2,
700 1.0000000000000000 },
701 };
702 const double toler013 = 2.5000000000000020e-13;
703
704 // Test data for l=10, m=5.
705 // max(|f - f_GSL|): 0.0000000000000000
706 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
707 const testcase_assoc_legendre<double>
708 data014[21] =
709 {
710 { 0.0000000000000000, 10, 5,
711 -1.0000000000000000 },
712 { 21343.618518164680, 10, 5,
713 -0.90000000000000002 },
714 { 40457.016407807983, 10, 5,
715 -0.80000000000000004 },
716 { 20321.279317331315, 10, 5,
717 -0.69999999999999996 },
718 { -14410.820616192004, 10, 5,
719 -0.59999999999999998 },
720 { -30086.169706116176, 10, 5,
721 -0.50000000000000000 },
722 { -17177.549337582859, 10, 5,
723 -0.40000000000000002 },
724 { 9272.5119495412364, 10, 5,
725 -0.30000000000000004 },
726 { 26591.511184414714, 10, 5,
727 -0.19999999999999996 },
728 { 21961.951238504211, 10, 5,
729 -0.099999999999999978 },
730 { -0.0000000000000000, 10, 5,
731 0.0000000000000000 },
732 { -21961.951238504229, 10, 5,
733 0.10000000000000009 },
734 { -26591.511184414714, 10, 5,
735 0.19999999999999996 },
736 { -9272.5119495412364, 10, 5,
737 0.30000000000000004 },
738 { 17177.549337582834, 10, 5,
739 0.39999999999999991 },
740 { 30086.169706116176, 10, 5,
741 0.50000000000000000 },
742 { 14410.820616191972, 10, 5,
743 0.60000000000000009 },
744 { -20321.279317331315, 10, 5,
745 0.69999999999999996 },
746 { -40457.016407807983, 10, 5,
747 0.80000000000000004 },
748 { -21343.618518164694, 10, 5,
749 0.89999999999999991 },
750 { 0.0000000000000000, 10, 5,
751 1.0000000000000000 },
752 };
753 const double toler014 = 2.5000000000000020e-13;
754
755 // Test data for l=10, m=10.
756 // max(|f - f_GSL|): 0.0000000000000000
757 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
758 const testcase_assoc_legendre<double>
759 data015[21] =
760 {
761 { 0.0000000000000000, 10, 10,
762 -1.0000000000000000 },
763 { 162117.40078784220, 10, 10,
764 -0.90000000000000002 },
765 { 3958896.3481267113, 10, 10,
766 -0.80000000000000004 },
767 { 22589806.343887307, 10, 10,
768 -0.69999999999999996 },
769 { 70300999.121633321, 10, 10,
770 -0.59999999999999998 },
771 { 155370278.54003900, 10, 10,
772 -0.50000000000000000 },
773 { 273815518.20150518, 10, 10,
774 -0.40000000000000002 },
775 { 408571989.13158917, 10, 10,
776 -0.30000000000000004 },
777 { 533848212.07990247, 10, 10,
778 -0.19999999999999996 },
779 { 622640835.70523083, 10, 10,
780 -0.099999999999999978 },
781 { 654729075.00000000, 10, 10,
782 0.0000000000000000 },
783 { 622640835.70523083, 10, 10,
784 0.10000000000000009 },
785 { 533848212.07990247, 10, 10,
786 0.19999999999999996 },
787 { 408571989.13158917, 10, 10,
788 0.30000000000000004 },
789 { 273815518.20150518, 10, 10,
790 0.39999999999999991 },
791 { 155370278.54003900, 10, 10,
792 0.50000000000000000 },
793 { 70300999.121633217, 10, 10,
794 0.60000000000000009 },
795 { 22589806.343887307, 10, 10,
796 0.69999999999999996 },
797 { 3958896.3481267113, 10, 10,
798 0.80000000000000004 },
799 { 162117.40078784304, 10, 10,
800 0.89999999999999991 },
801 { 0.0000000000000000, 10, 10,
802 1.0000000000000000 },
803 };
804 const double toler015 = 2.5000000000000020e-13;
805
806 // Test data for l=20, m=0.
807 // max(|f - f_GSL|): 3.3306690738754696e-16
808 // max(|f - f_GSL| / |f_GSL|): 2.2307336678138069e-15
809 const testcase_assoc_legendre<double>
810 data016[21] =
811 {
812 { 1.0000000000000000, 20, 0,
813 -1.0000000000000000 },
814 { -0.14930823530984835, 20, 0,
815 -0.90000000000000002 },
816 { 0.22420460541741347, 20, 0,
817 -0.80000000000000004 },
818 { -0.20457394463834172, 20, 0,
819 -0.69999999999999996 },
820 { 0.15916752910098109, 20, 0,
821 -0.59999999999999998 },
822 { -0.048358381067373557, 20, 0,
823 -0.50000000000000000 },
824 { -0.10159261558628156, 20, 0,
825 -0.40000000000000002 },
826 { 0.18028715947998042, 20, 0,
827 -0.30000000000000004 },
828 { -0.098042194344594796, 20, 0,
829 -0.19999999999999996 },
830 { -0.082077130944527663, 20, 0,
831 -0.099999999999999978 },
832 { 0.17619705200195312, 20, 0,
833 0.0000000000000000 },
834 { -0.082077130944528023, 20, 0,
835 0.10000000000000009 },
836 { -0.098042194344594796, 20, 0,
837 0.19999999999999996 },
838 { 0.18028715947998042, 20, 0,
839 0.30000000000000004 },
840 { -0.10159261558628112, 20, 0,
841 0.39999999999999991 },
842 { -0.048358381067373557, 20, 0,
843 0.50000000000000000 },
844 { 0.15916752910098075, 20, 0,
845 0.60000000000000009 },
846 { -0.20457394463834172, 20, 0,
847 0.69999999999999996 },
848 { 0.22420460541741347, 20, 0,
849 0.80000000000000004 },
850 { -0.14930823530984924, 20, 0,
851 0.89999999999999991 },
852 { 1.0000000000000000, 20, 0,
853 1.0000000000000000 },
854 };
855 const double toler016 = 2.5000000000000020e-13;
856
857 // Test data for l=20, m=1.
858 // max(|f - f_GSL|): 0.0000000000000000
859 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
860 const testcase_assoc_legendre<double>
861 data017[21] =
862 {
863 { 0.0000000000000000, 20, 1,
864 -1.0000000000000000 },
865 { 4.3838334818220499, 20, 1,
866 -0.90000000000000002 },
867 { -0.63138296146340844, 20, 1,
868 -0.80000000000000004 },
869 { 0.72274871413391395, 20, 1,
870 -0.69999999999999996 },
871 { -2.3203528743824910, 20, 1,
872 -0.59999999999999998 },
873 { 3.7399919228791405, 20, 1,
874 -0.50000000000000000 },
875 { -3.1692202279270041, 20, 1,
876 -0.40000000000000002 },
877 { 0.15804468835344135, 20, 1,
878 -0.30000000000000004 },
879 { 3.0366182393271171, 20, 1,
880 -0.19999999999999996 },
881 { -3.2115523815580209, 20, 1,
882 -0.099999999999999978 },
883 { 0.0000000000000000, 20, 1,
884 0.0000000000000000 },
885 { 3.2115523815580169, 20, 1,
886 0.10000000000000009 },
887 { -3.0366182393271171, 20, 1,
888 0.19999999999999996 },
889 { -0.15804468835344135, 20, 1,
890 0.30000000000000004 },
891 { 3.1692202279270085, 20, 1,
892 0.39999999999999991 },
893 { -3.7399919228791405, 20, 1,
894 0.50000000000000000 },
895 { 2.3203528743824995, 20, 1,
896 0.60000000000000009 },
897 { -0.72274871413391395, 20, 1,
898 0.69999999999999996 },
899 { 0.63138296146340844, 20, 1,
900 0.80000000000000004 },
901 { -4.3838334818220339, 20, 1,
902 0.89999999999999991 },
903 { 0.0000000000000000, 20, 1,
904 1.0000000000000000 },
905 };
906 const double toler017 = 2.5000000000000020e-13;
907
908 // Test data for l=20, m=2.
909 // max(|f - f_GSL|): 0.0000000000000000
910 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
911 const testcase_assoc_legendre<double>
912 data018[21] =
913 {
914 { 0.0000000000000000, 20, 2,
915 -1.0000000000000000 },
916 { 80.812425587310102, 20, 2,
917 -0.90000000000000002 },
918 { -95.849622172549374, 20, 2,
919 -0.80000000000000004 },
920 { 87.337927630325510, 20, 2,
921 -0.69999999999999996 },
922 { -70.330891533985834, 20, 2,
923 -0.59999999999999998 },
924 { 24.629090735179489, 20, 2,
925 -0.50000000000000000 },
926 { 39.902576338912425, 20, 2,
927 -0.40000000000000002 },
928 { -75.621201471396603, 20, 2,
929 -0.30000000000000004 },
930 { 42.417415829726494, 20, 2,
931 -0.19999999999999996 },
932 { 33.826848678871293, 20, 2,
933 -0.099999999999999978 },
934 { -74.002761840820312, 20, 2,
935 0.0000000000000000 },
936 { 33.826848678871464, 20, 2,
937 0.10000000000000009 },
938 { 42.417415829726494, 20, 2,
939 0.19999999999999996 },
940 { -75.621201471396603, 20, 2,
941 0.30000000000000004 },
942 { 39.902576338912247, 20, 2,
943 0.39999999999999991 },
944 { 24.629090735179489, 20, 2,
945 0.50000000000000000 },
946 { -70.330891533985721, 20, 2,
947 0.60000000000000009 },
948 { 87.337927630325510, 20, 2,
949 0.69999999999999996 },
950 { -95.849622172549374, 20, 2,
951 0.80000000000000004 },
952 { 80.812425587310500, 20, 2,
953 0.89999999999999991 },
954 { 0.0000000000000000, 20, 2,
955 1.0000000000000000 },
956 };
957 const double toler018 = 2.5000000000000020e-13;
958
959 // Test data for l=20, m=5.
960 // max(|f - f_GSL|): 0.0000000000000000
961 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
962 const testcase_assoc_legendre<double>
963 data019[21] =
964 {
965 { -0.0000000000000000, 20, 5,
966 -1.0000000000000000 },
967 { -315702.32715134218, 20, 5,
968 -0.90000000000000002 },
969 { 503060.91484852589, 20, 5,
970 -0.80000000000000004 },
971 { -298127.28360361955, 20, 5,
972 -0.69999999999999996 },
973 { -114444.61447464029, 20, 5,
974 -0.59999999999999998 },
975 { 543428.40914592845, 20, 5,
976 -0.50000000000000000 },
977 { -613842.07728185470, 20, 5,
978 -0.40000000000000002 },
979 { 143765.42411270936, 20, 5,
980 -0.30000000000000004 },
981 { 472600.45321372285, 20, 5,
982 -0.19999999999999996 },
983 { -563861.76771496492, 20, 5,
984 -0.099999999999999978 },
985 { 0.0000000000000000, 20, 5,
986 0.0000000000000000 },
987 { 563861.76771496458, 20, 5,
988 0.10000000000000009 },
989 { -472600.45321372285, 20, 5,
990 0.19999999999999996 },
991 { -143765.42411270936, 20, 5,
992 0.30000000000000004 },
993 { 613842.07728185481, 20, 5,
994 0.39999999999999991 },
995 { -543428.40914592845, 20, 5,
996 0.50000000000000000 },
997 { 114444.61447464178, 20, 5,
998 0.60000000000000009 },
999 { 298127.28360361955, 20, 5,
1000 0.69999999999999996 },
1001 { -503060.91484852589, 20, 5,
1002 0.80000000000000004 },
1003 { 315702.32715134491, 20, 5,
1004 0.89999999999999991 },
1005 { 0.0000000000000000, 20, 5,
1006 1.0000000000000000 },
1007 };
1008 const double toler019 = 2.5000000000000020e-13;
1009
1010 // Test data for l=20, m=10.
1011 // max(|f - f_GSL|): 0.0000000000000000
1012 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
1013 const testcase_assoc_legendre<double>
1014 data020[21] =
1015 {
1016 { -0.0000000000000000, 20, 10,
1017 -1.0000000000000000 },
1018 { 990017476694.99084, 20, 10,
1019 -0.90000000000000002 },
1020 { 2392757933281.0498, 20, 10,
1021 -0.80000000000000004 },
1022 { -1548364524949.5808, 20, 10,
1023 -0.69999999999999996 },
1024 { -424471915195.05627, 20, 10,
1025 -0.59999999999999998 },
1026 { 1744502295946.2073, 20, 10,
1027 -0.50000000000000000 },
1028 { -899973487310.55212, 20, 10,
1029 -0.40000000000000002 },
1030 { -1092420454297.7161, 20, 10,
1031 -0.30000000000000004 },
1032 { 1466609267659.8816, 20, 10,
1033 -0.19999999999999996 },
1034 { 356041756390.71674, 20, 10,
1035 -0.099999999999999978 },
1036 { -1612052956674.3164, 20, 10,
1037 0.0000000000000000 },
1038 { 356041756390.71985, 20, 10,
1039 0.10000000000000009 },
1040 { 1466609267659.8816, 20, 10,
1041 0.19999999999999996 },
1042 { -1092420454297.7161, 20, 10,
1043 0.30000000000000004 },
1044 { -899973487310.55530, 20, 10,
1045 0.39999999999999991 },
1046 { 1744502295946.2073, 20, 10,
1047 0.50000000000000000 },
1048 { -424471915195.05896, 20, 10,
1049 0.60000000000000009 },
1050 { -1548364524949.5808, 20, 10,
1051 0.69999999999999996 },
1052 { 2392757933281.0498, 20, 10,
1053 0.80000000000000004 },
1054 { 990017476694.99316, 20, 10,
1055 0.89999999999999991 },
1056 { 0.0000000000000000, 20, 10,
1057 1.0000000000000000 },
1058 };
1059 const double toler020 = 2.5000000000000020e-13;
1060
1061 // Test data for l=20, m=20.
1062 // max(|f - f_GSL|): 0.0000000000000000
1063 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
1064 const testcase_assoc_legendre<double>
1065 data021[21] =
1066 {
1067 { 0.0000000000000000, 20, 20,
1068 -1.0000000000000000 },
1069 { 19609049712023808., 20, 20,
1070 -0.90000000000000002 },
1071 { 1.1693527616833221e+19, 20, 20,
1072 -0.80000000000000004 },
1073 { 3.8073455880620691e+20, 20, 20,
1074 -0.69999999999999996 },
1075 { 3.6874002249007927e+21, 20, 20,
1076 -0.59999999999999998 },
1077 { 1.8010806978179592e+22, 20, 20,
1078 -0.50000000000000000 },
1079 { 5.5938832584012466e+22, 20, 20,
1080 -0.40000000000000002 },
1081 { 1.2454734132297811e+23, 20, 20,
1082 -0.30000000000000004 },
1083 { 2.1263407800797497e+23, 20, 20,
1084 -0.19999999999999996 },
1085 { 2.8924941146976873e+23, 20, 20,
1086 -0.099999999999999978 },
1087 { 3.1983098677287775e+23, 20, 20,
1088 0.0000000000000000 },
1089 { 2.8924941146976873e+23, 20, 20,
1090 0.10000000000000009 },
1091 { 2.1263407800797497e+23, 20, 20,
1092 0.19999999999999996 },
1093 { 1.2454734132297811e+23, 20, 20,
1094 0.30000000000000004 },
1095 { 5.5938832584012466e+22, 20, 20,
1096 0.39999999999999991 },
1097 { 1.8010806978179592e+22, 20, 20,
1098 0.50000000000000000 },
1099 { 3.6874002249007807e+21, 20, 20,
1100 0.60000000000000009 },
1101 { 3.8073455880620691e+20, 20, 20,
1102 0.69999999999999996 },
1103 { 1.1693527616833221e+19, 20, 20,
1104 0.80000000000000004 },
1105 { 19609049712024020., 20, 20,
1106 0.89999999999999991 },
1107 { 0.0000000000000000, 20, 20,
1108 1.0000000000000000 },
1109 };
1110 const double toler021 = 2.5000000000000020e-13;
1111
1112 // Test data for l=50, m=0.
1113 // max(|f - f_GSL|): 3.6082248300317588e-16
1114 // max(|f - f_GSL| / |f_GSL|): 2.1700196856209138e-15
1115 const testcase_assoc_legendre<double>
1116 data022[21] =
1117 {
1118 { 1.0000000000000000, 50, 0,
1119 -1.0000000000000000 },
1120 { -0.17003765994383671, 50, 0,
1121 -0.90000000000000002 },
1122 { 0.13879737345093113, 50, 0,
1123 -0.80000000000000004 },
1124 { -0.014572731645892852, 50, 0,
1125 -0.69999999999999996 },
1126 { -0.058860798844002096, 50, 0,
1127 -0.59999999999999998 },
1128 { -0.031059099239609811, 50, 0,
1129 -0.50000000000000000 },
1130 { 0.041569033381825375, 50, 0,
1131 -0.40000000000000002 },
1132 { 0.10911051574714797, 50, 0,
1133 -0.30000000000000004 },
1134 { 0.083432272204197494, 50, 0,
1135 -0.19999999999999996 },
1136 { -0.038205812661313600, 50, 0,
1137 -0.099999999999999978 },
1138 { -0.11227517265921705, 50, 0,
1139 0.0000000000000000 },
1140 { -0.038205812661314155, 50, 0,
1141 0.10000000000000009 },
1142 { 0.083432272204197494, 50, 0,
1143 0.19999999999999996 },
1144 { 0.10911051574714797, 50, 0,
1145 0.30000000000000004 },
1146 { 0.041569033381824674, 50, 0,
1147 0.39999999999999991 },
1148 { -0.031059099239609811, 50, 0,
1149 0.50000000000000000 },
1150 { -0.058860798844001430, 50, 0,
1151 0.60000000000000009 },
1152 { -0.014572731645892852, 50, 0,
1153 0.69999999999999996 },
1154 { 0.13879737345093113, 50, 0,
1155 0.80000000000000004 },
1156 { -0.17003765994383657, 50, 0,
1157 0.89999999999999991 },
1158 { 1.0000000000000000, 50, 0,
1159 1.0000000000000000 },
1160 };
1161 const double toler022 = 2.5000000000000020e-13;
1162
1163 // Test data for l=50, m=1.
1164 // max(|f - f_GSL|): 0.0000000000000000
1165 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
1166 const testcase_assoc_legendre<double>
1167 data023[21] =
1168 {
1169 { 0.0000000000000000, 50, 1,
1170 -1.0000000000000000 },
1171 { -0.13424149984449490, 50, 1,
1172 -0.90000000000000002 },
1173 { 2.2011219672413018, 50, 1,
1174 -0.80000000000000004 },
1175 { 6.6622414993232004, 50, 1,
1176 -0.69999999999999996 },
1177 { 5.5772846936919249, 50, 1,
1178 -0.59999999999999998 },
1179 { 5.8787148815607608, 50, 1,
1180 -0.50000000000000000 },
1181 { 5.5473459458633974, 50, 1,
1182 -0.40000000000000002 },
1183 { 1.8444956647619930, 50, 1,
1184 -0.30000000000000004 },
1185 { -3.8722014306642127, 50, 1,
1186 -0.19999999999999996 },
1187 { -5.3488751322285628, 50, 1,
1188 -0.099999999999999978 },
1189 { -0.0000000000000000, 50, 1,
1190 0.0000000000000000 },
1191 { 5.3488751322285522, 50, 1,
1192 0.10000000000000009 },
1193 { 3.8722014306642127, 50, 1,
1194 0.19999999999999996 },
1195 { -1.8444956647619930, 50, 1,
1196 0.30000000000000004 },
1197 { -5.5473459458634080, 50, 1,
1198 0.39999999999999991 },
1199 { -5.8787148815607608, 50, 1,
1200 0.50000000000000000 },
1201 { -5.5772846936919453, 50, 1,
1202 0.60000000000000009 },
1203 { -6.6622414993232004, 50, 1,
1204 0.69999999999999996 },
1205 { -2.2011219672413018, 50, 1,
1206 0.80000000000000004 },
1207 { 0.13424149984462019, 50, 1,
1208 0.89999999999999991 },
1209 { 0.0000000000000000, 50, 1,
1210 1.0000000000000000 },
1211 };
1212 const double toler023 = 2.5000000000000020e-13;
1213
1214 // Test data for l=50, m=2.
1215 // max(|f - f_GSL|): 0.0000000000000000
1216 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
1217 const testcase_assoc_legendre<double>
1218 data024[21] =
1219 {
1220 { 0.0000000000000000, 50, 2,
1221 -1.0000000000000000 },
1222 { 433.04168483713511, 50, 2,
1223 -0.90000000000000002 },
1224 { -348.06364372056424, 50, 2,
1225 -0.80000000000000004 },
1226 { 50.221071418108444, 50, 2,
1227 -0.69999999999999996 },
1228 { 158.46096409274352, 50, 2,
1229 -0.59999999999999998 },
1230 { 85.988858299721457, 50, 2,
1231 -0.50000000000000000 },
1232 { -101.15891460879270, 50, 2,
1233 -0.40000000000000002 },
1234 { -277.07168105316617, 50, 2,
1235 -0.30000000000000004 },
1236 { -214.33311373510401, 50, 2,
1237 -0.19999999999999996 },
1238 { 96.349657930951665, 50, 2,
1239 -0.099999999999999978 },
1240 { 286.30169028100346, 50, 2,
1241 0.0000000000000000 },
1242 { 96.349657930953242, 50, 2,
1243 0.10000000000000009 },
1244 { -214.33311373510401, 50, 2,
1245 0.19999999999999996 },
1246 { -277.07168105316617, 50, 2,
1247 0.30000000000000004 },
1248 { -101.15891460879088, 50, 2,
1249 0.39999999999999991 },
1250 { 85.988858299721457, 50, 2,
1251 0.50000000000000000 },
1252 { 158.46096409274153, 50, 2,
1253 0.60000000000000009 },
1254 { 50.221071418108444, 50, 2,
1255 0.69999999999999996 },
1256 { -348.06364372056424, 50, 2,
1257 0.80000000000000004 },
1258 { 433.04168483713374, 50, 2,
1259 0.89999999999999991 },
1260 { 0.0000000000000000, 50, 2,
1261 1.0000000000000000 },
1262 };
1263 const double toler024 = 2.5000000000000020e-13;
1264
1265 // Test data for l=50, m=5.
1266 // max(|f - f_GSL|): 0.0000000000000000
1267 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
1268 const testcase_assoc_legendre<double>
1269 data025[21] =
1270 {
1271 { -0.0000000000000000, 50, 5,
1272 -1.0000000000000000 },
1273 { -27340473.952132829, 50, 5,
1274 -0.90000000000000002 },
1275 { 27753716.768532373, 50, 5,
1276 -0.80000000000000004 },
1277 { 40808153.913493633, 50, 5,
1278 -0.69999999999999996 },
1279 { 32071189.035790090, 50, 5,
1280 -0.59999999999999998 },
1281 { 36265736.218529105, 50, 5,
1282 -0.50000000000000000 },
1283 { 37089596.700204901, 50, 5,
1284 -0.40000000000000002 },
1285 { 14562029.629244499, 50, 5,
1286 -0.30000000000000004 },
1287 { -23686895.217517190, 50, 5,
1288 -0.19999999999999996 },
1289 { -34878992.965676002, 50, 5,
1290 -0.099999999999999978 },
1291 { -0.0000000000000000, 50, 5,
1292 0.0000000000000000 },
1293 { 34878992.965675958, 50, 5,
1294 0.10000000000000009 },
1295 { 23686895.217517190, 50, 5,
1296 0.19999999999999996 },
1297 { -14562029.629244499, 50, 5,
1298 0.30000000000000004 },
1299 { -37089596.700204931, 50, 5,
1300 0.39999999999999991 },
1301 { -36265736.218529105, 50, 5,
1302 0.50000000000000000 },
1303 { -32071189.035790242, 50, 5,
1304 0.60000000000000009 },
1305 { -40808153.913493633, 50, 5,
1306 0.69999999999999996 },
1307 { -27753716.768532373, 50, 5,
1308 0.80000000000000004 },
1309 { 27340473.952133428, 50, 5,
1310 0.89999999999999991 },
1311 { 0.0000000000000000, 50, 5,
1312 1.0000000000000000 },
1313 };
1314 const double toler025 = 2.5000000000000020e-13;
1315
1316 // Test data for l=50, m=10.
1317 // max(|f - f_GSL|): 0.0000000000000000
1318 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
1319 const testcase_assoc_legendre<double>
1320 data026[21] =
1321 {
1322 { -0.0000000000000000, 50, 10,
1323 -1.0000000000000000 },
1324 { -8994661710093155.0, 50, 10,
1325 -0.90000000000000002 },
1326 { 932311375306569.62, 50, 10,
1327 -0.80000000000000004 },
1328 { 12153535011507012., 50, 10,
1329 -0.69999999999999996 },
1330 { 12176690755542240., 50, 10,
1331 -0.59999999999999998 },
1332 { 9180035388465754.0, 50, 10,
1333 -0.50000000000000000 },
1334 { 889201701866910.38, 50, 10,
1335 -0.40000000000000002 },
1336 { -9451384032851604.0, 50, 10,
1337 -0.30000000000000004 },
1338 { -9926439446673564.0, 50, 10,
1339 -0.19999999999999996 },
1340 { 2794368162749970.5, 50, 10,
1341 -0.099999999999999978 },
1342 { 11452238249246346., 50, 10,
1343 0.0000000000000000 },
1344 { 2794368162750031.0, 50, 10,
1345 0.10000000000000009 },
1346 { -9926439446673564.0, 50, 10,
1347 0.19999999999999996 },
1348 { -9451384032851604.0, 50, 10,
1349 0.30000000000000004 },
1350 { 889201701866984.00, 50, 10,
1351 0.39999999999999991 },
1352 { 9180035388465754.0, 50, 10,
1353 0.50000000000000000 },
1354 { 12176690755542214., 50, 10,
1355 0.60000000000000009 },
1356 { 12153535011507012., 50, 10,
1357 0.69999999999999996 },
1358 { 932311375306569.62, 50, 10,
1359 0.80000000000000004 },
1360 { -8994661710093362.0, 50, 10,
1361 0.89999999999999991 },
1362 { 0.0000000000000000, 50, 10,
1363 1.0000000000000000 },
1364 };
1365 const double toler026 = 2.5000000000000020e-13;
1366
1367 // Test data for l=50, m=20.
1368 // max(|f - f_GSL|): 0.0000000000000000
1369 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
1370 const testcase_assoc_legendre<double>
1371 data027[21] =
1372 {
1373 { 0.0000000000000000, 50, 20,
1374 -1.0000000000000000 },
1375 { 1.6630925158645501e+33, 50, 20,
1376 -0.90000000000000002 },
1377 { 1.0622676657892052e+33, 50, 20,
1378 -0.80000000000000004 },
1379 { 8.6022521164717112e+32, 50, 20,
1380 -0.69999999999999996 },
1381 { 4.0860128756808466e+32, 50, 20,
1382 -0.59999999999999998 },
1383 { -4.0169860814274459e+32, 50, 20,
1384 -0.50000000000000000 },
1385 { -8.2324325279774037e+32, 50, 20,
1386 -0.40000000000000002 },
1387 { -4.0054067236243731e+31, 50, 20,
1388 -0.30000000000000004 },
1389 { 7.9309266056434309e+32, 50, 20,
1390 -0.19999999999999996 },
1391 { 5.4151358290898977e+31, 50, 20,
1392 -0.099999999999999978 },
1393 { -7.8735935697332210e+32, 50, 20,
1394 0.0000000000000000 },
1395 { 5.4151358290894924e+31, 50, 20,
1396 0.10000000000000009 },
1397 { 7.9309266056434309e+32, 50, 20,
1398 0.19999999999999996 },
1399 { -4.0054067236243731e+31, 50, 20,
1400 0.30000000000000004 },
1401 { -8.2324325279773994e+32, 50, 20,
1402 0.39999999999999991 },
1403 { -4.0169860814274459e+32, 50, 20,
1404 0.50000000000000000 },
1405 { 4.0860128756807846e+32, 50, 20,
1406 0.60000000000000009 },
1407 { 8.6022521164717112e+32, 50, 20,
1408 0.69999999999999996 },
1409 { 1.0622676657892052e+33, 50, 20,
1410 0.80000000000000004 },
1411 { 1.6630925158645483e+33, 50, 20,
1412 0.89999999999999991 },
1413 { 0.0000000000000000, 50, 20,
1414 1.0000000000000000 },
1415 };
1416 const double toler027 = 2.5000000000000020e-13;
1417
1418 // Test data for l=50, m=50.
1419 // max(|f - f_GSL|): 0.0000000000000000
1420 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
1421 const testcase_assoc_legendre<double>
1422 data028[21] =
1423 {
1424 { 0.0000000000000000, 50, 50,
1425 -1.0000000000000000 },
1426 { 2.5366994974431341e+60, 50, 50,
1427 -0.90000000000000002 },
1428 { 2.2028834403101213e+67, 50, 50,
1429 -0.80000000000000004 },
1430 { 1.3325496559566651e+71, 50, 50,
1431 -0.69999999999999996 },
1432 { 3.8898096431781969e+73, 50, 50,
1433 -0.59999999999999998 },
1434 { 2.0509760257037188e+75, 50, 50,
1435 -0.50000000000000000 },
1436 { 3.4866724533443283e+76, 50, 50,
1437 -0.40000000000000002 },
1438 { 2.5790740224150207e+77, 50, 50,
1439 -0.30000000000000004 },
1440 { 9.8222237931680989e+77, 50, 50,
1441 -0.19999999999999996 },
1442 { 2.1198682190366617e+78, 50, 50,
1443 -0.099999999999999978 },
1444 { 2.7253921397507295e+78, 50, 50,
1445 0.0000000000000000 },
1446 { 2.1198682190366617e+78, 50, 50,
1447 0.10000000000000009 },
1448 { 9.8222237931680989e+77, 50, 50,
1449 0.19999999999999996 },
1450 { 2.5790740224150207e+77, 50, 50,
1451 0.30000000000000004 },
1452 { 3.4866724533443283e+76, 50, 50,
1453 0.39999999999999991 },
1454 { 2.0509760257037188e+75, 50, 50,
1455 0.50000000000000000 },
1456 { 3.8898096431781724e+73, 50, 50,
1457 0.60000000000000009 },
1458 { 1.3325496559566651e+71, 50, 50,
1459 0.69999999999999996 },
1460 { 2.2028834403101213e+67, 50, 50,
1461 0.80000000000000004 },
1462 { 2.5366994974431990e+60, 50, 50,
1463 0.89999999999999991 },
1464 { 0.0000000000000000, 50, 50,
1465 1.0000000000000000 },
1466 };
1467 const double toler028 = 2.5000000000000020e-13;
1468
1469 // Test data for l=100, m=0.
1470 // max(|f - f_GSL|): 3.4694469519536142e-16
1471 // max(|f - f_GSL| / |f_GSL|): 6.8214063779431592e-15
1472 const testcase_assoc_legendre<double>
1473 data029[21] =
1474 {
1475 { 1.0000000000000000, 100, 0,
1476 -1.0000000000000000 },
1477 { 0.10226582055871893, 100, 0,
1478 -0.90000000000000002 },
1479 { 0.050861167913584228, 100, 0,
1480 -0.80000000000000004 },
1481 { -0.077132507199778641, 100, 0,
1482 -0.69999999999999996 },
1483 { -0.023747023905133141, 100, 0,
1484 -0.59999999999999998 },
1485 { -0.060518025961861198, 100, 0,
1486 -0.50000000000000000 },
1487 { -0.072258202125684470, 100, 0,
1488 -0.40000000000000002 },
1489 { 0.057127392202801566, 100, 0,
1490 -0.30000000000000004 },
1491 { 0.014681835355659706, 100, 0,
1492 -0.19999999999999996 },
1493 { -0.063895098434750205, 100, 0,
1494 -0.099999999999999978 },
1495 { 0.079589237387178727, 100, 0,
1496 0.0000000000000000 },
1497 { -0.063895098434749761, 100, 0,
1498 0.10000000000000009 },
1499 { 0.014681835355659706, 100, 0,
1500 0.19999999999999996 },
1501 { 0.057127392202801566, 100, 0,
1502 0.30000000000000004 },
1503 { -0.072258202125685025, 100, 0,
1504 0.39999999999999991 },
1505 { -0.060518025961861198, 100, 0,
1506 0.50000000000000000 },
1507 { -0.023747023905134217, 100, 0,
1508 0.60000000000000009 },
1509 { -0.077132507199778641, 100, 0,
1510 0.69999999999999996 },
1511 { 0.050861167913584228, 100, 0,
1512 0.80000000000000004 },
1513 { 0.10226582055871711, 100, 0,
1514 0.89999999999999991 },
1515 { 1.0000000000000000, 100, 0,
1516 1.0000000000000000 },
1517 };
1518 const double toler029 = 5.0000000000000039e-13;
1519
1520 // Test data for l=100, m=1.
1521 // max(|f - f_GSL|): 0.0000000000000000
1522 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
1523 const testcase_assoc_legendre<double>
1524 data030[21] =
1525 {
1526 { -0.0000000000000000, 100, 1,
1527 -1.0000000000000000 },
1528 { 6.5200167187780345, 100, 1,
1529 -0.90000000000000002 },
1530 { 9.0065170007027486, 100, 1,
1531 -0.80000000000000004 },
1532 { -5.4690908541180976, 100, 1,
1533 -0.69999999999999996 },
1534 { -8.6275439170430790, 100, 1,
1535 -0.59999999999999998 },
1536 { -6.0909031663448454, 100, 1,
1537 -0.50000000000000000 },
1538 { 4.1160338699561212, 100, 1,
1539 -0.40000000000000002 },
1540 { 5.8491043010758013, 100, 1,
1541 -0.30000000000000004 },
1542 { -7.9435138723089826, 100, 1,
1543 -0.19999999999999996 },
1544 { 4.7996285823989355, 100, 1,
1545 -0.099999999999999978 },
1546 { 0.0000000000000000, 100, 1,
1547 0.0000000000000000 },
1548 { -4.7996285823990101, 100, 1,
1549 0.10000000000000009 },
1550 { 7.9435138723089826, 100, 1,
1551 0.19999999999999996 },
1552 { -5.8491043010758013, 100, 1,
1553 0.30000000000000004 },
1554 { -4.1160338699560395, 100, 1,
1555 0.39999999999999991 },
1556 { 6.0909031663448454, 100, 1,
1557 0.50000000000000000 },
1558 { 8.6275439170430470, 100, 1,
1559 0.60000000000000009 },
1560 { 5.4690908541180976, 100, 1,
1561 0.69999999999999996 },
1562 { -9.0065170007027486, 100, 1,
1563 0.80000000000000004 },
1564 { -6.5200167187783542, 100, 1,
1565 0.89999999999999991 },
1566 { 0.0000000000000000, 100, 1,
1567 1.0000000000000000 },
1568 };
1569 const double toler030 = 2.5000000000000020e-13;
1570
1571 // Test data for l=100, m=2.
1572 // max(|f - f_GSL|): 0.0000000000000000
1573 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
1574 const testcase_assoc_legendre<double>
1575 data031[21] =
1576 {
1577 { 0.0000000000000000, 100, 2,
1578 -1.0000000000000000 },
1579 { -1005.9604880761002, 100, 2,
1580 -0.90000000000000002 },
1581 { -489.68041725865947, 100, 2,
1582 -0.80000000000000004 },
1583 { 768.31676011669924, 100, 2,
1584 -0.69999999999999996 },
1585 { 226.90362556627937, 100, 2,
1586 -0.59999999999999998 },
1587 { 604.19889304940341, 100, 2,
1588 -0.50000000000000000 },
1589 { 733.40061037838029, 100, 2,
1590 -0.40000000000000002 },
1591 { -573.30774483996390, 100, 2,
1592 -0.30000000000000004 },
1593 { -151.52946305080880, 100, 2,
1594 -0.19999999999999996 },
1595 { 646.30525583587985, 100, 2,
1596 -0.099999999999999978 },
1597 { -803.85129761050518, 100, 2,
1598 0.0000000000000000 },
1599 { 646.30525583587439, 100, 2,
1600 0.10000000000000009 },
1601 { -151.52946305080880, 100, 2,
1602 0.19999999999999996 },
1603 { -573.30774483996390, 100, 2,
1604 0.30000000000000004 },
1605 { 733.40061037838518, 100, 2,
1606 0.39999999999999991 },
1607 { 604.19889304940341, 100, 2,
1608 0.50000000000000000 },
1609 { 226.90362556629168, 100, 2,
1610 0.60000000000000009 },
1611 { 768.31676011669924, 100, 2,
1612 0.69999999999999996 },
1613 { -489.68041725865947, 100, 2,
1614 0.80000000000000004 },
1615 { -1005.9604880760779, 100, 2,
1616 0.89999999999999991 },
1617 { 0.0000000000000000, 100, 2,
1618 1.0000000000000000 },
1619 };
1620 const double toler031 = 2.5000000000000020e-13;
1621
1622 // Test data for l=100, m=5.
1623 // max(|f - f_GSL|): 0.0000000000000000
1624 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
1625 const testcase_assoc_legendre<double>
1626 data032[21] =
1627 {
1628 { 0.0000000000000000, 100, 5,
1629 -1.0000000000000000 },
1630 { 900551126.09653807, 100, 5,
1631 -0.90000000000000002 },
1632 { 988567431.55756140, 100, 5,
1633 -0.80000000000000004 },
1634 { -645646451.90344620, 100, 5,
1635 -0.69999999999999996 },
1636 { -897114585.29920685, 100, 5,
1637 -0.59999999999999998 },
1638 { -661710744.42483854, 100, 5,
1639 -0.50000000000000000 },
1640 { 380163158.51425636, 100, 5,
1641 -0.40000000000000002 },
1642 { 617391071.36632574, 100, 5,
1643 -0.30000000000000004 },
1644 { -805288801.85509109, 100, 5,
1645 -0.19999999999999996 },
1646 { 481041740.16728652, 100, 5,
1647 -0.099999999999999978 },
1648 { 0.0000000000000000, 100, 5,
1649 0.0000000000000000 },
1650 { -481041740.16729391, 100, 5,
1651 0.10000000000000009 },
1652 { 805288801.85509109, 100, 5,
1653 0.19999999999999996 },
1654 { -617391071.36632574, 100, 5,
1655 0.30000000000000004 },
1656 { -380163158.51424754, 100, 5,
1657 0.39999999999999991 },
1658 { 661710744.42483854, 100, 5,
1659 0.50000000000000000 },
1660 { 897114585.29920483, 100, 5,
1661 0.60000000000000009 },
1662 { 645646451.90344620, 100, 5,
1663 0.69999999999999996 },
1664 { -988567431.55756140, 100, 5,
1665 0.80000000000000004 },
1666 { -900551126.09655857, 100, 5,
1667 0.89999999999999991 },
1668 { 0.0000000000000000, 100, 5,
1669 1.0000000000000000 },
1670 };
1671 const double toler032 = 2.5000000000000020e-13;
1672
1673 // Test data for l=100, m=10.
1674 // max(|f - f_GSL|): 0.0000000000000000
1675 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
1676 const testcase_assoc_legendre<double>
1677 data033[21] =
1678 {
1679 { 0.0000000000000000, 100, 10,
1680 -1.0000000000000000 },
1681 { 2.5643395957658602e+17, 100, 10,
1682 -0.90000000000000002 },
1683 { 1.5778673545673485e+18, 100, 10,
1684 -0.80000000000000004 },
1685 { 4.4355048487496801e+18, 100, 10,
1686 -0.69999999999999996 },
1687 { -9.5936111659124288e+17, 100, 10,
1688 -0.59999999999999998 },
1689 { 4.2387123021963438e+18, 100, 10,
1690 -0.50000000000000000 },
1691 { 8.2370834618426542e+18, 100, 10,
1692 -0.40000000000000002 },
1693 { -4.9089358388052941e+18, 100, 10,
1694 -0.30000000000000004 },
1695 { -2.3468810358091274e+18, 100, 10,
1696 -0.19999999999999996 },
1697 { 6.8627855225034568e+18, 100, 10,
1698 -0.099999999999999978 },
1699 { -8.2494597181670380e+18, 100, 10,
1700 0.0000000000000000 },
1701 { 6.8627855225034056e+18, 100, 10,
1702 0.10000000000000009 },
1703 { -2.3468810358091274e+18, 100, 10,
1704 0.19999999999999996 },
1705 { -4.9089358388052941e+18, 100, 10,
1706 0.30000000000000004 },
1707 { 8.2370834618426767e+18, 100, 10,
1708 0.39999999999999991 },
1709 { 4.2387123021963438e+18, 100, 10,
1710 0.50000000000000000 },
1711 { -9.5936111659112640e+17, 100, 10,
1712 0.60000000000000009 },
1713 { 4.4355048487496801e+18, 100, 10,
1714 0.69999999999999996 },
1715 { 1.5778673545673485e+18, 100, 10,
1716 0.80000000000000004 },
1717 { 2.5643395957697341e+17, 100, 10,
1718 0.89999999999999991 },
1719 { 0.0000000000000000, 100, 10,
1720 1.0000000000000000 },
1721 };
1722 const double toler033 = 2.5000000000000020e-13;
1723
1724 // Test data for l=100, m=20.
1725 // max(|f - f_GSL|): 0.0000000000000000
1726 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
1727 const testcase_assoc_legendre<double>
1728 data034[21] =
1729 {
1730 { 0.0000000000000000, 100, 20,
1731 -1.0000000000000000 },
1732 { 7.1604344878780134e+37, 100, 20,
1733 -0.90000000000000002 },
1734 { -8.3963895116962231e+38, 100, 20,
1735 -0.80000000000000004 },
1736 { 7.9022236853110145e+38, 100, 20,
1737 -0.69999999999999996 },
1738 { 8.2680005574121013e+38, 100, 20,
1739 -0.59999999999999998 },
1740 { 3.0750497039999552e+38, 100, 20,
1741 -0.50000000000000000 },
1742 { -7.6120586043843889e+38, 100, 20,
1743 -0.40000000000000002 },
1744 { 1.1474496891901797e+38, 100, 20,
1745 -0.30000000000000004 },
1746 { 4.3966251307444241e+38, 100, 20,
1747 -0.19999999999999996 },
1748 { -7.0503266451702591e+38, 100, 20,
1749 -0.099999999999999978 },
1750 { 7.7727439836159581e+38, 100, 20,
1751 0.0000000000000000 },
1752 { -7.0503266451702213e+38, 100, 20,
1753 0.10000000000000009 },
1754 { 4.3966251307444241e+38, 100, 20,
1755 0.19999999999999996 },
1756 { 1.1474496891901797e+38, 100, 20,
1757 0.30000000000000004 },
1758 { -7.6120586043843556e+38, 100, 20,
1759 0.39999999999999991 },
1760 { 3.0750497039999552e+38, 100, 20,
1761 0.50000000000000000 },
1762 { 8.2680005574120394e+38, 100, 20,
1763 0.60000000000000009 },
1764 { 7.9022236853110145e+38, 100, 20,
1765 0.69999999999999996 },
1766 { -8.3963895116962231e+38, 100, 20,
1767 0.80000000000000004 },
1768 { 7.1604344878812652e+37, 100, 20,
1769 0.89999999999999991 },
1770 { 0.0000000000000000, 100, 20,
1771 1.0000000000000000 },
1772 };
1773 const double toler034 = 2.5000000000000020e-13;
1774
1775 // Test data for l=100, m=50.
1776 // max(|f - f_GSL|): 0.0000000000000000
1777 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
1778 const testcase_assoc_legendre<double>
1779 data035[21] =
1780 {
1781 { 0.0000000000000000, 100, 50,
1782 -1.0000000000000000 },
1783 { 9.3231278516893716e+96, 100, 50,
1784 -0.90000000000000002 },
1785 { -1.1029797977454281e+98, 100, 50,
1786 -0.80000000000000004 },
1787 { 1.8089333903465606e+97, 100, 50,
1788 -0.69999999999999996 },
1789 { 5.9364045925669405e+97, 100, 50,
1790 -0.59999999999999998 },
1791 { -8.2252620339727118e+97, 100, 50,
1792 -0.50000000000000000 },
1793 { 7.1431385093739863e+97, 100, 50,
1794 -0.40000000000000002 },
1795 { -3.3520602067479344e+97, 100, 50,
1796 -0.30000000000000004 },
1797 { -2.7791149588121382e+97, 100, 50,
1798 -0.19999999999999996 },
1799 { 9.0119338550180417e+97, 100, 50,
1800 -0.099999999999999978 },
1801 { -1.1712145031578381e+98, 100, 50,
1802 0.0000000000000000 },
1803 { 9.0119338550181207e+97, 100, 50,
1804 0.10000000000000009 },
1805 { -2.7791149588121382e+97, 100, 50,
1806 0.19999999999999996 },
1807 { -3.3520602067479344e+97, 100, 50,
1808 0.30000000000000004 },
1809 { 7.1431385093740728e+97, 100, 50,
1810 0.39999999999999991 },
1811 { -8.2252620339727118e+97, 100, 50,
1812 0.50000000000000000 },
1813 { 5.9364045925668024e+97, 100, 50,
1814 0.60000000000000009 },
1815 { 1.8089333903465606e+97, 100, 50,
1816 0.69999999999999996 },
1817 { -1.1029797977454281e+98, 100, 50,
1818 0.80000000000000004 },
1819 { 9.3231278516894968e+96, 100, 50,
1820 0.89999999999999991 },
1821 { 0.0000000000000000, 100, 50,
1822 1.0000000000000000 },
1823 };
1824 const double toler035 = 2.5000000000000020e-13;
1825
1826 // Test data for l=100, m=100.
1827 // max(|f - f_GSL|): 0.0000000000000000
1828 // max(|f - f_GSL| / |f_GSL|): 0.0000000000000000
1829 const testcase_assoc_legendre<double>
1830 data036[21] =
1831 {
1832 { 0.0000000000000000, 100, 100,
1833 -1.0000000000000000 },
1834 { 5.7751792255758316e+150, 100, 100,
1835 -0.90000000000000002 },
1836 { 4.3552236041585515e+164, 100, 100,
1837 -0.80000000000000004 },
1838 { 1.5936546850595123e+172, 100, 100,
1839 -0.69999999999999996 },
1840 { 1.3579510590289176e+177, 100, 100,
1841 -0.59999999999999998 },
1842 { 3.7752749682889513e+180, 100, 100,
1843 -0.50000000000000000 },
1844 { 1.0910627330458913e+183, 100, 100,
1845 -0.40000000000000002 },
1846 { 5.9697347526822483e+184, 100, 100,
1847 -0.30000000000000004 },
1848 { 8.6585879147526714e+185, 100, 100,
1849 -0.19999999999999996 },
1850 { 4.0331571908057011e+186, 100, 100,
1851 -0.099999999999999978 },
1852 { 6.6663086700729543e+186, 100, 100,
1853 0.0000000000000000 },
1854 { 4.0331571908057011e+186, 100, 100,
1855 0.10000000000000009 },
1856 { 8.6585879147526714e+185, 100, 100,
1857 0.19999999999999996 },
1858 { 5.9697347526822483e+184, 100, 100,
1859 0.30000000000000004 },
1860 { 1.0910627330458913e+183, 100, 100,
1861 0.39999999999999991 },
1862 { 3.7752749682889513e+180, 100, 100,
1863 0.50000000000000000 },
1864 { 1.3579510590289000e+177, 100, 100,
1865 0.60000000000000009 },
1866 { 1.5936546850595123e+172, 100, 100,
1867 0.69999999999999996 },
1868 { 4.3552236041585515e+164, 100, 100,
1869 0.80000000000000004 },
1870 { 5.7751792255761289e+150, 100, 100,
1871 0.89999999999999991 },
1872 { 0.0000000000000000, 100, 100,
1873 1.0000000000000000 },
1874 };
1875 const double toler036 = 2.5000000000000020e-13;
1876
1877 template<typename Tp, unsigned int Num>
1878 void
1879 test(const testcase_assoc_legendre<Tp> (&data)[Num], Tp toler)
1880 {
1881 bool test __attribute__((unused)) = true;
1882 const Tp eps = std::numeric_limits<Tp>::epsilon();
1883 Tp max_abs_diff = -Tp(1);
1884 Tp max_abs_frac = -Tp(1);
1885 unsigned int num_datum = Num;
1886 for (unsigned int i = 0; i < num_datum; ++i)
1887 {
1888 const Tp f = std::assoc_legendre(data[i].l, data[i].m,
1889 data[i].x);
1890 const Tp f0 = data[i].f0;
1891 const Tp diff = f - f0;
1892 if (std::abs(diff) > max_abs_diff)
1893 max_abs_diff = std::abs(diff);
1894 if (std::abs(f0) > Tp(10) * eps
1895 && std::abs(f) > Tp(10) * eps)
1896 {
1897 const Tp frac = diff / f0;
1898 if (std::abs(frac) > max_abs_frac)
1899 max_abs_frac = std::abs(frac);
1900 }
1901 }
1902 VERIFY(max_abs_frac < toler);
1903 }
1904
1905 int
1906 main()
1907 {
1908 test(data001, toler001);
1909 test(data002, toler002);
1910 test(data003, toler003);
1911 test(data004, toler004);
1912 test(data005, toler005);
1913 test(data006, toler006);
1914 test(data007, toler007);
1915 test(data008, toler008);
1916 test(data009, toler009);
1917 test(data010, toler010);
1918 test(data011, toler011);
1919 test(data012, toler012);
1920 test(data013, toler013);
1921 test(data014, toler014);
1922 test(data015, toler015);
1923 test(data016, toler016);
1924 test(data017, toler017);
1925 test(data018, toler018);
1926 test(data019, toler019);
1927 test(data020, toler020);
1928 test(data021, toler021);
1929 test(data022, toler022);
1930 test(data023, toler023);
1931 test(data024, toler024);
1932 test(data025, toler025);
1933 test(data026, toler026);
1934 test(data027, toler027);
1935 test(data028, toler028);
1936 test(data029, toler029);
1937 test(data030, toler030);
1938 test(data031, toler031);
1939 test(data032, toler032);
1940 test(data033, toler033);
1941 test(data034, toler034);
1942 test(data035, toler035);
1943 test(data036, toler036);
1944 return 0;
1945 }