]> git.ipfire.org Git - thirdparty/gcc.git/blob - libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/17_hyperg/check_value.cc
re PR c++/59378 (Internal compiler error when using __builtin_shuffle in a template...
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / tr1 / 5_numerical_facilities / special_functions / 17_hyperg / check_value.cc
1 // 2007-02-04 Edward Smith-Rowland <3dw4rd@verizon.net>
2 //
3 // Copyright (C) 2007-2013 Free Software Foundation, Inc.
4 //
5 // This file is part of the GNU ISO C++ Library. This library is free
6 // software; you can redistribute it and/or modify it under the
7 // terms of the GNU General Public License as published by the
8 // Free Software Foundation; either version 3, or (at your option)
9 // any later version.
10 //
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 // GNU General Public License for more details.
15 //
16 // You should have received a copy of the GNU General Public License along
17 // with this library; see the file COPYING3. If not see
18 // <http://www.gnu.org/licenses/>.
19
20 // hyperg
21
22
23 // Compare against values generated by the GNU Scientific Library.
24 // The GSL can be found on the web: http://www.gnu.org/software/gsl/
25
26 #include <tr1/cmath>
27 #if defined(__TEST_DEBUG)
28 #include <iostream>
29 #define VERIFY(A) \
30 if (!(A)) \
31 { \
32 std::cout << "line " << __LINE__ \
33 << " max_abs_frac = " << max_abs_frac \
34 << std::endl; \
35 }
36 #else
37 #include <testsuite_hooks.h>
38 #endif
39 #include "../testcase.h"
40
41
42 // Test data for a=0.0000000000000000, b=0.0000000000000000, c=2.0000000000000000.
43 testcase_hyperg<double> data001[] = {
44 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
45 2.0000000000000000, -0.90000000000000002 },
46 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
47 2.0000000000000000, -0.80000000000000004 },
48 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
49 2.0000000000000000, -0.69999999999999996 },
50 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
51 2.0000000000000000, -0.59999999999999998 },
52 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
53 2.0000000000000000, -0.50000000000000000 },
54 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
55 2.0000000000000000, -0.40000000000000002 },
56 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
57 2.0000000000000000, -0.30000000000000004 },
58 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
59 2.0000000000000000, -0.19999999999999996 },
60 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
61 2.0000000000000000, -0.099999999999999978 },
62 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
63 2.0000000000000000, 0.0000000000000000 },
64 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
65 2.0000000000000000, 0.10000000000000009 },
66 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
67 2.0000000000000000, 0.19999999999999996 },
68 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
69 2.0000000000000000, 0.30000000000000004 },
70 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
71 2.0000000000000000, 0.39999999999999991 },
72 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
73 2.0000000000000000, 0.50000000000000000 },
74 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
75 2.0000000000000000, 0.60000000000000009 },
76 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
77 2.0000000000000000, 0.69999999999999996 },
78 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
79 2.0000000000000000, 0.80000000000000004 },
80 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
81 2.0000000000000000, 0.89999999999999991 },
82 };
83
84 // Test function for a=0.0000000000000000, b=0.0000000000000000, c=2.0000000000000000.
85 template <typename Tp>
86 void test001()
87 {
88 const Tp eps = std::numeric_limits<Tp>::epsilon();
89 Tp max_abs_diff = -Tp(1);
90 Tp max_abs_frac = -Tp(1);
91 unsigned int num_datum = sizeof(data001)
92 / sizeof(testcase_hyperg<double>);
93 for (unsigned int i = 0; i < num_datum; ++i)
94 {
95 const Tp f = std::tr1::hyperg(Tp(data001[i].a), Tp(data001[i].b),
96 Tp(data001[i].c), Tp(data001[i].x));
97 const Tp f0 = data001[i].f0;
98 const Tp diff = f - f0;
99 if (std::abs(diff) > max_abs_diff)
100 max_abs_diff = std::abs(diff);
101 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
102 {
103 const Tp frac = diff / f0;
104 if (std::abs(frac) > max_abs_frac)
105 max_abs_frac = std::abs(frac);
106 }
107 }
108 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
109 }
110
111 // Test data for a=0.0000000000000000, b=0.0000000000000000, c=4.0000000000000000.
112 testcase_hyperg<double> data002[] = {
113 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
114 4.0000000000000000, -0.90000000000000002 },
115 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
116 4.0000000000000000, -0.80000000000000004 },
117 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
118 4.0000000000000000, -0.69999999999999996 },
119 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
120 4.0000000000000000, -0.59999999999999998 },
121 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
122 4.0000000000000000, -0.50000000000000000 },
123 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
124 4.0000000000000000, -0.40000000000000002 },
125 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
126 4.0000000000000000, -0.30000000000000004 },
127 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
128 4.0000000000000000, -0.19999999999999996 },
129 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
130 4.0000000000000000, -0.099999999999999978 },
131 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
132 4.0000000000000000, 0.0000000000000000 },
133 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
134 4.0000000000000000, 0.10000000000000009 },
135 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
136 4.0000000000000000, 0.19999999999999996 },
137 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
138 4.0000000000000000, 0.30000000000000004 },
139 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
140 4.0000000000000000, 0.39999999999999991 },
141 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
142 4.0000000000000000, 0.50000000000000000 },
143 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
144 4.0000000000000000, 0.60000000000000009 },
145 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
146 4.0000000000000000, 0.69999999999999996 },
147 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
148 4.0000000000000000, 0.80000000000000004 },
149 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
150 4.0000000000000000, 0.89999999999999991 },
151 };
152
153 // Test function for a=0.0000000000000000, b=0.0000000000000000, c=4.0000000000000000.
154 template <typename Tp>
155 void test002()
156 {
157 const Tp eps = std::numeric_limits<Tp>::epsilon();
158 Tp max_abs_diff = -Tp(1);
159 Tp max_abs_frac = -Tp(1);
160 unsigned int num_datum = sizeof(data002)
161 / sizeof(testcase_hyperg<double>);
162 for (unsigned int i = 0; i < num_datum; ++i)
163 {
164 const Tp f = std::tr1::hyperg(Tp(data002[i].a), Tp(data002[i].b),
165 Tp(data002[i].c), Tp(data002[i].x));
166 const Tp f0 = data002[i].f0;
167 const Tp diff = f - f0;
168 if (std::abs(diff) > max_abs_diff)
169 max_abs_diff = std::abs(diff);
170 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
171 {
172 const Tp frac = diff / f0;
173 if (std::abs(frac) > max_abs_frac)
174 max_abs_frac = std::abs(frac);
175 }
176 }
177 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
178 }
179
180 // Test data for a=0.0000000000000000, b=0.0000000000000000, c=6.0000000000000000.
181 testcase_hyperg<double> data003[] = {
182 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
183 6.0000000000000000, -0.90000000000000002 },
184 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
185 6.0000000000000000, -0.80000000000000004 },
186 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
187 6.0000000000000000, -0.69999999999999996 },
188 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
189 6.0000000000000000, -0.59999999999999998 },
190 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
191 6.0000000000000000, -0.50000000000000000 },
192 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
193 6.0000000000000000, -0.40000000000000002 },
194 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
195 6.0000000000000000, -0.30000000000000004 },
196 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
197 6.0000000000000000, -0.19999999999999996 },
198 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
199 6.0000000000000000, -0.099999999999999978 },
200 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
201 6.0000000000000000, 0.0000000000000000 },
202 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
203 6.0000000000000000, 0.10000000000000009 },
204 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
205 6.0000000000000000, 0.19999999999999996 },
206 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
207 6.0000000000000000, 0.30000000000000004 },
208 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
209 6.0000000000000000, 0.39999999999999991 },
210 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
211 6.0000000000000000, 0.50000000000000000 },
212 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
213 6.0000000000000000, 0.60000000000000009 },
214 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
215 6.0000000000000000, 0.69999999999999996 },
216 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
217 6.0000000000000000, 0.80000000000000004 },
218 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
219 6.0000000000000000, 0.89999999999999991 },
220 };
221
222 // Test function for a=0.0000000000000000, b=0.0000000000000000, c=6.0000000000000000.
223 template <typename Tp>
224 void test003()
225 {
226 const Tp eps = std::numeric_limits<Tp>::epsilon();
227 Tp max_abs_diff = -Tp(1);
228 Tp max_abs_frac = -Tp(1);
229 unsigned int num_datum = sizeof(data003)
230 / sizeof(testcase_hyperg<double>);
231 for (unsigned int i = 0; i < num_datum; ++i)
232 {
233 const Tp f = std::tr1::hyperg(Tp(data003[i].a), Tp(data003[i].b),
234 Tp(data003[i].c), Tp(data003[i].x));
235 const Tp f0 = data003[i].f0;
236 const Tp diff = f - f0;
237 if (std::abs(diff) > max_abs_diff)
238 max_abs_diff = std::abs(diff);
239 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
240 {
241 const Tp frac = diff / f0;
242 if (std::abs(frac) > max_abs_frac)
243 max_abs_frac = std::abs(frac);
244 }
245 }
246 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
247 }
248
249 // Test data for a=0.0000000000000000, b=0.0000000000000000, c=8.0000000000000000.
250 testcase_hyperg<double> data004[] = {
251 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
252 8.0000000000000000, -0.90000000000000002 },
253 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
254 8.0000000000000000, -0.80000000000000004 },
255 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
256 8.0000000000000000, -0.69999999999999996 },
257 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
258 8.0000000000000000, -0.59999999999999998 },
259 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
260 8.0000000000000000, -0.50000000000000000 },
261 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
262 8.0000000000000000, -0.40000000000000002 },
263 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
264 8.0000000000000000, -0.30000000000000004 },
265 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
266 8.0000000000000000, -0.19999999999999996 },
267 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
268 8.0000000000000000, -0.099999999999999978 },
269 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
270 8.0000000000000000, 0.0000000000000000 },
271 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
272 8.0000000000000000, 0.10000000000000009 },
273 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
274 8.0000000000000000, 0.19999999999999996 },
275 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
276 8.0000000000000000, 0.30000000000000004 },
277 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
278 8.0000000000000000, 0.39999999999999991 },
279 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
280 8.0000000000000000, 0.50000000000000000 },
281 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
282 8.0000000000000000, 0.60000000000000009 },
283 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
284 8.0000000000000000, 0.69999999999999996 },
285 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
286 8.0000000000000000, 0.80000000000000004 },
287 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
288 8.0000000000000000, 0.89999999999999991 },
289 };
290
291 // Test function for a=0.0000000000000000, b=0.0000000000000000, c=8.0000000000000000.
292 template <typename Tp>
293 void test004()
294 {
295 const Tp eps = std::numeric_limits<Tp>::epsilon();
296 Tp max_abs_diff = -Tp(1);
297 Tp max_abs_frac = -Tp(1);
298 unsigned int num_datum = sizeof(data004)
299 / sizeof(testcase_hyperg<double>);
300 for (unsigned int i = 0; i < num_datum; ++i)
301 {
302 const Tp f = std::tr1::hyperg(Tp(data004[i].a), Tp(data004[i].b),
303 Tp(data004[i].c), Tp(data004[i].x));
304 const Tp f0 = data004[i].f0;
305 const Tp diff = f - f0;
306 if (std::abs(diff) > max_abs_diff)
307 max_abs_diff = std::abs(diff);
308 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
309 {
310 const Tp frac = diff / f0;
311 if (std::abs(frac) > max_abs_frac)
312 max_abs_frac = std::abs(frac);
313 }
314 }
315 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
316 }
317
318 // Test data for a=0.0000000000000000, b=0.0000000000000000, c=10.000000000000000.
319 testcase_hyperg<double> data005[] = {
320 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
321 10.000000000000000, -0.90000000000000002 },
322 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
323 10.000000000000000, -0.80000000000000004 },
324 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
325 10.000000000000000, -0.69999999999999996 },
326 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
327 10.000000000000000, -0.59999999999999998 },
328 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
329 10.000000000000000, -0.50000000000000000 },
330 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
331 10.000000000000000, -0.40000000000000002 },
332 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
333 10.000000000000000, -0.30000000000000004 },
334 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
335 10.000000000000000, -0.19999999999999996 },
336 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
337 10.000000000000000, -0.099999999999999978 },
338 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
339 10.000000000000000, 0.0000000000000000 },
340 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
341 10.000000000000000, 0.10000000000000009 },
342 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
343 10.000000000000000, 0.19999999999999996 },
344 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
345 10.000000000000000, 0.30000000000000004 },
346 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
347 10.000000000000000, 0.39999999999999991 },
348 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
349 10.000000000000000, 0.50000000000000000 },
350 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
351 10.000000000000000, 0.60000000000000009 },
352 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
353 10.000000000000000, 0.69999999999999996 },
354 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
355 10.000000000000000, 0.80000000000000004 },
356 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
357 10.000000000000000, 0.89999999999999991 },
358 };
359
360 // Test function for a=0.0000000000000000, b=0.0000000000000000, c=10.000000000000000.
361 template <typename Tp>
362 void test005()
363 {
364 const Tp eps = std::numeric_limits<Tp>::epsilon();
365 Tp max_abs_diff = -Tp(1);
366 Tp max_abs_frac = -Tp(1);
367 unsigned int num_datum = sizeof(data005)
368 / sizeof(testcase_hyperg<double>);
369 for (unsigned int i = 0; i < num_datum; ++i)
370 {
371 const Tp f = std::tr1::hyperg(Tp(data005[i].a), Tp(data005[i].b),
372 Tp(data005[i].c), Tp(data005[i].x));
373 const Tp f0 = data005[i].f0;
374 const Tp diff = f - f0;
375 if (std::abs(diff) > max_abs_diff)
376 max_abs_diff = std::abs(diff);
377 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
378 {
379 const Tp frac = diff / f0;
380 if (std::abs(frac) > max_abs_frac)
381 max_abs_frac = std::abs(frac);
382 }
383 }
384 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
385 }
386
387 // Test data for a=0.0000000000000000, b=0.50000000000000000, c=2.0000000000000000.
388 testcase_hyperg<double> data006[] = {
389 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
390 2.0000000000000000, -0.90000000000000002 },
391 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
392 2.0000000000000000, -0.80000000000000004 },
393 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
394 2.0000000000000000, -0.69999999999999996 },
395 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
396 2.0000000000000000, -0.59999999999999998 },
397 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
398 2.0000000000000000, -0.50000000000000000 },
399 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
400 2.0000000000000000, -0.40000000000000002 },
401 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
402 2.0000000000000000, -0.30000000000000004 },
403 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
404 2.0000000000000000, -0.19999999999999996 },
405 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
406 2.0000000000000000, -0.099999999999999978 },
407 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
408 2.0000000000000000, 0.0000000000000000 },
409 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
410 2.0000000000000000, 0.10000000000000009 },
411 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
412 2.0000000000000000, 0.19999999999999996 },
413 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
414 2.0000000000000000, 0.30000000000000004 },
415 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
416 2.0000000000000000, 0.39999999999999991 },
417 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
418 2.0000000000000000, 0.50000000000000000 },
419 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
420 2.0000000000000000, 0.60000000000000009 },
421 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
422 2.0000000000000000, 0.69999999999999996 },
423 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
424 2.0000000000000000, 0.80000000000000004 },
425 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
426 2.0000000000000000, 0.89999999999999991 },
427 };
428
429 // Test function for a=0.0000000000000000, b=0.50000000000000000, c=2.0000000000000000.
430 template <typename Tp>
431 void test006()
432 {
433 const Tp eps = std::numeric_limits<Tp>::epsilon();
434 Tp max_abs_diff = -Tp(1);
435 Tp max_abs_frac = -Tp(1);
436 unsigned int num_datum = sizeof(data006)
437 / sizeof(testcase_hyperg<double>);
438 for (unsigned int i = 0; i < num_datum; ++i)
439 {
440 const Tp f = std::tr1::hyperg(Tp(data006[i].a), Tp(data006[i].b),
441 Tp(data006[i].c), Tp(data006[i].x));
442 const Tp f0 = data006[i].f0;
443 const Tp diff = f - f0;
444 if (std::abs(diff) > max_abs_diff)
445 max_abs_diff = std::abs(diff);
446 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
447 {
448 const Tp frac = diff / f0;
449 if (std::abs(frac) > max_abs_frac)
450 max_abs_frac = std::abs(frac);
451 }
452 }
453 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
454 }
455
456 // Test data for a=0.0000000000000000, b=0.50000000000000000, c=4.0000000000000000.
457 testcase_hyperg<double> data007[] = {
458 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
459 4.0000000000000000, -0.90000000000000002 },
460 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
461 4.0000000000000000, -0.80000000000000004 },
462 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
463 4.0000000000000000, -0.69999999999999996 },
464 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
465 4.0000000000000000, -0.59999999999999998 },
466 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
467 4.0000000000000000, -0.50000000000000000 },
468 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
469 4.0000000000000000, -0.40000000000000002 },
470 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
471 4.0000000000000000, -0.30000000000000004 },
472 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
473 4.0000000000000000, -0.19999999999999996 },
474 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
475 4.0000000000000000, -0.099999999999999978 },
476 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
477 4.0000000000000000, 0.0000000000000000 },
478 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
479 4.0000000000000000, 0.10000000000000009 },
480 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
481 4.0000000000000000, 0.19999999999999996 },
482 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
483 4.0000000000000000, 0.30000000000000004 },
484 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
485 4.0000000000000000, 0.39999999999999991 },
486 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
487 4.0000000000000000, 0.50000000000000000 },
488 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
489 4.0000000000000000, 0.60000000000000009 },
490 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
491 4.0000000000000000, 0.69999999999999996 },
492 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
493 4.0000000000000000, 0.80000000000000004 },
494 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
495 4.0000000000000000, 0.89999999999999991 },
496 };
497
498 // Test function for a=0.0000000000000000, b=0.50000000000000000, c=4.0000000000000000.
499 template <typename Tp>
500 void test007()
501 {
502 const Tp eps = std::numeric_limits<Tp>::epsilon();
503 Tp max_abs_diff = -Tp(1);
504 Tp max_abs_frac = -Tp(1);
505 unsigned int num_datum = sizeof(data007)
506 / sizeof(testcase_hyperg<double>);
507 for (unsigned int i = 0; i < num_datum; ++i)
508 {
509 const Tp f = std::tr1::hyperg(Tp(data007[i].a), Tp(data007[i].b),
510 Tp(data007[i].c), Tp(data007[i].x));
511 const Tp f0 = data007[i].f0;
512 const Tp diff = f - f0;
513 if (std::abs(diff) > max_abs_diff)
514 max_abs_diff = std::abs(diff);
515 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
516 {
517 const Tp frac = diff / f0;
518 if (std::abs(frac) > max_abs_frac)
519 max_abs_frac = std::abs(frac);
520 }
521 }
522 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
523 }
524
525 // Test data for a=0.0000000000000000, b=0.50000000000000000, c=6.0000000000000000.
526 testcase_hyperg<double> data008[] = {
527 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
528 6.0000000000000000, -0.90000000000000002 },
529 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
530 6.0000000000000000, -0.80000000000000004 },
531 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
532 6.0000000000000000, -0.69999999999999996 },
533 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
534 6.0000000000000000, -0.59999999999999998 },
535 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
536 6.0000000000000000, -0.50000000000000000 },
537 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
538 6.0000000000000000, -0.40000000000000002 },
539 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
540 6.0000000000000000, -0.30000000000000004 },
541 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
542 6.0000000000000000, -0.19999999999999996 },
543 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
544 6.0000000000000000, -0.099999999999999978 },
545 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
546 6.0000000000000000, 0.0000000000000000 },
547 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
548 6.0000000000000000, 0.10000000000000009 },
549 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
550 6.0000000000000000, 0.19999999999999996 },
551 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
552 6.0000000000000000, 0.30000000000000004 },
553 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
554 6.0000000000000000, 0.39999999999999991 },
555 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
556 6.0000000000000000, 0.50000000000000000 },
557 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
558 6.0000000000000000, 0.60000000000000009 },
559 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
560 6.0000000000000000, 0.69999999999999996 },
561 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
562 6.0000000000000000, 0.80000000000000004 },
563 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
564 6.0000000000000000, 0.89999999999999991 },
565 };
566
567 // Test function for a=0.0000000000000000, b=0.50000000000000000, c=6.0000000000000000.
568 template <typename Tp>
569 void test008()
570 {
571 const Tp eps = std::numeric_limits<Tp>::epsilon();
572 Tp max_abs_diff = -Tp(1);
573 Tp max_abs_frac = -Tp(1);
574 unsigned int num_datum = sizeof(data008)
575 / sizeof(testcase_hyperg<double>);
576 for (unsigned int i = 0; i < num_datum; ++i)
577 {
578 const Tp f = std::tr1::hyperg(Tp(data008[i].a), Tp(data008[i].b),
579 Tp(data008[i].c), Tp(data008[i].x));
580 const Tp f0 = data008[i].f0;
581 const Tp diff = f - f0;
582 if (std::abs(diff) > max_abs_diff)
583 max_abs_diff = std::abs(diff);
584 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
585 {
586 const Tp frac = diff / f0;
587 if (std::abs(frac) > max_abs_frac)
588 max_abs_frac = std::abs(frac);
589 }
590 }
591 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
592 }
593
594 // Test data for a=0.0000000000000000, b=0.50000000000000000, c=8.0000000000000000.
595 testcase_hyperg<double> data009[] = {
596 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
597 8.0000000000000000, -0.90000000000000002 },
598 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
599 8.0000000000000000, -0.80000000000000004 },
600 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
601 8.0000000000000000, -0.69999999999999996 },
602 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
603 8.0000000000000000, -0.59999999999999998 },
604 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
605 8.0000000000000000, -0.50000000000000000 },
606 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
607 8.0000000000000000, -0.40000000000000002 },
608 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
609 8.0000000000000000, -0.30000000000000004 },
610 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
611 8.0000000000000000, -0.19999999999999996 },
612 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
613 8.0000000000000000, -0.099999999999999978 },
614 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
615 8.0000000000000000, 0.0000000000000000 },
616 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
617 8.0000000000000000, 0.10000000000000009 },
618 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
619 8.0000000000000000, 0.19999999999999996 },
620 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
621 8.0000000000000000, 0.30000000000000004 },
622 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
623 8.0000000000000000, 0.39999999999999991 },
624 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
625 8.0000000000000000, 0.50000000000000000 },
626 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
627 8.0000000000000000, 0.60000000000000009 },
628 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
629 8.0000000000000000, 0.69999999999999996 },
630 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
631 8.0000000000000000, 0.80000000000000004 },
632 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
633 8.0000000000000000, 0.89999999999999991 },
634 };
635
636 // Test function for a=0.0000000000000000, b=0.50000000000000000, c=8.0000000000000000.
637 template <typename Tp>
638 void test009()
639 {
640 const Tp eps = std::numeric_limits<Tp>::epsilon();
641 Tp max_abs_diff = -Tp(1);
642 Tp max_abs_frac = -Tp(1);
643 unsigned int num_datum = sizeof(data009)
644 / sizeof(testcase_hyperg<double>);
645 for (unsigned int i = 0; i < num_datum; ++i)
646 {
647 const Tp f = std::tr1::hyperg(Tp(data009[i].a), Tp(data009[i].b),
648 Tp(data009[i].c), Tp(data009[i].x));
649 const Tp f0 = data009[i].f0;
650 const Tp diff = f - f0;
651 if (std::abs(diff) > max_abs_diff)
652 max_abs_diff = std::abs(diff);
653 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
654 {
655 const Tp frac = diff / f0;
656 if (std::abs(frac) > max_abs_frac)
657 max_abs_frac = std::abs(frac);
658 }
659 }
660 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
661 }
662
663 // Test data for a=0.0000000000000000, b=0.50000000000000000, c=10.000000000000000.
664 testcase_hyperg<double> data010[] = {
665 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
666 10.000000000000000, -0.90000000000000002 },
667 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
668 10.000000000000000, -0.80000000000000004 },
669 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
670 10.000000000000000, -0.69999999999999996 },
671 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
672 10.000000000000000, -0.59999999999999998 },
673 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
674 10.000000000000000, -0.50000000000000000 },
675 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
676 10.000000000000000, -0.40000000000000002 },
677 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
678 10.000000000000000, -0.30000000000000004 },
679 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
680 10.000000000000000, -0.19999999999999996 },
681 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
682 10.000000000000000, -0.099999999999999978 },
683 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
684 10.000000000000000, 0.0000000000000000 },
685 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
686 10.000000000000000, 0.10000000000000009 },
687 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
688 10.000000000000000, 0.19999999999999996 },
689 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
690 10.000000000000000, 0.30000000000000004 },
691 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
692 10.000000000000000, 0.39999999999999991 },
693 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
694 10.000000000000000, 0.50000000000000000 },
695 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
696 10.000000000000000, 0.60000000000000009 },
697 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
698 10.000000000000000, 0.69999999999999996 },
699 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
700 10.000000000000000, 0.80000000000000004 },
701 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
702 10.000000000000000, 0.89999999999999991 },
703 };
704
705 // Test function for a=0.0000000000000000, b=0.50000000000000000, c=10.000000000000000.
706 template <typename Tp>
707 void test010()
708 {
709 const Tp eps = std::numeric_limits<Tp>::epsilon();
710 Tp max_abs_diff = -Tp(1);
711 Tp max_abs_frac = -Tp(1);
712 unsigned int num_datum = sizeof(data010)
713 / sizeof(testcase_hyperg<double>);
714 for (unsigned int i = 0; i < num_datum; ++i)
715 {
716 const Tp f = std::tr1::hyperg(Tp(data010[i].a), Tp(data010[i].b),
717 Tp(data010[i].c), Tp(data010[i].x));
718 const Tp f0 = data010[i].f0;
719 const Tp diff = f - f0;
720 if (std::abs(diff) > max_abs_diff)
721 max_abs_diff = std::abs(diff);
722 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
723 {
724 const Tp frac = diff / f0;
725 if (std::abs(frac) > max_abs_frac)
726 max_abs_frac = std::abs(frac);
727 }
728 }
729 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
730 }
731
732 // Test data for a=0.0000000000000000, b=1.0000000000000000, c=2.0000000000000000.
733 testcase_hyperg<double> data011[] = {
734 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
735 2.0000000000000000, -0.90000000000000002 },
736 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
737 2.0000000000000000, -0.80000000000000004 },
738 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
739 2.0000000000000000, -0.69999999999999996 },
740 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
741 2.0000000000000000, -0.59999999999999998 },
742 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
743 2.0000000000000000, -0.50000000000000000 },
744 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
745 2.0000000000000000, -0.40000000000000002 },
746 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
747 2.0000000000000000, -0.30000000000000004 },
748 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
749 2.0000000000000000, -0.19999999999999996 },
750 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
751 2.0000000000000000, -0.099999999999999978 },
752 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
753 2.0000000000000000, 0.0000000000000000 },
754 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
755 2.0000000000000000, 0.10000000000000009 },
756 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
757 2.0000000000000000, 0.19999999999999996 },
758 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
759 2.0000000000000000, 0.30000000000000004 },
760 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
761 2.0000000000000000, 0.39999999999999991 },
762 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
763 2.0000000000000000, 0.50000000000000000 },
764 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
765 2.0000000000000000, 0.60000000000000009 },
766 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
767 2.0000000000000000, 0.69999999999999996 },
768 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
769 2.0000000000000000, 0.80000000000000004 },
770 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
771 2.0000000000000000, 0.89999999999999991 },
772 };
773
774 // Test function for a=0.0000000000000000, b=1.0000000000000000, c=2.0000000000000000.
775 template <typename Tp>
776 void test011()
777 {
778 const Tp eps = std::numeric_limits<Tp>::epsilon();
779 Tp max_abs_diff = -Tp(1);
780 Tp max_abs_frac = -Tp(1);
781 unsigned int num_datum = sizeof(data011)
782 / sizeof(testcase_hyperg<double>);
783 for (unsigned int i = 0; i < num_datum; ++i)
784 {
785 const Tp f = std::tr1::hyperg(Tp(data011[i].a), Tp(data011[i].b),
786 Tp(data011[i].c), Tp(data011[i].x));
787 const Tp f0 = data011[i].f0;
788 const Tp diff = f - f0;
789 if (std::abs(diff) > max_abs_diff)
790 max_abs_diff = std::abs(diff);
791 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
792 {
793 const Tp frac = diff / f0;
794 if (std::abs(frac) > max_abs_frac)
795 max_abs_frac = std::abs(frac);
796 }
797 }
798 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
799 }
800
801 // Test data for a=0.0000000000000000, b=1.0000000000000000, c=4.0000000000000000.
802 testcase_hyperg<double> data012[] = {
803 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
804 4.0000000000000000, -0.90000000000000002 },
805 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
806 4.0000000000000000, -0.80000000000000004 },
807 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
808 4.0000000000000000, -0.69999999999999996 },
809 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
810 4.0000000000000000, -0.59999999999999998 },
811 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
812 4.0000000000000000, -0.50000000000000000 },
813 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
814 4.0000000000000000, -0.40000000000000002 },
815 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
816 4.0000000000000000, -0.30000000000000004 },
817 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
818 4.0000000000000000, -0.19999999999999996 },
819 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
820 4.0000000000000000, -0.099999999999999978 },
821 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
822 4.0000000000000000, 0.0000000000000000 },
823 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
824 4.0000000000000000, 0.10000000000000009 },
825 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
826 4.0000000000000000, 0.19999999999999996 },
827 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
828 4.0000000000000000, 0.30000000000000004 },
829 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
830 4.0000000000000000, 0.39999999999999991 },
831 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
832 4.0000000000000000, 0.50000000000000000 },
833 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
834 4.0000000000000000, 0.60000000000000009 },
835 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
836 4.0000000000000000, 0.69999999999999996 },
837 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
838 4.0000000000000000, 0.80000000000000004 },
839 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
840 4.0000000000000000, 0.89999999999999991 },
841 };
842
843 // Test function for a=0.0000000000000000, b=1.0000000000000000, c=4.0000000000000000.
844 template <typename Tp>
845 void test012()
846 {
847 const Tp eps = std::numeric_limits<Tp>::epsilon();
848 Tp max_abs_diff = -Tp(1);
849 Tp max_abs_frac = -Tp(1);
850 unsigned int num_datum = sizeof(data012)
851 / sizeof(testcase_hyperg<double>);
852 for (unsigned int i = 0; i < num_datum; ++i)
853 {
854 const Tp f = std::tr1::hyperg(Tp(data012[i].a), Tp(data012[i].b),
855 Tp(data012[i].c), Tp(data012[i].x));
856 const Tp f0 = data012[i].f0;
857 const Tp diff = f - f0;
858 if (std::abs(diff) > max_abs_diff)
859 max_abs_diff = std::abs(diff);
860 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
861 {
862 const Tp frac = diff / f0;
863 if (std::abs(frac) > max_abs_frac)
864 max_abs_frac = std::abs(frac);
865 }
866 }
867 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
868 }
869
870 // Test data for a=0.0000000000000000, b=1.0000000000000000, c=6.0000000000000000.
871 testcase_hyperg<double> data013[] = {
872 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
873 6.0000000000000000, -0.90000000000000002 },
874 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
875 6.0000000000000000, -0.80000000000000004 },
876 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
877 6.0000000000000000, -0.69999999999999996 },
878 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
879 6.0000000000000000, -0.59999999999999998 },
880 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
881 6.0000000000000000, -0.50000000000000000 },
882 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
883 6.0000000000000000, -0.40000000000000002 },
884 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
885 6.0000000000000000, -0.30000000000000004 },
886 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
887 6.0000000000000000, -0.19999999999999996 },
888 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
889 6.0000000000000000, -0.099999999999999978 },
890 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
891 6.0000000000000000, 0.0000000000000000 },
892 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
893 6.0000000000000000, 0.10000000000000009 },
894 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
895 6.0000000000000000, 0.19999999999999996 },
896 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
897 6.0000000000000000, 0.30000000000000004 },
898 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
899 6.0000000000000000, 0.39999999999999991 },
900 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
901 6.0000000000000000, 0.50000000000000000 },
902 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
903 6.0000000000000000, 0.60000000000000009 },
904 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
905 6.0000000000000000, 0.69999999999999996 },
906 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
907 6.0000000000000000, 0.80000000000000004 },
908 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
909 6.0000000000000000, 0.89999999999999991 },
910 };
911
912 // Test function for a=0.0000000000000000, b=1.0000000000000000, c=6.0000000000000000.
913 template <typename Tp>
914 void test013()
915 {
916 const Tp eps = std::numeric_limits<Tp>::epsilon();
917 Tp max_abs_diff = -Tp(1);
918 Tp max_abs_frac = -Tp(1);
919 unsigned int num_datum = sizeof(data013)
920 / sizeof(testcase_hyperg<double>);
921 for (unsigned int i = 0; i < num_datum; ++i)
922 {
923 const Tp f = std::tr1::hyperg(Tp(data013[i].a), Tp(data013[i].b),
924 Tp(data013[i].c), Tp(data013[i].x));
925 const Tp f0 = data013[i].f0;
926 const Tp diff = f - f0;
927 if (std::abs(diff) > max_abs_diff)
928 max_abs_diff = std::abs(diff);
929 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
930 {
931 const Tp frac = diff / f0;
932 if (std::abs(frac) > max_abs_frac)
933 max_abs_frac = std::abs(frac);
934 }
935 }
936 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
937 }
938
939 // Test data for a=0.0000000000000000, b=1.0000000000000000, c=8.0000000000000000.
940 testcase_hyperg<double> data014[] = {
941 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
942 8.0000000000000000, -0.90000000000000002 },
943 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
944 8.0000000000000000, -0.80000000000000004 },
945 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
946 8.0000000000000000, -0.69999999999999996 },
947 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
948 8.0000000000000000, -0.59999999999999998 },
949 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
950 8.0000000000000000, -0.50000000000000000 },
951 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
952 8.0000000000000000, -0.40000000000000002 },
953 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
954 8.0000000000000000, -0.30000000000000004 },
955 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
956 8.0000000000000000, -0.19999999999999996 },
957 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
958 8.0000000000000000, -0.099999999999999978 },
959 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
960 8.0000000000000000, 0.0000000000000000 },
961 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
962 8.0000000000000000, 0.10000000000000009 },
963 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
964 8.0000000000000000, 0.19999999999999996 },
965 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
966 8.0000000000000000, 0.30000000000000004 },
967 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
968 8.0000000000000000, 0.39999999999999991 },
969 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
970 8.0000000000000000, 0.50000000000000000 },
971 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
972 8.0000000000000000, 0.60000000000000009 },
973 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
974 8.0000000000000000, 0.69999999999999996 },
975 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
976 8.0000000000000000, 0.80000000000000004 },
977 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
978 8.0000000000000000, 0.89999999999999991 },
979 };
980
981 // Test function for a=0.0000000000000000, b=1.0000000000000000, c=8.0000000000000000.
982 template <typename Tp>
983 void test014()
984 {
985 const Tp eps = std::numeric_limits<Tp>::epsilon();
986 Tp max_abs_diff = -Tp(1);
987 Tp max_abs_frac = -Tp(1);
988 unsigned int num_datum = sizeof(data014)
989 / sizeof(testcase_hyperg<double>);
990 for (unsigned int i = 0; i < num_datum; ++i)
991 {
992 const Tp f = std::tr1::hyperg(Tp(data014[i].a), Tp(data014[i].b),
993 Tp(data014[i].c), Tp(data014[i].x));
994 const Tp f0 = data014[i].f0;
995 const Tp diff = f - f0;
996 if (std::abs(diff) > max_abs_diff)
997 max_abs_diff = std::abs(diff);
998 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
999 {
1000 const Tp frac = diff / f0;
1001 if (std::abs(frac) > max_abs_frac)
1002 max_abs_frac = std::abs(frac);
1003 }
1004 }
1005 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1006 }
1007
1008 // Test data for a=0.0000000000000000, b=1.0000000000000000, c=10.000000000000000.
1009 testcase_hyperg<double> data015[] = {
1010 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
1011 10.000000000000000, -0.90000000000000002 },
1012 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
1013 10.000000000000000, -0.80000000000000004 },
1014 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
1015 10.000000000000000, -0.69999999999999996 },
1016 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
1017 10.000000000000000, -0.59999999999999998 },
1018 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
1019 10.000000000000000, -0.50000000000000000 },
1020 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
1021 10.000000000000000, -0.40000000000000002 },
1022 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
1023 10.000000000000000, -0.30000000000000004 },
1024 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
1025 10.000000000000000, -0.19999999999999996 },
1026 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
1027 10.000000000000000, -0.099999999999999978 },
1028 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
1029 10.000000000000000, 0.0000000000000000 },
1030 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
1031 10.000000000000000, 0.10000000000000009 },
1032 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
1033 10.000000000000000, 0.19999999999999996 },
1034 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
1035 10.000000000000000, 0.30000000000000004 },
1036 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
1037 10.000000000000000, 0.39999999999999991 },
1038 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
1039 10.000000000000000, 0.50000000000000000 },
1040 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
1041 10.000000000000000, 0.60000000000000009 },
1042 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
1043 10.000000000000000, 0.69999999999999996 },
1044 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
1045 10.000000000000000, 0.80000000000000004 },
1046 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
1047 10.000000000000000, 0.89999999999999991 },
1048 };
1049
1050 // Test function for a=0.0000000000000000, b=1.0000000000000000, c=10.000000000000000.
1051 template <typename Tp>
1052 void test015()
1053 {
1054 const Tp eps = std::numeric_limits<Tp>::epsilon();
1055 Tp max_abs_diff = -Tp(1);
1056 Tp max_abs_frac = -Tp(1);
1057 unsigned int num_datum = sizeof(data015)
1058 / sizeof(testcase_hyperg<double>);
1059 for (unsigned int i = 0; i < num_datum; ++i)
1060 {
1061 const Tp f = std::tr1::hyperg(Tp(data015[i].a), Tp(data015[i].b),
1062 Tp(data015[i].c), Tp(data015[i].x));
1063 const Tp f0 = data015[i].f0;
1064 const Tp diff = f - f0;
1065 if (std::abs(diff) > max_abs_diff)
1066 max_abs_diff = std::abs(diff);
1067 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
1068 {
1069 const Tp frac = diff / f0;
1070 if (std::abs(frac) > max_abs_frac)
1071 max_abs_frac = std::abs(frac);
1072 }
1073 }
1074 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1075 }
1076
1077 // Test data for a=0.0000000000000000, b=2.0000000000000000, c=2.0000000000000000.
1078 testcase_hyperg<double> data016[] = {
1079 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1080 2.0000000000000000, -0.90000000000000002 },
1081 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1082 2.0000000000000000, -0.80000000000000004 },
1083 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1084 2.0000000000000000, -0.69999999999999996 },
1085 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1086 2.0000000000000000, -0.59999999999999998 },
1087 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1088 2.0000000000000000, -0.50000000000000000 },
1089 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1090 2.0000000000000000, -0.40000000000000002 },
1091 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1092 2.0000000000000000, -0.30000000000000004 },
1093 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1094 2.0000000000000000, -0.19999999999999996 },
1095 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1096 2.0000000000000000, -0.099999999999999978 },
1097 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1098 2.0000000000000000, 0.0000000000000000 },
1099 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1100 2.0000000000000000, 0.10000000000000009 },
1101 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1102 2.0000000000000000, 0.19999999999999996 },
1103 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1104 2.0000000000000000, 0.30000000000000004 },
1105 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1106 2.0000000000000000, 0.39999999999999991 },
1107 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1108 2.0000000000000000, 0.50000000000000000 },
1109 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1110 2.0000000000000000, 0.60000000000000009 },
1111 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1112 2.0000000000000000, 0.69999999999999996 },
1113 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1114 2.0000000000000000, 0.80000000000000004 },
1115 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1116 2.0000000000000000, 0.89999999999999991 },
1117 };
1118
1119 // Test function for a=0.0000000000000000, b=2.0000000000000000, c=2.0000000000000000.
1120 template <typename Tp>
1121 void test016()
1122 {
1123 const Tp eps = std::numeric_limits<Tp>::epsilon();
1124 Tp max_abs_diff = -Tp(1);
1125 Tp max_abs_frac = -Tp(1);
1126 unsigned int num_datum = sizeof(data016)
1127 / sizeof(testcase_hyperg<double>);
1128 for (unsigned int i = 0; i < num_datum; ++i)
1129 {
1130 const Tp f = std::tr1::hyperg(Tp(data016[i].a), Tp(data016[i].b),
1131 Tp(data016[i].c), Tp(data016[i].x));
1132 const Tp f0 = data016[i].f0;
1133 const Tp diff = f - f0;
1134 if (std::abs(diff) > max_abs_diff)
1135 max_abs_diff = std::abs(diff);
1136 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
1137 {
1138 const Tp frac = diff / f0;
1139 if (std::abs(frac) > max_abs_frac)
1140 max_abs_frac = std::abs(frac);
1141 }
1142 }
1143 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1144 }
1145
1146 // Test data for a=0.0000000000000000, b=2.0000000000000000, c=4.0000000000000000.
1147 testcase_hyperg<double> data017[] = {
1148 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1149 4.0000000000000000, -0.90000000000000002 },
1150 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1151 4.0000000000000000, -0.80000000000000004 },
1152 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1153 4.0000000000000000, -0.69999999999999996 },
1154 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1155 4.0000000000000000, -0.59999999999999998 },
1156 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1157 4.0000000000000000, -0.50000000000000000 },
1158 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1159 4.0000000000000000, -0.40000000000000002 },
1160 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1161 4.0000000000000000, -0.30000000000000004 },
1162 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1163 4.0000000000000000, -0.19999999999999996 },
1164 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1165 4.0000000000000000, -0.099999999999999978 },
1166 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1167 4.0000000000000000, 0.0000000000000000 },
1168 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1169 4.0000000000000000, 0.10000000000000009 },
1170 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1171 4.0000000000000000, 0.19999999999999996 },
1172 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1173 4.0000000000000000, 0.30000000000000004 },
1174 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1175 4.0000000000000000, 0.39999999999999991 },
1176 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1177 4.0000000000000000, 0.50000000000000000 },
1178 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1179 4.0000000000000000, 0.60000000000000009 },
1180 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1181 4.0000000000000000, 0.69999999999999996 },
1182 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1183 4.0000000000000000, 0.80000000000000004 },
1184 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1185 4.0000000000000000, 0.89999999999999991 },
1186 };
1187
1188 // Test function for a=0.0000000000000000, b=2.0000000000000000, c=4.0000000000000000.
1189 template <typename Tp>
1190 void test017()
1191 {
1192 const Tp eps = std::numeric_limits<Tp>::epsilon();
1193 Tp max_abs_diff = -Tp(1);
1194 Tp max_abs_frac = -Tp(1);
1195 unsigned int num_datum = sizeof(data017)
1196 / sizeof(testcase_hyperg<double>);
1197 for (unsigned int i = 0; i < num_datum; ++i)
1198 {
1199 const Tp f = std::tr1::hyperg(Tp(data017[i].a), Tp(data017[i].b),
1200 Tp(data017[i].c), Tp(data017[i].x));
1201 const Tp f0 = data017[i].f0;
1202 const Tp diff = f - f0;
1203 if (std::abs(diff) > max_abs_diff)
1204 max_abs_diff = std::abs(diff);
1205 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
1206 {
1207 const Tp frac = diff / f0;
1208 if (std::abs(frac) > max_abs_frac)
1209 max_abs_frac = std::abs(frac);
1210 }
1211 }
1212 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1213 }
1214
1215 // Test data for a=0.0000000000000000, b=2.0000000000000000, c=6.0000000000000000.
1216 testcase_hyperg<double> data018[] = {
1217 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1218 6.0000000000000000, -0.90000000000000002 },
1219 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1220 6.0000000000000000, -0.80000000000000004 },
1221 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1222 6.0000000000000000, -0.69999999999999996 },
1223 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1224 6.0000000000000000, -0.59999999999999998 },
1225 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1226 6.0000000000000000, -0.50000000000000000 },
1227 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1228 6.0000000000000000, -0.40000000000000002 },
1229 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1230 6.0000000000000000, -0.30000000000000004 },
1231 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1232 6.0000000000000000, -0.19999999999999996 },
1233 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1234 6.0000000000000000, -0.099999999999999978 },
1235 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1236 6.0000000000000000, 0.0000000000000000 },
1237 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1238 6.0000000000000000, 0.10000000000000009 },
1239 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1240 6.0000000000000000, 0.19999999999999996 },
1241 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1242 6.0000000000000000, 0.30000000000000004 },
1243 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1244 6.0000000000000000, 0.39999999999999991 },
1245 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1246 6.0000000000000000, 0.50000000000000000 },
1247 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1248 6.0000000000000000, 0.60000000000000009 },
1249 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1250 6.0000000000000000, 0.69999999999999996 },
1251 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1252 6.0000000000000000, 0.80000000000000004 },
1253 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1254 6.0000000000000000, 0.89999999999999991 },
1255 };
1256
1257 // Test function for a=0.0000000000000000, b=2.0000000000000000, c=6.0000000000000000.
1258 template <typename Tp>
1259 void test018()
1260 {
1261 const Tp eps = std::numeric_limits<Tp>::epsilon();
1262 Tp max_abs_diff = -Tp(1);
1263 Tp max_abs_frac = -Tp(1);
1264 unsigned int num_datum = sizeof(data018)
1265 / sizeof(testcase_hyperg<double>);
1266 for (unsigned int i = 0; i < num_datum; ++i)
1267 {
1268 const Tp f = std::tr1::hyperg(Tp(data018[i].a), Tp(data018[i].b),
1269 Tp(data018[i].c), Tp(data018[i].x));
1270 const Tp f0 = data018[i].f0;
1271 const Tp diff = f - f0;
1272 if (std::abs(diff) > max_abs_diff)
1273 max_abs_diff = std::abs(diff);
1274 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
1275 {
1276 const Tp frac = diff / f0;
1277 if (std::abs(frac) > max_abs_frac)
1278 max_abs_frac = std::abs(frac);
1279 }
1280 }
1281 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1282 }
1283
1284 // Test data for a=0.0000000000000000, b=2.0000000000000000, c=8.0000000000000000.
1285 testcase_hyperg<double> data019[] = {
1286 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1287 8.0000000000000000, -0.90000000000000002 },
1288 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1289 8.0000000000000000, -0.80000000000000004 },
1290 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1291 8.0000000000000000, -0.69999999999999996 },
1292 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1293 8.0000000000000000, -0.59999999999999998 },
1294 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1295 8.0000000000000000, -0.50000000000000000 },
1296 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1297 8.0000000000000000, -0.40000000000000002 },
1298 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1299 8.0000000000000000, -0.30000000000000004 },
1300 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1301 8.0000000000000000, -0.19999999999999996 },
1302 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1303 8.0000000000000000, -0.099999999999999978 },
1304 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1305 8.0000000000000000, 0.0000000000000000 },
1306 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1307 8.0000000000000000, 0.10000000000000009 },
1308 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1309 8.0000000000000000, 0.19999999999999996 },
1310 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1311 8.0000000000000000, 0.30000000000000004 },
1312 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1313 8.0000000000000000, 0.39999999999999991 },
1314 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1315 8.0000000000000000, 0.50000000000000000 },
1316 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1317 8.0000000000000000, 0.60000000000000009 },
1318 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1319 8.0000000000000000, 0.69999999999999996 },
1320 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1321 8.0000000000000000, 0.80000000000000004 },
1322 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1323 8.0000000000000000, 0.89999999999999991 },
1324 };
1325
1326 // Test function for a=0.0000000000000000, b=2.0000000000000000, c=8.0000000000000000.
1327 template <typename Tp>
1328 void test019()
1329 {
1330 const Tp eps = std::numeric_limits<Tp>::epsilon();
1331 Tp max_abs_diff = -Tp(1);
1332 Tp max_abs_frac = -Tp(1);
1333 unsigned int num_datum = sizeof(data019)
1334 / sizeof(testcase_hyperg<double>);
1335 for (unsigned int i = 0; i < num_datum; ++i)
1336 {
1337 const Tp f = std::tr1::hyperg(Tp(data019[i].a), Tp(data019[i].b),
1338 Tp(data019[i].c), Tp(data019[i].x));
1339 const Tp f0 = data019[i].f0;
1340 const Tp diff = f - f0;
1341 if (std::abs(diff) > max_abs_diff)
1342 max_abs_diff = std::abs(diff);
1343 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
1344 {
1345 const Tp frac = diff / f0;
1346 if (std::abs(frac) > max_abs_frac)
1347 max_abs_frac = std::abs(frac);
1348 }
1349 }
1350 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1351 }
1352
1353 // Test data for a=0.0000000000000000, b=2.0000000000000000, c=10.000000000000000.
1354 testcase_hyperg<double> data020[] = {
1355 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1356 10.000000000000000, -0.90000000000000002 },
1357 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1358 10.000000000000000, -0.80000000000000004 },
1359 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1360 10.000000000000000, -0.69999999999999996 },
1361 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1362 10.000000000000000, -0.59999999999999998 },
1363 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1364 10.000000000000000, -0.50000000000000000 },
1365 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1366 10.000000000000000, -0.40000000000000002 },
1367 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1368 10.000000000000000, -0.30000000000000004 },
1369 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1370 10.000000000000000, -0.19999999999999996 },
1371 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1372 10.000000000000000, -0.099999999999999978 },
1373 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1374 10.000000000000000, 0.0000000000000000 },
1375 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1376 10.000000000000000, 0.10000000000000009 },
1377 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1378 10.000000000000000, 0.19999999999999996 },
1379 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1380 10.000000000000000, 0.30000000000000004 },
1381 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1382 10.000000000000000, 0.39999999999999991 },
1383 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1384 10.000000000000000, 0.50000000000000000 },
1385 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1386 10.000000000000000, 0.60000000000000009 },
1387 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1388 10.000000000000000, 0.69999999999999996 },
1389 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1390 10.000000000000000, 0.80000000000000004 },
1391 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
1392 10.000000000000000, 0.89999999999999991 },
1393 };
1394
1395 // Test function for a=0.0000000000000000, b=2.0000000000000000, c=10.000000000000000.
1396 template <typename Tp>
1397 void test020()
1398 {
1399 const Tp eps = std::numeric_limits<Tp>::epsilon();
1400 Tp max_abs_diff = -Tp(1);
1401 Tp max_abs_frac = -Tp(1);
1402 unsigned int num_datum = sizeof(data020)
1403 / sizeof(testcase_hyperg<double>);
1404 for (unsigned int i = 0; i < num_datum; ++i)
1405 {
1406 const Tp f = std::tr1::hyperg(Tp(data020[i].a), Tp(data020[i].b),
1407 Tp(data020[i].c), Tp(data020[i].x));
1408 const Tp f0 = data020[i].f0;
1409 const Tp diff = f - f0;
1410 if (std::abs(diff) > max_abs_diff)
1411 max_abs_diff = std::abs(diff);
1412 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
1413 {
1414 const Tp frac = diff / f0;
1415 if (std::abs(frac) > max_abs_frac)
1416 max_abs_frac = std::abs(frac);
1417 }
1418 }
1419 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1420 }
1421
1422 // Test data for a=0.0000000000000000, b=5.0000000000000000, c=2.0000000000000000.
1423 testcase_hyperg<double> data021[] = {
1424 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1425 2.0000000000000000, -0.90000000000000002 },
1426 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1427 2.0000000000000000, -0.80000000000000004 },
1428 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1429 2.0000000000000000, -0.69999999999999996 },
1430 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1431 2.0000000000000000, -0.59999999999999998 },
1432 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1433 2.0000000000000000, -0.50000000000000000 },
1434 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1435 2.0000000000000000, -0.40000000000000002 },
1436 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1437 2.0000000000000000, -0.30000000000000004 },
1438 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1439 2.0000000000000000, -0.19999999999999996 },
1440 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1441 2.0000000000000000, -0.099999999999999978 },
1442 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1443 2.0000000000000000, 0.0000000000000000 },
1444 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1445 2.0000000000000000, 0.10000000000000009 },
1446 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1447 2.0000000000000000, 0.19999999999999996 },
1448 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1449 2.0000000000000000, 0.30000000000000004 },
1450 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1451 2.0000000000000000, 0.39999999999999991 },
1452 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1453 2.0000000000000000, 0.50000000000000000 },
1454 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1455 2.0000000000000000, 0.60000000000000009 },
1456 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1457 2.0000000000000000, 0.69999999999999996 },
1458 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1459 2.0000000000000000, 0.80000000000000004 },
1460 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1461 2.0000000000000000, 0.89999999999999991 },
1462 };
1463
1464 // Test function for a=0.0000000000000000, b=5.0000000000000000, c=2.0000000000000000.
1465 template <typename Tp>
1466 void test021()
1467 {
1468 const Tp eps = std::numeric_limits<Tp>::epsilon();
1469 Tp max_abs_diff = -Tp(1);
1470 Tp max_abs_frac = -Tp(1);
1471 unsigned int num_datum = sizeof(data021)
1472 / sizeof(testcase_hyperg<double>);
1473 for (unsigned int i = 0; i < num_datum; ++i)
1474 {
1475 const Tp f = std::tr1::hyperg(Tp(data021[i].a), Tp(data021[i].b),
1476 Tp(data021[i].c), Tp(data021[i].x));
1477 const Tp f0 = data021[i].f0;
1478 const Tp diff = f - f0;
1479 if (std::abs(diff) > max_abs_diff)
1480 max_abs_diff = std::abs(diff);
1481 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
1482 {
1483 const Tp frac = diff / f0;
1484 if (std::abs(frac) > max_abs_frac)
1485 max_abs_frac = std::abs(frac);
1486 }
1487 }
1488 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1489 }
1490
1491 // Test data for a=0.0000000000000000, b=5.0000000000000000, c=4.0000000000000000.
1492 testcase_hyperg<double> data022[] = {
1493 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1494 4.0000000000000000, -0.90000000000000002 },
1495 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1496 4.0000000000000000, -0.80000000000000004 },
1497 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1498 4.0000000000000000, -0.69999999999999996 },
1499 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1500 4.0000000000000000, -0.59999999999999998 },
1501 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1502 4.0000000000000000, -0.50000000000000000 },
1503 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1504 4.0000000000000000, -0.40000000000000002 },
1505 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1506 4.0000000000000000, -0.30000000000000004 },
1507 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1508 4.0000000000000000, -0.19999999999999996 },
1509 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1510 4.0000000000000000, -0.099999999999999978 },
1511 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1512 4.0000000000000000, 0.0000000000000000 },
1513 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1514 4.0000000000000000, 0.10000000000000009 },
1515 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1516 4.0000000000000000, 0.19999999999999996 },
1517 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1518 4.0000000000000000, 0.30000000000000004 },
1519 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1520 4.0000000000000000, 0.39999999999999991 },
1521 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1522 4.0000000000000000, 0.50000000000000000 },
1523 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1524 4.0000000000000000, 0.60000000000000009 },
1525 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1526 4.0000000000000000, 0.69999999999999996 },
1527 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1528 4.0000000000000000, 0.80000000000000004 },
1529 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1530 4.0000000000000000, 0.89999999999999991 },
1531 };
1532
1533 // Test function for a=0.0000000000000000, b=5.0000000000000000, c=4.0000000000000000.
1534 template <typename Tp>
1535 void test022()
1536 {
1537 const Tp eps = std::numeric_limits<Tp>::epsilon();
1538 Tp max_abs_diff = -Tp(1);
1539 Tp max_abs_frac = -Tp(1);
1540 unsigned int num_datum = sizeof(data022)
1541 / sizeof(testcase_hyperg<double>);
1542 for (unsigned int i = 0; i < num_datum; ++i)
1543 {
1544 const Tp f = std::tr1::hyperg(Tp(data022[i].a), Tp(data022[i].b),
1545 Tp(data022[i].c), Tp(data022[i].x));
1546 const Tp f0 = data022[i].f0;
1547 const Tp diff = f - f0;
1548 if (std::abs(diff) > max_abs_diff)
1549 max_abs_diff = std::abs(diff);
1550 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
1551 {
1552 const Tp frac = diff / f0;
1553 if (std::abs(frac) > max_abs_frac)
1554 max_abs_frac = std::abs(frac);
1555 }
1556 }
1557 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1558 }
1559
1560 // Test data for a=0.0000000000000000, b=5.0000000000000000, c=6.0000000000000000.
1561 testcase_hyperg<double> data023[] = {
1562 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1563 6.0000000000000000, -0.90000000000000002 },
1564 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1565 6.0000000000000000, -0.80000000000000004 },
1566 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1567 6.0000000000000000, -0.69999999999999996 },
1568 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1569 6.0000000000000000, -0.59999999999999998 },
1570 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1571 6.0000000000000000, -0.50000000000000000 },
1572 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1573 6.0000000000000000, -0.40000000000000002 },
1574 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1575 6.0000000000000000, -0.30000000000000004 },
1576 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1577 6.0000000000000000, -0.19999999999999996 },
1578 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1579 6.0000000000000000, -0.099999999999999978 },
1580 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1581 6.0000000000000000, 0.0000000000000000 },
1582 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1583 6.0000000000000000, 0.10000000000000009 },
1584 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1585 6.0000000000000000, 0.19999999999999996 },
1586 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1587 6.0000000000000000, 0.30000000000000004 },
1588 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1589 6.0000000000000000, 0.39999999999999991 },
1590 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1591 6.0000000000000000, 0.50000000000000000 },
1592 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1593 6.0000000000000000, 0.60000000000000009 },
1594 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1595 6.0000000000000000, 0.69999999999999996 },
1596 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1597 6.0000000000000000, 0.80000000000000004 },
1598 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1599 6.0000000000000000, 0.89999999999999991 },
1600 };
1601
1602 // Test function for a=0.0000000000000000, b=5.0000000000000000, c=6.0000000000000000.
1603 template <typename Tp>
1604 void test023()
1605 {
1606 const Tp eps = std::numeric_limits<Tp>::epsilon();
1607 Tp max_abs_diff = -Tp(1);
1608 Tp max_abs_frac = -Tp(1);
1609 unsigned int num_datum = sizeof(data023)
1610 / sizeof(testcase_hyperg<double>);
1611 for (unsigned int i = 0; i < num_datum; ++i)
1612 {
1613 const Tp f = std::tr1::hyperg(Tp(data023[i].a), Tp(data023[i].b),
1614 Tp(data023[i].c), Tp(data023[i].x));
1615 const Tp f0 = data023[i].f0;
1616 const Tp diff = f - f0;
1617 if (std::abs(diff) > max_abs_diff)
1618 max_abs_diff = std::abs(diff);
1619 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
1620 {
1621 const Tp frac = diff / f0;
1622 if (std::abs(frac) > max_abs_frac)
1623 max_abs_frac = std::abs(frac);
1624 }
1625 }
1626 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1627 }
1628
1629 // Test data for a=0.0000000000000000, b=5.0000000000000000, c=8.0000000000000000.
1630 testcase_hyperg<double> data024[] = {
1631 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1632 8.0000000000000000, -0.90000000000000002 },
1633 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1634 8.0000000000000000, -0.80000000000000004 },
1635 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1636 8.0000000000000000, -0.69999999999999996 },
1637 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1638 8.0000000000000000, -0.59999999999999998 },
1639 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1640 8.0000000000000000, -0.50000000000000000 },
1641 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1642 8.0000000000000000, -0.40000000000000002 },
1643 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1644 8.0000000000000000, -0.30000000000000004 },
1645 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1646 8.0000000000000000, -0.19999999999999996 },
1647 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1648 8.0000000000000000, -0.099999999999999978 },
1649 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1650 8.0000000000000000, 0.0000000000000000 },
1651 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1652 8.0000000000000000, 0.10000000000000009 },
1653 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1654 8.0000000000000000, 0.19999999999999996 },
1655 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1656 8.0000000000000000, 0.30000000000000004 },
1657 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1658 8.0000000000000000, 0.39999999999999991 },
1659 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1660 8.0000000000000000, 0.50000000000000000 },
1661 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1662 8.0000000000000000, 0.60000000000000009 },
1663 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1664 8.0000000000000000, 0.69999999999999996 },
1665 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1666 8.0000000000000000, 0.80000000000000004 },
1667 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1668 8.0000000000000000, 0.89999999999999991 },
1669 };
1670
1671 // Test function for a=0.0000000000000000, b=5.0000000000000000, c=8.0000000000000000.
1672 template <typename Tp>
1673 void test024()
1674 {
1675 const Tp eps = std::numeric_limits<Tp>::epsilon();
1676 Tp max_abs_diff = -Tp(1);
1677 Tp max_abs_frac = -Tp(1);
1678 unsigned int num_datum = sizeof(data024)
1679 / sizeof(testcase_hyperg<double>);
1680 for (unsigned int i = 0; i < num_datum; ++i)
1681 {
1682 const Tp f = std::tr1::hyperg(Tp(data024[i].a), Tp(data024[i].b),
1683 Tp(data024[i].c), Tp(data024[i].x));
1684 const Tp f0 = data024[i].f0;
1685 const Tp diff = f - f0;
1686 if (std::abs(diff) > max_abs_diff)
1687 max_abs_diff = std::abs(diff);
1688 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
1689 {
1690 const Tp frac = diff / f0;
1691 if (std::abs(frac) > max_abs_frac)
1692 max_abs_frac = std::abs(frac);
1693 }
1694 }
1695 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1696 }
1697
1698 // Test data for a=0.0000000000000000, b=5.0000000000000000, c=10.000000000000000.
1699 testcase_hyperg<double> data025[] = {
1700 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1701 10.000000000000000, -0.90000000000000002 },
1702 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1703 10.000000000000000, -0.80000000000000004 },
1704 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1705 10.000000000000000, -0.69999999999999996 },
1706 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1707 10.000000000000000, -0.59999999999999998 },
1708 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1709 10.000000000000000, -0.50000000000000000 },
1710 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1711 10.000000000000000, -0.40000000000000002 },
1712 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1713 10.000000000000000, -0.30000000000000004 },
1714 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1715 10.000000000000000, -0.19999999999999996 },
1716 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1717 10.000000000000000, -0.099999999999999978 },
1718 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1719 10.000000000000000, 0.0000000000000000 },
1720 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1721 10.000000000000000, 0.10000000000000009 },
1722 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1723 10.000000000000000, 0.19999999999999996 },
1724 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1725 10.000000000000000, 0.30000000000000004 },
1726 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1727 10.000000000000000, 0.39999999999999991 },
1728 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1729 10.000000000000000, 0.50000000000000000 },
1730 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1731 10.000000000000000, 0.60000000000000009 },
1732 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1733 10.000000000000000, 0.69999999999999996 },
1734 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1735 10.000000000000000, 0.80000000000000004 },
1736 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
1737 10.000000000000000, 0.89999999999999991 },
1738 };
1739
1740 // Test function for a=0.0000000000000000, b=5.0000000000000000, c=10.000000000000000.
1741 template <typename Tp>
1742 void test025()
1743 {
1744 const Tp eps = std::numeric_limits<Tp>::epsilon();
1745 Tp max_abs_diff = -Tp(1);
1746 Tp max_abs_frac = -Tp(1);
1747 unsigned int num_datum = sizeof(data025)
1748 / sizeof(testcase_hyperg<double>);
1749 for (unsigned int i = 0; i < num_datum; ++i)
1750 {
1751 const Tp f = std::tr1::hyperg(Tp(data025[i].a), Tp(data025[i].b),
1752 Tp(data025[i].c), Tp(data025[i].x));
1753 const Tp f0 = data025[i].f0;
1754 const Tp diff = f - f0;
1755 if (std::abs(diff) > max_abs_diff)
1756 max_abs_diff = std::abs(diff);
1757 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
1758 {
1759 const Tp frac = diff / f0;
1760 if (std::abs(frac) > max_abs_frac)
1761 max_abs_frac = std::abs(frac);
1762 }
1763 }
1764 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1765 }
1766
1767 // Test data for a=0.0000000000000000, b=10.000000000000000, c=2.0000000000000000.
1768 testcase_hyperg<double> data026[] = {
1769 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1770 2.0000000000000000, -0.90000000000000002 },
1771 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1772 2.0000000000000000, -0.80000000000000004 },
1773 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1774 2.0000000000000000, -0.69999999999999996 },
1775 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1776 2.0000000000000000, -0.59999999999999998 },
1777 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1778 2.0000000000000000, -0.50000000000000000 },
1779 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1780 2.0000000000000000, -0.40000000000000002 },
1781 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1782 2.0000000000000000, -0.30000000000000004 },
1783 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1784 2.0000000000000000, -0.19999999999999996 },
1785 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1786 2.0000000000000000, -0.099999999999999978 },
1787 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1788 2.0000000000000000, 0.0000000000000000 },
1789 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1790 2.0000000000000000, 0.10000000000000009 },
1791 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1792 2.0000000000000000, 0.19999999999999996 },
1793 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1794 2.0000000000000000, 0.30000000000000004 },
1795 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1796 2.0000000000000000, 0.39999999999999991 },
1797 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1798 2.0000000000000000, 0.50000000000000000 },
1799 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1800 2.0000000000000000, 0.60000000000000009 },
1801 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1802 2.0000000000000000, 0.69999999999999996 },
1803 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1804 2.0000000000000000, 0.80000000000000004 },
1805 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1806 2.0000000000000000, 0.89999999999999991 },
1807 };
1808
1809 // Test function for a=0.0000000000000000, b=10.000000000000000, c=2.0000000000000000.
1810 template <typename Tp>
1811 void test026()
1812 {
1813 const Tp eps = std::numeric_limits<Tp>::epsilon();
1814 Tp max_abs_diff = -Tp(1);
1815 Tp max_abs_frac = -Tp(1);
1816 unsigned int num_datum = sizeof(data026)
1817 / sizeof(testcase_hyperg<double>);
1818 for (unsigned int i = 0; i < num_datum; ++i)
1819 {
1820 const Tp f = std::tr1::hyperg(Tp(data026[i].a), Tp(data026[i].b),
1821 Tp(data026[i].c), Tp(data026[i].x));
1822 const Tp f0 = data026[i].f0;
1823 const Tp diff = f - f0;
1824 if (std::abs(diff) > max_abs_diff)
1825 max_abs_diff = std::abs(diff);
1826 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
1827 {
1828 const Tp frac = diff / f0;
1829 if (std::abs(frac) > max_abs_frac)
1830 max_abs_frac = std::abs(frac);
1831 }
1832 }
1833 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1834 }
1835
1836 // Test data for a=0.0000000000000000, b=10.000000000000000, c=4.0000000000000000.
1837 testcase_hyperg<double> data027[] = {
1838 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1839 4.0000000000000000, -0.90000000000000002 },
1840 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1841 4.0000000000000000, -0.80000000000000004 },
1842 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1843 4.0000000000000000, -0.69999999999999996 },
1844 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1845 4.0000000000000000, -0.59999999999999998 },
1846 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1847 4.0000000000000000, -0.50000000000000000 },
1848 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1849 4.0000000000000000, -0.40000000000000002 },
1850 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1851 4.0000000000000000, -0.30000000000000004 },
1852 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1853 4.0000000000000000, -0.19999999999999996 },
1854 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1855 4.0000000000000000, -0.099999999999999978 },
1856 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1857 4.0000000000000000, 0.0000000000000000 },
1858 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1859 4.0000000000000000, 0.10000000000000009 },
1860 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1861 4.0000000000000000, 0.19999999999999996 },
1862 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1863 4.0000000000000000, 0.30000000000000004 },
1864 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1865 4.0000000000000000, 0.39999999999999991 },
1866 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1867 4.0000000000000000, 0.50000000000000000 },
1868 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1869 4.0000000000000000, 0.60000000000000009 },
1870 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1871 4.0000000000000000, 0.69999999999999996 },
1872 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1873 4.0000000000000000, 0.80000000000000004 },
1874 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1875 4.0000000000000000, 0.89999999999999991 },
1876 };
1877
1878 // Test function for a=0.0000000000000000, b=10.000000000000000, c=4.0000000000000000.
1879 template <typename Tp>
1880 void test027()
1881 {
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 = sizeof(data027)
1886 / sizeof(testcase_hyperg<double>);
1887 for (unsigned int i = 0; i < num_datum; ++i)
1888 {
1889 const Tp f = std::tr1::hyperg(Tp(data027[i].a), Tp(data027[i].b),
1890 Tp(data027[i].c), Tp(data027[i].x));
1891 const Tp f0 = data027[i].f0;
1892 const Tp diff = f - f0;
1893 if (std::abs(diff) > max_abs_diff)
1894 max_abs_diff = std::abs(diff);
1895 if (std::abs(f0) > Tp(10) * eps && 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 < Tp(2.5000000000000020e-13));
1903 }
1904
1905 // Test data for a=0.0000000000000000, b=10.000000000000000, c=6.0000000000000000.
1906 testcase_hyperg<double> data028[] = {
1907 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1908 6.0000000000000000, -0.90000000000000002 },
1909 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1910 6.0000000000000000, -0.80000000000000004 },
1911 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1912 6.0000000000000000, -0.69999999999999996 },
1913 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1914 6.0000000000000000, -0.59999999999999998 },
1915 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1916 6.0000000000000000, -0.50000000000000000 },
1917 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1918 6.0000000000000000, -0.40000000000000002 },
1919 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1920 6.0000000000000000, -0.30000000000000004 },
1921 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1922 6.0000000000000000, -0.19999999999999996 },
1923 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1924 6.0000000000000000, -0.099999999999999978 },
1925 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1926 6.0000000000000000, 0.0000000000000000 },
1927 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1928 6.0000000000000000, 0.10000000000000009 },
1929 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1930 6.0000000000000000, 0.19999999999999996 },
1931 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1932 6.0000000000000000, 0.30000000000000004 },
1933 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1934 6.0000000000000000, 0.39999999999999991 },
1935 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1936 6.0000000000000000, 0.50000000000000000 },
1937 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1938 6.0000000000000000, 0.60000000000000009 },
1939 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1940 6.0000000000000000, 0.69999999999999996 },
1941 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1942 6.0000000000000000, 0.80000000000000004 },
1943 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1944 6.0000000000000000, 0.89999999999999991 },
1945 };
1946
1947 // Test function for a=0.0000000000000000, b=10.000000000000000, c=6.0000000000000000.
1948 template <typename Tp>
1949 void test028()
1950 {
1951 const Tp eps = std::numeric_limits<Tp>::epsilon();
1952 Tp max_abs_diff = -Tp(1);
1953 Tp max_abs_frac = -Tp(1);
1954 unsigned int num_datum = sizeof(data028)
1955 / sizeof(testcase_hyperg<double>);
1956 for (unsigned int i = 0; i < num_datum; ++i)
1957 {
1958 const Tp f = std::tr1::hyperg(Tp(data028[i].a), Tp(data028[i].b),
1959 Tp(data028[i].c), Tp(data028[i].x));
1960 const Tp f0 = data028[i].f0;
1961 const Tp diff = f - f0;
1962 if (std::abs(diff) > max_abs_diff)
1963 max_abs_diff = std::abs(diff);
1964 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
1965 {
1966 const Tp frac = diff / f0;
1967 if (std::abs(frac) > max_abs_frac)
1968 max_abs_frac = std::abs(frac);
1969 }
1970 }
1971 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1972 }
1973
1974 // Test data for a=0.0000000000000000, b=10.000000000000000, c=8.0000000000000000.
1975 testcase_hyperg<double> data029[] = {
1976 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1977 8.0000000000000000, -0.90000000000000002 },
1978 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1979 8.0000000000000000, -0.80000000000000004 },
1980 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1981 8.0000000000000000, -0.69999999999999996 },
1982 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1983 8.0000000000000000, -0.59999999999999998 },
1984 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1985 8.0000000000000000, -0.50000000000000000 },
1986 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1987 8.0000000000000000, -0.40000000000000002 },
1988 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1989 8.0000000000000000, -0.30000000000000004 },
1990 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1991 8.0000000000000000, -0.19999999999999996 },
1992 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1993 8.0000000000000000, -0.099999999999999978 },
1994 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1995 8.0000000000000000, 0.0000000000000000 },
1996 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1997 8.0000000000000000, 0.10000000000000009 },
1998 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
1999 8.0000000000000000, 0.19999999999999996 },
2000 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2001 8.0000000000000000, 0.30000000000000004 },
2002 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2003 8.0000000000000000, 0.39999999999999991 },
2004 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2005 8.0000000000000000, 0.50000000000000000 },
2006 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2007 8.0000000000000000, 0.60000000000000009 },
2008 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2009 8.0000000000000000, 0.69999999999999996 },
2010 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2011 8.0000000000000000, 0.80000000000000004 },
2012 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2013 8.0000000000000000, 0.89999999999999991 },
2014 };
2015
2016 // Test function for a=0.0000000000000000, b=10.000000000000000, c=8.0000000000000000.
2017 template <typename Tp>
2018 void test029()
2019 {
2020 const Tp eps = std::numeric_limits<Tp>::epsilon();
2021 Tp max_abs_diff = -Tp(1);
2022 Tp max_abs_frac = -Tp(1);
2023 unsigned int num_datum = sizeof(data029)
2024 / sizeof(testcase_hyperg<double>);
2025 for (unsigned int i = 0; i < num_datum; ++i)
2026 {
2027 const Tp f = std::tr1::hyperg(Tp(data029[i].a), Tp(data029[i].b),
2028 Tp(data029[i].c), Tp(data029[i].x));
2029 const Tp f0 = data029[i].f0;
2030 const Tp diff = f - f0;
2031 if (std::abs(diff) > max_abs_diff)
2032 max_abs_diff = std::abs(diff);
2033 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
2034 {
2035 const Tp frac = diff / f0;
2036 if (std::abs(frac) > max_abs_frac)
2037 max_abs_frac = std::abs(frac);
2038 }
2039 }
2040 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2041 }
2042
2043 // Test data for a=0.0000000000000000, b=10.000000000000000, c=10.000000000000000.
2044 testcase_hyperg<double> data030[] = {
2045 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2046 10.000000000000000, -0.90000000000000002 },
2047 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2048 10.000000000000000, -0.80000000000000004 },
2049 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2050 10.000000000000000, -0.69999999999999996 },
2051 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2052 10.000000000000000, -0.59999999999999998 },
2053 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2054 10.000000000000000, -0.50000000000000000 },
2055 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2056 10.000000000000000, -0.40000000000000002 },
2057 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2058 10.000000000000000, -0.30000000000000004 },
2059 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2060 10.000000000000000, -0.19999999999999996 },
2061 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2062 10.000000000000000, -0.099999999999999978 },
2063 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2064 10.000000000000000, 0.0000000000000000 },
2065 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2066 10.000000000000000, 0.10000000000000009 },
2067 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2068 10.000000000000000, 0.19999999999999996 },
2069 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2070 10.000000000000000, 0.30000000000000004 },
2071 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2072 10.000000000000000, 0.39999999999999991 },
2073 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2074 10.000000000000000, 0.50000000000000000 },
2075 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2076 10.000000000000000, 0.60000000000000009 },
2077 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2078 10.000000000000000, 0.69999999999999996 },
2079 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2080 10.000000000000000, 0.80000000000000004 },
2081 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
2082 10.000000000000000, 0.89999999999999991 },
2083 };
2084
2085 // Test function for a=0.0000000000000000, b=10.000000000000000, c=10.000000000000000.
2086 template <typename Tp>
2087 void test030()
2088 {
2089 const Tp eps = std::numeric_limits<Tp>::epsilon();
2090 Tp max_abs_diff = -Tp(1);
2091 Tp max_abs_frac = -Tp(1);
2092 unsigned int num_datum = sizeof(data030)
2093 / sizeof(testcase_hyperg<double>);
2094 for (unsigned int i = 0; i < num_datum; ++i)
2095 {
2096 const Tp f = std::tr1::hyperg(Tp(data030[i].a), Tp(data030[i].b),
2097 Tp(data030[i].c), Tp(data030[i].x));
2098 const Tp f0 = data030[i].f0;
2099 const Tp diff = f - f0;
2100 if (std::abs(diff) > max_abs_diff)
2101 max_abs_diff = std::abs(diff);
2102 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
2103 {
2104 const Tp frac = diff / f0;
2105 if (std::abs(frac) > max_abs_frac)
2106 max_abs_frac = std::abs(frac);
2107 }
2108 }
2109 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2110 }
2111
2112 // Test data for a=0.0000000000000000, b=20.000000000000000, c=2.0000000000000000.
2113 testcase_hyperg<double> data031[] = {
2114 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2115 2.0000000000000000, -0.90000000000000002 },
2116 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2117 2.0000000000000000, -0.80000000000000004 },
2118 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2119 2.0000000000000000, -0.69999999999999996 },
2120 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2121 2.0000000000000000, -0.59999999999999998 },
2122 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2123 2.0000000000000000, -0.50000000000000000 },
2124 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2125 2.0000000000000000, -0.40000000000000002 },
2126 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2127 2.0000000000000000, -0.30000000000000004 },
2128 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2129 2.0000000000000000, -0.19999999999999996 },
2130 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2131 2.0000000000000000, -0.099999999999999978 },
2132 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2133 2.0000000000000000, 0.0000000000000000 },
2134 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2135 2.0000000000000000, 0.10000000000000009 },
2136 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2137 2.0000000000000000, 0.19999999999999996 },
2138 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2139 2.0000000000000000, 0.30000000000000004 },
2140 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2141 2.0000000000000000, 0.39999999999999991 },
2142 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2143 2.0000000000000000, 0.50000000000000000 },
2144 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2145 2.0000000000000000, 0.60000000000000009 },
2146 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2147 2.0000000000000000, 0.69999999999999996 },
2148 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2149 2.0000000000000000, 0.80000000000000004 },
2150 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2151 2.0000000000000000, 0.89999999999999991 },
2152 };
2153
2154 // Test function for a=0.0000000000000000, b=20.000000000000000, c=2.0000000000000000.
2155 template <typename Tp>
2156 void test031()
2157 {
2158 const Tp eps = std::numeric_limits<Tp>::epsilon();
2159 Tp max_abs_diff = -Tp(1);
2160 Tp max_abs_frac = -Tp(1);
2161 unsigned int num_datum = sizeof(data031)
2162 / sizeof(testcase_hyperg<double>);
2163 for (unsigned int i = 0; i < num_datum; ++i)
2164 {
2165 const Tp f = std::tr1::hyperg(Tp(data031[i].a), Tp(data031[i].b),
2166 Tp(data031[i].c), Tp(data031[i].x));
2167 const Tp f0 = data031[i].f0;
2168 const Tp diff = f - f0;
2169 if (std::abs(diff) > max_abs_diff)
2170 max_abs_diff = std::abs(diff);
2171 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
2172 {
2173 const Tp frac = diff / f0;
2174 if (std::abs(frac) > max_abs_frac)
2175 max_abs_frac = std::abs(frac);
2176 }
2177 }
2178 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2179 }
2180
2181 // Test data for a=0.0000000000000000, b=20.000000000000000, c=4.0000000000000000.
2182 testcase_hyperg<double> data032[] = {
2183 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2184 4.0000000000000000, -0.90000000000000002 },
2185 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2186 4.0000000000000000, -0.80000000000000004 },
2187 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2188 4.0000000000000000, -0.69999999999999996 },
2189 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2190 4.0000000000000000, -0.59999999999999998 },
2191 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2192 4.0000000000000000, -0.50000000000000000 },
2193 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2194 4.0000000000000000, -0.40000000000000002 },
2195 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2196 4.0000000000000000, -0.30000000000000004 },
2197 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2198 4.0000000000000000, -0.19999999999999996 },
2199 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2200 4.0000000000000000, -0.099999999999999978 },
2201 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2202 4.0000000000000000, 0.0000000000000000 },
2203 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2204 4.0000000000000000, 0.10000000000000009 },
2205 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2206 4.0000000000000000, 0.19999999999999996 },
2207 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2208 4.0000000000000000, 0.30000000000000004 },
2209 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2210 4.0000000000000000, 0.39999999999999991 },
2211 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2212 4.0000000000000000, 0.50000000000000000 },
2213 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2214 4.0000000000000000, 0.60000000000000009 },
2215 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2216 4.0000000000000000, 0.69999999999999996 },
2217 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2218 4.0000000000000000, 0.80000000000000004 },
2219 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2220 4.0000000000000000, 0.89999999999999991 },
2221 };
2222
2223 // Test function for a=0.0000000000000000, b=20.000000000000000, c=4.0000000000000000.
2224 template <typename Tp>
2225 void test032()
2226 {
2227 const Tp eps = std::numeric_limits<Tp>::epsilon();
2228 Tp max_abs_diff = -Tp(1);
2229 Tp max_abs_frac = -Tp(1);
2230 unsigned int num_datum = sizeof(data032)
2231 / sizeof(testcase_hyperg<double>);
2232 for (unsigned int i = 0; i < num_datum; ++i)
2233 {
2234 const Tp f = std::tr1::hyperg(Tp(data032[i].a), Tp(data032[i].b),
2235 Tp(data032[i].c), Tp(data032[i].x));
2236 const Tp f0 = data032[i].f0;
2237 const Tp diff = f - f0;
2238 if (std::abs(diff) > max_abs_diff)
2239 max_abs_diff = std::abs(diff);
2240 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
2241 {
2242 const Tp frac = diff / f0;
2243 if (std::abs(frac) > max_abs_frac)
2244 max_abs_frac = std::abs(frac);
2245 }
2246 }
2247 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2248 }
2249
2250 // Test data for a=0.0000000000000000, b=20.000000000000000, c=6.0000000000000000.
2251 testcase_hyperg<double> data033[] = {
2252 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2253 6.0000000000000000, -0.90000000000000002 },
2254 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2255 6.0000000000000000, -0.80000000000000004 },
2256 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2257 6.0000000000000000, -0.69999999999999996 },
2258 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2259 6.0000000000000000, -0.59999999999999998 },
2260 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2261 6.0000000000000000, -0.50000000000000000 },
2262 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2263 6.0000000000000000, -0.40000000000000002 },
2264 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2265 6.0000000000000000, -0.30000000000000004 },
2266 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2267 6.0000000000000000, -0.19999999999999996 },
2268 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2269 6.0000000000000000, -0.099999999999999978 },
2270 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2271 6.0000000000000000, 0.0000000000000000 },
2272 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2273 6.0000000000000000, 0.10000000000000009 },
2274 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2275 6.0000000000000000, 0.19999999999999996 },
2276 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2277 6.0000000000000000, 0.30000000000000004 },
2278 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2279 6.0000000000000000, 0.39999999999999991 },
2280 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2281 6.0000000000000000, 0.50000000000000000 },
2282 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2283 6.0000000000000000, 0.60000000000000009 },
2284 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2285 6.0000000000000000, 0.69999999999999996 },
2286 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2287 6.0000000000000000, 0.80000000000000004 },
2288 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2289 6.0000000000000000, 0.89999999999999991 },
2290 };
2291
2292 // Test function for a=0.0000000000000000, b=20.000000000000000, c=6.0000000000000000.
2293 template <typename Tp>
2294 void test033()
2295 {
2296 const Tp eps = std::numeric_limits<Tp>::epsilon();
2297 Tp max_abs_diff = -Tp(1);
2298 Tp max_abs_frac = -Tp(1);
2299 unsigned int num_datum = sizeof(data033)
2300 / sizeof(testcase_hyperg<double>);
2301 for (unsigned int i = 0; i < num_datum; ++i)
2302 {
2303 const Tp f = std::tr1::hyperg(Tp(data033[i].a), Tp(data033[i].b),
2304 Tp(data033[i].c), Tp(data033[i].x));
2305 const Tp f0 = data033[i].f0;
2306 const Tp diff = f - f0;
2307 if (std::abs(diff) > max_abs_diff)
2308 max_abs_diff = std::abs(diff);
2309 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
2310 {
2311 const Tp frac = diff / f0;
2312 if (std::abs(frac) > max_abs_frac)
2313 max_abs_frac = std::abs(frac);
2314 }
2315 }
2316 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2317 }
2318
2319 // Test data for a=0.0000000000000000, b=20.000000000000000, c=8.0000000000000000.
2320 testcase_hyperg<double> data034[] = {
2321 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2322 8.0000000000000000, -0.90000000000000002 },
2323 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2324 8.0000000000000000, -0.80000000000000004 },
2325 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2326 8.0000000000000000, -0.69999999999999996 },
2327 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2328 8.0000000000000000, -0.59999999999999998 },
2329 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2330 8.0000000000000000, -0.50000000000000000 },
2331 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2332 8.0000000000000000, -0.40000000000000002 },
2333 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2334 8.0000000000000000, -0.30000000000000004 },
2335 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2336 8.0000000000000000, -0.19999999999999996 },
2337 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2338 8.0000000000000000, -0.099999999999999978 },
2339 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2340 8.0000000000000000, 0.0000000000000000 },
2341 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2342 8.0000000000000000, 0.10000000000000009 },
2343 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2344 8.0000000000000000, 0.19999999999999996 },
2345 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2346 8.0000000000000000, 0.30000000000000004 },
2347 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2348 8.0000000000000000, 0.39999999999999991 },
2349 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2350 8.0000000000000000, 0.50000000000000000 },
2351 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2352 8.0000000000000000, 0.60000000000000009 },
2353 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2354 8.0000000000000000, 0.69999999999999996 },
2355 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2356 8.0000000000000000, 0.80000000000000004 },
2357 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2358 8.0000000000000000, 0.89999999999999991 },
2359 };
2360
2361 // Test function for a=0.0000000000000000, b=20.000000000000000, c=8.0000000000000000.
2362 template <typename Tp>
2363 void test034()
2364 {
2365 const Tp eps = std::numeric_limits<Tp>::epsilon();
2366 Tp max_abs_diff = -Tp(1);
2367 Tp max_abs_frac = -Tp(1);
2368 unsigned int num_datum = sizeof(data034)
2369 / sizeof(testcase_hyperg<double>);
2370 for (unsigned int i = 0; i < num_datum; ++i)
2371 {
2372 const Tp f = std::tr1::hyperg(Tp(data034[i].a), Tp(data034[i].b),
2373 Tp(data034[i].c), Tp(data034[i].x));
2374 const Tp f0 = data034[i].f0;
2375 const Tp diff = f - f0;
2376 if (std::abs(diff) > max_abs_diff)
2377 max_abs_diff = std::abs(diff);
2378 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
2379 {
2380 const Tp frac = diff / f0;
2381 if (std::abs(frac) > max_abs_frac)
2382 max_abs_frac = std::abs(frac);
2383 }
2384 }
2385 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2386 }
2387
2388 // Test data for a=0.0000000000000000, b=20.000000000000000, c=10.000000000000000.
2389 testcase_hyperg<double> data035[] = {
2390 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2391 10.000000000000000, -0.90000000000000002 },
2392 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2393 10.000000000000000, -0.80000000000000004 },
2394 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2395 10.000000000000000, -0.69999999999999996 },
2396 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2397 10.000000000000000, -0.59999999999999998 },
2398 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2399 10.000000000000000, -0.50000000000000000 },
2400 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2401 10.000000000000000, -0.40000000000000002 },
2402 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2403 10.000000000000000, -0.30000000000000004 },
2404 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2405 10.000000000000000, -0.19999999999999996 },
2406 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2407 10.000000000000000, -0.099999999999999978 },
2408 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2409 10.000000000000000, 0.0000000000000000 },
2410 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2411 10.000000000000000, 0.10000000000000009 },
2412 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2413 10.000000000000000, 0.19999999999999996 },
2414 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2415 10.000000000000000, 0.30000000000000004 },
2416 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2417 10.000000000000000, 0.39999999999999991 },
2418 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2419 10.000000000000000, 0.50000000000000000 },
2420 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2421 10.000000000000000, 0.60000000000000009 },
2422 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2423 10.000000000000000, 0.69999999999999996 },
2424 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2425 10.000000000000000, 0.80000000000000004 },
2426 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
2427 10.000000000000000, 0.89999999999999991 },
2428 };
2429
2430 // Test function for a=0.0000000000000000, b=20.000000000000000, c=10.000000000000000.
2431 template <typename Tp>
2432 void test035()
2433 {
2434 const Tp eps = std::numeric_limits<Tp>::epsilon();
2435 Tp max_abs_diff = -Tp(1);
2436 Tp max_abs_frac = -Tp(1);
2437 unsigned int num_datum = sizeof(data035)
2438 / sizeof(testcase_hyperg<double>);
2439 for (unsigned int i = 0; i < num_datum; ++i)
2440 {
2441 const Tp f = std::tr1::hyperg(Tp(data035[i].a), Tp(data035[i].b),
2442 Tp(data035[i].c), Tp(data035[i].x));
2443 const Tp f0 = data035[i].f0;
2444 const Tp diff = f - f0;
2445 if (std::abs(diff) > max_abs_diff)
2446 max_abs_diff = std::abs(diff);
2447 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
2448 {
2449 const Tp frac = diff / f0;
2450 if (std::abs(frac) > max_abs_frac)
2451 max_abs_frac = std::abs(frac);
2452 }
2453 }
2454 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2455 }
2456
2457 // Test data for a=0.50000000000000000, b=0.0000000000000000, c=2.0000000000000000.
2458 testcase_hyperg<double> data036[] = {
2459 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2460 2.0000000000000000, -0.90000000000000002 },
2461 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2462 2.0000000000000000, -0.80000000000000004 },
2463 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2464 2.0000000000000000, -0.69999999999999996 },
2465 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2466 2.0000000000000000, -0.59999999999999998 },
2467 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2468 2.0000000000000000, -0.50000000000000000 },
2469 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2470 2.0000000000000000, -0.40000000000000002 },
2471 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2472 2.0000000000000000, -0.30000000000000004 },
2473 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2474 2.0000000000000000, -0.19999999999999996 },
2475 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2476 2.0000000000000000, -0.099999999999999978 },
2477 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2478 2.0000000000000000, 0.0000000000000000 },
2479 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2480 2.0000000000000000, 0.10000000000000009 },
2481 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2482 2.0000000000000000, 0.19999999999999996 },
2483 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2484 2.0000000000000000, 0.30000000000000004 },
2485 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2486 2.0000000000000000, 0.39999999999999991 },
2487 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2488 2.0000000000000000, 0.50000000000000000 },
2489 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2490 2.0000000000000000, 0.60000000000000009 },
2491 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2492 2.0000000000000000, 0.69999999999999996 },
2493 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2494 2.0000000000000000, 0.80000000000000004 },
2495 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2496 2.0000000000000000, 0.89999999999999991 },
2497 };
2498
2499 // Test function for a=0.50000000000000000, b=0.0000000000000000, c=2.0000000000000000.
2500 template <typename Tp>
2501 void test036()
2502 {
2503 const Tp eps = std::numeric_limits<Tp>::epsilon();
2504 Tp max_abs_diff = -Tp(1);
2505 Tp max_abs_frac = -Tp(1);
2506 unsigned int num_datum = sizeof(data036)
2507 / sizeof(testcase_hyperg<double>);
2508 for (unsigned int i = 0; i < num_datum; ++i)
2509 {
2510 const Tp f = std::tr1::hyperg(Tp(data036[i].a), Tp(data036[i].b),
2511 Tp(data036[i].c), Tp(data036[i].x));
2512 const Tp f0 = data036[i].f0;
2513 const Tp diff = f - f0;
2514 if (std::abs(diff) > max_abs_diff)
2515 max_abs_diff = std::abs(diff);
2516 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
2517 {
2518 const Tp frac = diff / f0;
2519 if (std::abs(frac) > max_abs_frac)
2520 max_abs_frac = std::abs(frac);
2521 }
2522 }
2523 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2524 }
2525
2526 // Test data for a=0.50000000000000000, b=0.0000000000000000, c=4.0000000000000000.
2527 testcase_hyperg<double> data037[] = {
2528 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2529 4.0000000000000000, -0.90000000000000002 },
2530 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2531 4.0000000000000000, -0.80000000000000004 },
2532 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2533 4.0000000000000000, -0.69999999999999996 },
2534 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2535 4.0000000000000000, -0.59999999999999998 },
2536 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2537 4.0000000000000000, -0.50000000000000000 },
2538 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2539 4.0000000000000000, -0.40000000000000002 },
2540 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2541 4.0000000000000000, -0.30000000000000004 },
2542 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2543 4.0000000000000000, -0.19999999999999996 },
2544 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2545 4.0000000000000000, -0.099999999999999978 },
2546 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2547 4.0000000000000000, 0.0000000000000000 },
2548 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2549 4.0000000000000000, 0.10000000000000009 },
2550 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2551 4.0000000000000000, 0.19999999999999996 },
2552 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2553 4.0000000000000000, 0.30000000000000004 },
2554 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2555 4.0000000000000000, 0.39999999999999991 },
2556 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2557 4.0000000000000000, 0.50000000000000000 },
2558 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2559 4.0000000000000000, 0.60000000000000009 },
2560 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2561 4.0000000000000000, 0.69999999999999996 },
2562 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2563 4.0000000000000000, 0.80000000000000004 },
2564 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2565 4.0000000000000000, 0.89999999999999991 },
2566 };
2567
2568 // Test function for a=0.50000000000000000, b=0.0000000000000000, c=4.0000000000000000.
2569 template <typename Tp>
2570 void test037()
2571 {
2572 const Tp eps = std::numeric_limits<Tp>::epsilon();
2573 Tp max_abs_diff = -Tp(1);
2574 Tp max_abs_frac = -Tp(1);
2575 unsigned int num_datum = sizeof(data037)
2576 / sizeof(testcase_hyperg<double>);
2577 for (unsigned int i = 0; i < num_datum; ++i)
2578 {
2579 const Tp f = std::tr1::hyperg(Tp(data037[i].a), Tp(data037[i].b),
2580 Tp(data037[i].c), Tp(data037[i].x));
2581 const Tp f0 = data037[i].f0;
2582 const Tp diff = f - f0;
2583 if (std::abs(diff) > max_abs_diff)
2584 max_abs_diff = std::abs(diff);
2585 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
2586 {
2587 const Tp frac = diff / f0;
2588 if (std::abs(frac) > max_abs_frac)
2589 max_abs_frac = std::abs(frac);
2590 }
2591 }
2592 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2593 }
2594
2595 // Test data for a=0.50000000000000000, b=0.0000000000000000, c=6.0000000000000000.
2596 testcase_hyperg<double> data038[] = {
2597 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2598 6.0000000000000000, -0.90000000000000002 },
2599 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2600 6.0000000000000000, -0.80000000000000004 },
2601 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2602 6.0000000000000000, -0.69999999999999996 },
2603 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2604 6.0000000000000000, -0.59999999999999998 },
2605 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2606 6.0000000000000000, -0.50000000000000000 },
2607 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2608 6.0000000000000000, -0.40000000000000002 },
2609 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2610 6.0000000000000000, -0.30000000000000004 },
2611 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2612 6.0000000000000000, -0.19999999999999996 },
2613 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2614 6.0000000000000000, -0.099999999999999978 },
2615 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2616 6.0000000000000000, 0.0000000000000000 },
2617 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2618 6.0000000000000000, 0.10000000000000009 },
2619 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2620 6.0000000000000000, 0.19999999999999996 },
2621 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2622 6.0000000000000000, 0.30000000000000004 },
2623 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2624 6.0000000000000000, 0.39999999999999991 },
2625 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2626 6.0000000000000000, 0.50000000000000000 },
2627 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2628 6.0000000000000000, 0.60000000000000009 },
2629 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2630 6.0000000000000000, 0.69999999999999996 },
2631 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2632 6.0000000000000000, 0.80000000000000004 },
2633 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2634 6.0000000000000000, 0.89999999999999991 },
2635 };
2636
2637 // Test function for a=0.50000000000000000, b=0.0000000000000000, c=6.0000000000000000.
2638 template <typename Tp>
2639 void test038()
2640 {
2641 const Tp eps = std::numeric_limits<Tp>::epsilon();
2642 Tp max_abs_diff = -Tp(1);
2643 Tp max_abs_frac = -Tp(1);
2644 unsigned int num_datum = sizeof(data038)
2645 / sizeof(testcase_hyperg<double>);
2646 for (unsigned int i = 0; i < num_datum; ++i)
2647 {
2648 const Tp f = std::tr1::hyperg(Tp(data038[i].a), Tp(data038[i].b),
2649 Tp(data038[i].c), Tp(data038[i].x));
2650 const Tp f0 = data038[i].f0;
2651 const Tp diff = f - f0;
2652 if (std::abs(diff) > max_abs_diff)
2653 max_abs_diff = std::abs(diff);
2654 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
2655 {
2656 const Tp frac = diff / f0;
2657 if (std::abs(frac) > max_abs_frac)
2658 max_abs_frac = std::abs(frac);
2659 }
2660 }
2661 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2662 }
2663
2664 // Test data for a=0.50000000000000000, b=0.0000000000000000, c=8.0000000000000000.
2665 testcase_hyperg<double> data039[] = {
2666 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2667 8.0000000000000000, -0.90000000000000002 },
2668 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2669 8.0000000000000000, -0.80000000000000004 },
2670 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2671 8.0000000000000000, -0.69999999999999996 },
2672 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2673 8.0000000000000000, -0.59999999999999998 },
2674 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2675 8.0000000000000000, -0.50000000000000000 },
2676 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2677 8.0000000000000000, -0.40000000000000002 },
2678 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2679 8.0000000000000000, -0.30000000000000004 },
2680 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2681 8.0000000000000000, -0.19999999999999996 },
2682 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2683 8.0000000000000000, -0.099999999999999978 },
2684 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2685 8.0000000000000000, 0.0000000000000000 },
2686 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2687 8.0000000000000000, 0.10000000000000009 },
2688 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2689 8.0000000000000000, 0.19999999999999996 },
2690 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2691 8.0000000000000000, 0.30000000000000004 },
2692 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2693 8.0000000000000000, 0.39999999999999991 },
2694 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2695 8.0000000000000000, 0.50000000000000000 },
2696 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2697 8.0000000000000000, 0.60000000000000009 },
2698 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2699 8.0000000000000000, 0.69999999999999996 },
2700 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2701 8.0000000000000000, 0.80000000000000004 },
2702 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2703 8.0000000000000000, 0.89999999999999991 },
2704 };
2705
2706 // Test function for a=0.50000000000000000, b=0.0000000000000000, c=8.0000000000000000.
2707 template <typename Tp>
2708 void test039()
2709 {
2710 const Tp eps = std::numeric_limits<Tp>::epsilon();
2711 Tp max_abs_diff = -Tp(1);
2712 Tp max_abs_frac = -Tp(1);
2713 unsigned int num_datum = sizeof(data039)
2714 / sizeof(testcase_hyperg<double>);
2715 for (unsigned int i = 0; i < num_datum; ++i)
2716 {
2717 const Tp f = std::tr1::hyperg(Tp(data039[i].a), Tp(data039[i].b),
2718 Tp(data039[i].c), Tp(data039[i].x));
2719 const Tp f0 = data039[i].f0;
2720 const Tp diff = f - f0;
2721 if (std::abs(diff) > max_abs_diff)
2722 max_abs_diff = std::abs(diff);
2723 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
2724 {
2725 const Tp frac = diff / f0;
2726 if (std::abs(frac) > max_abs_frac)
2727 max_abs_frac = std::abs(frac);
2728 }
2729 }
2730 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2731 }
2732
2733 // Test data for a=0.50000000000000000, b=0.0000000000000000, c=10.000000000000000.
2734 testcase_hyperg<double> data040[] = {
2735 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2736 10.000000000000000, -0.90000000000000002 },
2737 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2738 10.000000000000000, -0.80000000000000004 },
2739 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2740 10.000000000000000, -0.69999999999999996 },
2741 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2742 10.000000000000000, -0.59999999999999998 },
2743 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2744 10.000000000000000, -0.50000000000000000 },
2745 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2746 10.000000000000000, -0.40000000000000002 },
2747 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2748 10.000000000000000, -0.30000000000000004 },
2749 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2750 10.000000000000000, -0.19999999999999996 },
2751 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2752 10.000000000000000, -0.099999999999999978 },
2753 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2754 10.000000000000000, 0.0000000000000000 },
2755 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2756 10.000000000000000, 0.10000000000000009 },
2757 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2758 10.000000000000000, 0.19999999999999996 },
2759 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2760 10.000000000000000, 0.30000000000000004 },
2761 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2762 10.000000000000000, 0.39999999999999991 },
2763 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2764 10.000000000000000, 0.50000000000000000 },
2765 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2766 10.000000000000000, 0.60000000000000009 },
2767 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2768 10.000000000000000, 0.69999999999999996 },
2769 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2770 10.000000000000000, 0.80000000000000004 },
2771 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
2772 10.000000000000000, 0.89999999999999991 },
2773 };
2774
2775 // Test function for a=0.50000000000000000, b=0.0000000000000000, c=10.000000000000000.
2776 template <typename Tp>
2777 void test040()
2778 {
2779 const Tp eps = std::numeric_limits<Tp>::epsilon();
2780 Tp max_abs_diff = -Tp(1);
2781 Tp max_abs_frac = -Tp(1);
2782 unsigned int num_datum = sizeof(data040)
2783 / sizeof(testcase_hyperg<double>);
2784 for (unsigned int i = 0; i < num_datum; ++i)
2785 {
2786 const Tp f = std::tr1::hyperg(Tp(data040[i].a), Tp(data040[i].b),
2787 Tp(data040[i].c), Tp(data040[i].x));
2788 const Tp f0 = data040[i].f0;
2789 const Tp diff = f - f0;
2790 if (std::abs(diff) > max_abs_diff)
2791 max_abs_diff = std::abs(diff);
2792 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
2793 {
2794 const Tp frac = diff / f0;
2795 if (std::abs(frac) > max_abs_frac)
2796 max_abs_frac = std::abs(frac);
2797 }
2798 }
2799 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2800 }
2801
2802 // Test data for a=0.50000000000000000, b=0.50000000000000000, c=2.0000000000000000.
2803 testcase_hyperg<double> data041[] = {
2804 { 0.91383715388743758, 0.50000000000000000, 0.50000000000000000,
2805 2.0000000000000000, -0.90000000000000002 },
2806 { 0.92151232618202283, 0.50000000000000000, 0.50000000000000000,
2807 2.0000000000000000, -0.80000000000000004 },
2808 { 0.92955086110354823, 0.50000000000000000, 0.50000000000000000,
2809 2.0000000000000000, -0.69999999999999996 },
2810 { 0.93798900119104844, 0.50000000000000000, 0.50000000000000000,
2811 2.0000000000000000, -0.59999999999999998 },
2812 { 0.94686887307107304, 0.50000000000000000, 0.50000000000000000,
2813 2.0000000000000000, -0.50000000000000000 },
2814 { 0.95623987262143295, 0.50000000000000000, 0.50000000000000000,
2815 2.0000000000000000, -0.40000000000000002 },
2816 { 0.96616049387450154, 0.50000000000000000, 0.50000000000000000,
2817 2.0000000000000000, -0.30000000000000004 },
2818 { 0.97670078782187519, 0.50000000000000000, 0.50000000000000000,
2819 2.0000000000000000, -0.19999999999999996 },
2820 { 0.98794573712298384, 0.50000000000000000, 0.50000000000000000,
2821 2.0000000000000000, -0.099999999999999978 },
2822 { 1.0000000000000000, 0.50000000000000000, 0.50000000000000000,
2823 2.0000000000000000, 0.0000000000000000 },
2824 { 1.0129947682256604, 0.50000000000000000, 0.50000000000000000,
2825 2.0000000000000000, 0.10000000000000009 },
2826 { 1.0270980168168973, 0.50000000000000000, 0.50000000000000000,
2827 2.0000000000000000, 0.19999999999999996 },
2828 { 1.0425304520063581, 0.50000000000000000, 0.50000000000000000,
2829 2.0000000000000000, 0.30000000000000004 },
2830 { 1.0595915916161471, 0.50000000000000000, 0.50000000000000000,
2831 2.0000000000000000, 0.39999999999999991 },
2832 { 1.0787052023767585, 0.50000000000000000, 0.50000000000000000,
2833 2.0000000000000000, 0.50000000000000000 },
2834 { 1.1005053642285867, 0.50000000000000000, 0.50000000000000000,
2835 2.0000000000000000, 0.60000000000000009 },
2836 { 1.1260196351148746, 0.50000000000000000, 0.50000000000000000,
2837 2.0000000000000000, 0.69999999999999996 },
2838 { 1.1571341977338991, 0.50000000000000000, 0.50000000000000000,
2839 2.0000000000000000, 0.80000000000000004 },
2840 { 1.1982111053717450, 0.50000000000000000, 0.50000000000000000,
2841 2.0000000000000000, 0.89999999999999991 },
2842 };
2843
2844 // Test function for a=0.50000000000000000, b=0.50000000000000000, c=2.0000000000000000.
2845 template <typename Tp>
2846 void test041()
2847 {
2848 const Tp eps = std::numeric_limits<Tp>::epsilon();
2849 Tp max_abs_diff = -Tp(1);
2850 Tp max_abs_frac = -Tp(1);
2851 unsigned int num_datum = sizeof(data041)
2852 / sizeof(testcase_hyperg<double>);
2853 for (unsigned int i = 0; i < num_datum; ++i)
2854 {
2855 const Tp f = std::tr1::hyperg(Tp(data041[i].a), Tp(data041[i].b),
2856 Tp(data041[i].c), Tp(data041[i].x));
2857 const Tp f0 = data041[i].f0;
2858 const Tp diff = f - f0;
2859 if (std::abs(diff) > max_abs_diff)
2860 max_abs_diff = std::abs(diff);
2861 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
2862 {
2863 const Tp frac = diff / f0;
2864 if (std::abs(frac) > max_abs_frac)
2865 max_abs_frac = std::abs(frac);
2866 }
2867 }
2868 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2869 }
2870
2871 // Test data for a=0.50000000000000000, b=0.50000000000000000, c=4.0000000000000000.
2872 testcase_hyperg<double> data042[] = {
2873 { 0.95255425675562733, 0.50000000000000000, 0.50000000000000000,
2874 4.0000000000000000, -0.90000000000000002 },
2875 { 0.95712841850078245, 0.50000000000000000, 0.50000000000000000,
2876 4.0000000000000000, -0.80000000000000004 },
2877 { 0.96184734120034532, 0.50000000000000000, 0.50000000000000000,
2878 4.0000000000000000, -0.69999999999999996 },
2879 { 0.96672141255196242, 0.50000000000000000, 0.50000000000000000,
2880 4.0000000000000000, -0.59999999999999998 },
2881 { 0.97176228710138646, 0.50000000000000000, 0.50000000000000000,
2882 4.0000000000000000, -0.50000000000000000 },
2883 { 0.97698311668286286, 0.50000000000000000, 0.50000000000000000,
2884 4.0000000000000000, -0.40000000000000002 },
2885 { 0.98239883902556069, 0.50000000000000000, 0.50000000000000000,
2886 4.0000000000000000, -0.30000000000000004 },
2887 { 0.98802654401961032, 0.50000000000000000, 0.50000000000000000,
2888 4.0000000000000000, -0.19999999999999996 },
2889 { 0.99388594556732701, 0.50000000000000000, 0.50000000000000000,
2890 4.0000000000000000, -0.099999999999999978 },
2891 { 1.0000000000000000, 0.50000000000000000, 0.50000000000000000,
2892 4.0000000000000000, 0.0000000000000000 },
2893 { 1.0063957328951061, 0.50000000000000000, 0.50000000000000000,
2894 4.0000000000000000, 0.10000000000000009 },
2895 { 1.0131053706824598, 0.50000000000000000, 0.50000000000000000,
2896 4.0000000000000000, 0.19999999999999996 },
2897 { 1.0201679332118803, 0.50000000000000000, 0.50000000000000000,
2898 4.0000000000000000, 0.30000000000000004 },
2899 { 1.0276315524377497, 0.50000000000000000, 0.50000000000000000,
2900 4.0000000000000000, 0.39999999999999991 },
2901 { 1.0355569942816882, 0.50000000000000000, 0.50000000000000000,
2902 4.0000000000000000, 0.50000000000000000 },
2903 { 1.0440233080381554, 0.50000000000000000, 0.50000000000000000,
2904 4.0000000000000000, 0.60000000000000009 },
2905 { 1.0531375808028993, 0.50000000000000000, 0.50000000000000000,
2906 4.0000000000000000, 0.69999999999999996 },
2907 { 1.0630536689840200, 0.50000000000000000, 0.50000000000000000,
2908 4.0000000000000000, 0.80000000000000004 },
2909 { 1.0740149570414563, 0.50000000000000000, 0.50000000000000000,
2910 4.0000000000000000, 0.89999999999999991 },
2911 };
2912
2913 // Test function for a=0.50000000000000000, b=0.50000000000000000, c=4.0000000000000000.
2914 template <typename Tp>
2915 void test042()
2916 {
2917 const Tp eps = std::numeric_limits<Tp>::epsilon();
2918 Tp max_abs_diff = -Tp(1);
2919 Tp max_abs_frac = -Tp(1);
2920 unsigned int num_datum = sizeof(data042)
2921 / sizeof(testcase_hyperg<double>);
2922 for (unsigned int i = 0; i < num_datum; ++i)
2923 {
2924 const Tp f = std::tr1::hyperg(Tp(data042[i].a), Tp(data042[i].b),
2925 Tp(data042[i].c), Tp(data042[i].x));
2926 const Tp f0 = data042[i].f0;
2927 const Tp diff = f - f0;
2928 if (std::abs(diff) > max_abs_diff)
2929 max_abs_diff = std::abs(diff);
2930 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
2931 {
2932 const Tp frac = diff / f0;
2933 if (std::abs(frac) > max_abs_frac)
2934 max_abs_frac = std::abs(frac);
2935 }
2936 }
2937 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2938 }
2939
2940 // Test data for a=0.50000000000000000, b=0.50000000000000000, c=6.0000000000000000.
2941 testcase_hyperg<double> data043[] = {
2942 { 0.96694084713323891, 0.50000000000000000, 0.50000000000000000,
2943 6.0000000000000000, -0.90000000000000002 },
2944 { 0.97024454918852587, 0.50000000000000000, 0.50000000000000000,
2945 6.0000000000000000, -0.80000000000000004 },
2946 { 0.97362815600391461, 0.50000000000000000, 0.50000000000000000,
2947 6.0000000000000000, -0.69999999999999996 },
2948 { 0.97709622064205115, 0.50000000000000000, 0.50000000000000000,
2949 6.0000000000000000, -0.59999999999999998 },
2950 { 0.98065374770570624, 0.50000000000000000, 0.50000000000000000,
2951 6.0000000000000000, -0.50000000000000000 },
2952 { 0.98430626119885489, 0.50000000000000000, 0.50000000000000000,
2953 6.0000000000000000, -0.40000000000000002 },
2954 { 0.98805988669621037, 0.50000000000000000, 0.50000000000000000,
2955 6.0000000000000000, -0.30000000000000004 },
2956 { 0.99192145185739655, 0.50000000000000000, 0.50000000000000000,
2957 6.0000000000000000, -0.19999999999999996 },
2958 { 0.99589861079880937, 0.50000000000000000, 0.50000000000000000,
2959 6.0000000000000000, -0.099999999999999978 },
2960 { 1.0000000000000000, 0.50000000000000000, 0.50000000000000000,
2961 6.0000000000000000, 0.0000000000000000 },
2962 { 1.0042354366729904, 0.50000000000000000, 0.50000000000000000,
2963 6.0000000000000000, 0.10000000000000009 },
2964 { 1.0086161755545404, 0.50000000000000000, 0.50000000000000000,
2965 6.0000000000000000, 0.19999999999999996 },
2966 { 1.0131552481403503, 0.50000000000000000, 0.50000000000000000,
2967 6.0000000000000000, 0.30000000000000004 },
2968 { 1.0178679218284707, 0.50000000000000000, 0.50000000000000000,
2969 6.0000000000000000, 0.39999999999999991 },
2970 { 1.0227723400312978, 0.50000000000000000, 0.50000000000000000,
2971 6.0000000000000000, 0.50000000000000000 },
2972 { 1.0278904483717863, 0.50000000000000000, 0.50000000000000000,
2973 6.0000000000000000, 0.60000000000000009 },
2974 { 1.0332494012993472, 0.50000000000000000, 0.50000000000000000,
2975 6.0000000000000000, 0.69999999999999996 },
2976 { 1.0388838453357794, 0.50000000000000000, 0.50000000000000000,
2977 6.0000000000000000, 0.80000000000000004 },
2978 { 1.0448400142331342, 0.50000000000000000, 0.50000000000000000,
2979 6.0000000000000000, 0.89999999999999991 },
2980 };
2981
2982 // Test function for a=0.50000000000000000, b=0.50000000000000000, c=6.0000000000000000.
2983 template <typename Tp>
2984 void test043()
2985 {
2986 const Tp eps = std::numeric_limits<Tp>::epsilon();
2987 Tp max_abs_diff = -Tp(1);
2988 Tp max_abs_frac = -Tp(1);
2989 unsigned int num_datum = sizeof(data043)
2990 / sizeof(testcase_hyperg<double>);
2991 for (unsigned int i = 0; i < num_datum; ++i)
2992 {
2993 const Tp f = std::tr1::hyperg(Tp(data043[i].a), Tp(data043[i].b),
2994 Tp(data043[i].c), Tp(data043[i].x));
2995 const Tp f0 = data043[i].f0;
2996 const Tp diff = f - f0;
2997 if (std::abs(diff) > max_abs_diff)
2998 max_abs_diff = std::abs(diff);
2999 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
3000 {
3001 const Tp frac = diff / f0;
3002 if (std::abs(frac) > max_abs_frac)
3003 max_abs_frac = std::abs(frac);
3004 }
3005 }
3006 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3007 }
3008
3009 // Test data for a=0.50000000000000000, b=0.50000000000000000, c=8.0000000000000000.
3010 testcase_hyperg<double> data044[] = {
3011 { 0.97456073259047449, 0.50000000000000000, 0.50000000000000000,
3012 8.0000000000000000, -0.90000000000000002 },
3013 { 0.97715689327833344, 0.50000000000000000, 0.50000000000000000,
3014 8.0000000000000000, -0.80000000000000004 },
3015 { 0.97980416868943099, 0.50000000000000000, 0.50000000000000000,
3016 8.0000000000000000, -0.69999999999999996 },
3017 { 0.98250498942832509, 0.50000000000000000, 0.50000000000000000,
3018 8.0000000000000000, -0.59999999999999998 },
3019 { 0.98526199049760832, 0.50000000000000000, 0.50000000000000000,
3020 8.0000000000000000, -0.50000000000000000 },
3021 { 0.98807803762902813, 0.50000000000000000, 0.50000000000000000,
3022 8.0000000000000000, -0.40000000000000002 },
3023 { 0.99095625840920332, 0.50000000000000000, 0.50000000000000000,
3024 8.0000000000000000, -0.30000000000000004 },
3025 { 0.99390007937387959, 0.50000000000000000, 0.50000000000000000,
3026 8.0000000000000000, -0.19999999999999996 },
3027 { 0.99691327061866730, 0.50000000000000000, 0.50000000000000000,
3028 8.0000000000000000, -0.099999999999999978 },
3029 { 1.0000000000000000, 0.50000000000000000, 0.50000000000000000,
3030 8.0000000000000000, 0.0000000000000000 },
3031 { 1.0031648997547440, 0.50000000000000000, 0.50000000000000000,
3032 8.0000000000000000, 0.10000000000000009 },
3033 { 1.0064131494767281, 0.50000000000000000, 0.50000000000000000,
3034 8.0000000000000000, 0.19999999999999996 },
3035 { 1.0097505810668461, 0.50000000000000000, 0.50000000000000000,
3036 8.0000000000000000, 0.30000000000000004 },
3037 { 1.0131838138968663, 0.50000000000000000, 0.50000000000000000,
3038 8.0000000000000000, 0.39999999999999991 },
3039 { 1.0167204326938339, 0.50000000000000000, 0.50000000000000000,
3040 8.0000000000000000, 0.50000000000000000 },
3041 { 1.0203692279382193, 0.50000000000000000, 0.50000000000000000,
3042 8.0000000000000000, 0.60000000000000009 },
3043 { 1.0241405318057402, 0.50000000000000000, 0.50000000000000000,
3044 8.0000000000000000, 0.69999999999999996 },
3045 { 1.0280467087844301, 0.50000000000000000, 0.50000000000000000,
3046 8.0000000000000000, 0.80000000000000004 },
3047 { 1.0321029179180026, 0.50000000000000000, 0.50000000000000000,
3048 8.0000000000000000, 0.89999999999999991 },
3049 };
3050
3051 // Test function for a=0.50000000000000000, b=0.50000000000000000, c=8.0000000000000000.
3052 template <typename Tp>
3053 void test044()
3054 {
3055 const Tp eps = std::numeric_limits<Tp>::epsilon();
3056 Tp max_abs_diff = -Tp(1);
3057 Tp max_abs_frac = -Tp(1);
3058 unsigned int num_datum = sizeof(data044)
3059 / sizeof(testcase_hyperg<double>);
3060 for (unsigned int i = 0; i < num_datum; ++i)
3061 {
3062 const Tp f = std::tr1::hyperg(Tp(data044[i].a), Tp(data044[i].b),
3063 Tp(data044[i].c), Tp(data044[i].x));
3064 const Tp f0 = data044[i].f0;
3065 const Tp diff = f - f0;
3066 if (std::abs(diff) > max_abs_diff)
3067 max_abs_diff = std::abs(diff);
3068 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
3069 {
3070 const Tp frac = diff / f0;
3071 if (std::abs(frac) > max_abs_frac)
3072 max_abs_frac = std::abs(frac);
3073 }
3074 }
3075 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3076 }
3077
3078 // Test data for a=0.50000000000000000, b=0.50000000000000000, c=10.000000000000000.
3079 testcase_hyperg<double> data045[] = {
3080 { 0.97930223035212161, 0.50000000000000000, 0.50000000000000000,
3081 10.000000000000000, -0.90000000000000002 },
3082 { 0.98144406855076416, 0.50000000000000000, 0.50000000000000000,
3083 10.000000000000000, -0.80000000000000004 },
3084 { 0.98362155940297302, 0.50000000000000000, 0.50000000000000000,
3085 10.000000000000000, -0.69999999999999996 },
3086 { 0.98583616201745805, 0.50000000000000000, 0.50000000000000000,
3087 10.000000000000000, -0.59999999999999998 },
3088 { 0.98808944235385077, 0.50000000000000000, 0.50000000000000000,
3089 10.000000000000000, -0.50000000000000000 },
3090 { 0.99038308530635433, 0.50000000000000000, 0.50000000000000000,
3091 10.000000000000000, -0.40000000000000002 },
3092 { 0.99271890872975732, 0.50000000000000000, 0.50000000000000000,
3093 10.000000000000000, -0.30000000000000004 },
3094 { 0.99509887982916734, 0.50000000000000000, 0.50000000000000000,
3095 10.000000000000000, -0.19999999999999996 },
3096 { 0.99752513445413604, 0.50000000000000000, 0.50000000000000000,
3097 10.000000000000000, -0.099999999999999978 },
3098 { 1.0000000000000000, 0.50000000000000000, 0.50000000000000000,
3099 10.000000000000000, 0.0000000000000000 },
3100 { 1.0025260228440118, 0.50000000000000000, 0.50000000000000000,
3101 10.000000000000000, 0.10000000000000009 },
3102 { 1.0051060015613384, 0.50000000000000000, 0.50000000000000000,
3103 10.000000000000000, 0.19999999999999996 },
3104 { 1.0077430276253163, 0.50000000000000000, 0.50000000000000000,
3105 10.000000000000000, 0.30000000000000004 },
3106 { 1.0104405359789990, 0.50000000000000000, 0.50000000000000000,
3107 10.000000000000000, 0.39999999999999991 },
3108 { 1.0132023689128868, 0.50000000000000000, 0.50000000000000000,
3109 10.000000000000000, 0.50000000000000000 },
3110 { 1.0160328583559475, 0.50000000000000000, 0.50000000000000000,
3111 10.000000000000000, 0.60000000000000009 },
3112 { 1.0189369344885053, 0.50000000000000000, 0.50000000000000000,
3113 10.000000000000000, 0.69999999999999996 },
3114 { 1.0219202735809589, 0.50000000000000000, 0.50000000000000000,
3115 10.000000000000000, 0.80000000000000004 },
3116 { 1.0249895076611382, 0.50000000000000000, 0.50000000000000000,
3117 10.000000000000000, 0.89999999999999991 },
3118 };
3119
3120 // Test function for a=0.50000000000000000, b=0.50000000000000000, c=10.000000000000000.
3121 template <typename Tp>
3122 void test045()
3123 {
3124 const Tp eps = std::numeric_limits<Tp>::epsilon();
3125 Tp max_abs_diff = -Tp(1);
3126 Tp max_abs_frac = -Tp(1);
3127 unsigned int num_datum = sizeof(data045)
3128 / sizeof(testcase_hyperg<double>);
3129 for (unsigned int i = 0; i < num_datum; ++i)
3130 {
3131 const Tp f = std::tr1::hyperg(Tp(data045[i].a), Tp(data045[i].b),
3132 Tp(data045[i].c), Tp(data045[i].x));
3133 const Tp f0 = data045[i].f0;
3134 const Tp diff = f - f0;
3135 if (std::abs(diff) > max_abs_diff)
3136 max_abs_diff = std::abs(diff);
3137 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
3138 {
3139 const Tp frac = diff / f0;
3140 if (std::abs(frac) > max_abs_frac)
3141 max_abs_frac = std::abs(frac);
3142 }
3143 }
3144 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3145 }
3146
3147 // Test data for a=0.50000000000000000, b=1.0000000000000000, c=2.0000000000000000.
3148 testcase_hyperg<double> data046[] = {
3149 { 0.84089972268671609, 0.50000000000000000, 1.0000000000000000,
3150 2.0000000000000000, -0.90000000000000002 },
3151 { 0.85410196624968437, 0.50000000000000000, 1.0000000000000000,
3152 2.0000000000000000, -0.80000000000000004 },
3153 { 0.86811566011579933, 0.50000000000000000, 1.0000000000000000,
3154 2.0000000000000000, -0.69999999999999996 },
3155 { 0.88303688022450544, 0.50000000000000000, 1.0000000000000000,
3156 2.0000000000000000, -0.59999999999999998 },
3157 { 0.89897948556635565, 0.50000000000000000, 1.0000000000000000,
3158 2.0000000000000000, -0.50000000000000000 },
3159 { 0.91607978309961580, 0.50000000000000000, 1.0000000000000000,
3160 2.0000000000000000, -0.40000000000000002 },
3161 { 0.93450283399425305, 0.50000000000000000, 1.0000000000000000,
3162 2.0000000000000000, -0.30000000000000004 },
3163 { 0.95445115010332193, 0.50000000000000000, 1.0000000000000000,
3164 2.0000000000000000, -0.19999999999999996 },
3165 { 0.97617696340303095, 0.50000000000000000, 1.0000000000000000,
3166 2.0000000000000000, -0.099999999999999978 },
3167 { 1.0000000000000000, 0.50000000000000000, 1.0000000000000000,
3168 2.0000000000000000, 0.0000000000000000 },
3169 { 1.0263340389897240, 0.50000000000000000, 1.0000000000000000,
3170 2.0000000000000000, 0.10000000000000009 },
3171 { 1.0557280900008410, 0.50000000000000000, 1.0000000000000000,
3172 2.0000000000000000, 0.19999999999999996 },
3173 { 1.0889331564394962, 0.50000000000000000, 1.0000000000000000,
3174 2.0000000000000000, 0.30000000000000004 },
3175 { 1.1270166537925830, 0.50000000000000000, 1.0000000000000000,
3176 2.0000000000000000, 0.39999999999999991 },
3177 { 1.1715728752538095, 0.50000000000000000, 1.0000000000000000,
3178 2.0000000000000000, 0.50000000000000000 },
3179 { 1.2251482265544145, 0.50000000000000000, 1.0000000000000000,
3180 2.0000000000000000, 0.60000000000000009 },
3181 { 1.2922212642709541, 0.50000000000000000, 1.0000000000000000,
3182 2.0000000000000000, 0.69999999999999996 },
3183 { 1.3819660112501042, 0.50000000000000000, 1.0000000000000000,
3184 2.0000000000000000, 0.80000000000000004 },
3185 { 1.5194938532959119, 0.50000000000000000, 1.0000000000000000,
3186 2.0000000000000000, 0.89999999999999991 },
3187 };
3188
3189 // Test function for a=0.50000000000000000, b=1.0000000000000000, c=2.0000000000000000.
3190 template <typename Tp>
3191 void test046()
3192 {
3193 const Tp eps = std::numeric_limits<Tp>::epsilon();
3194 Tp max_abs_diff = -Tp(1);
3195 Tp max_abs_frac = -Tp(1);
3196 unsigned int num_datum = sizeof(data046)
3197 / sizeof(testcase_hyperg<double>);
3198 for (unsigned int i = 0; i < num_datum; ++i)
3199 {
3200 const Tp f = std::tr1::hyperg(Tp(data046[i].a), Tp(data046[i].b),
3201 Tp(data046[i].c), Tp(data046[i].x));
3202 const Tp f0 = data046[i].f0;
3203 const Tp diff = f - f0;
3204 if (std::abs(diff) > max_abs_diff)
3205 max_abs_diff = std::abs(diff);
3206 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
3207 {
3208 const Tp frac = diff / f0;
3209 if (std::abs(frac) > max_abs_frac)
3210 max_abs_frac = std::abs(frac);
3211 }
3212 }
3213 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3214 }
3215
3216 // Test data for a=0.50000000000000000, b=1.0000000000000000, c=4.0000000000000000.
3217 testcase_hyperg<double> data047[] = {
3218 { 0.90992197313391499, 0.50000000000000000, 1.0000000000000000,
3219 4.0000000000000000, -0.90000000000000002 },
3220 { 0.91822592662244507, 0.50000000000000000, 1.0000000000000000,
3221 4.0000000000000000, -0.80000000000000004 },
3222 { 0.92687104566419531, 0.50000000000000000, 1.0000000000000000,
3223 4.0000000000000000, -0.69999999999999996 },
3224 { 0.93588628166548815, 0.50000000000000000, 1.0000000000000000,
3225 4.0000000000000000, -0.59999999999999998 },
3226 { 0.94530459215552909, 0.50000000000000000, 1.0000000000000000,
3227 4.0000000000000000, -0.50000000000000000 },
3228 { 0.95516374875247467, 0.50000000000000000, 1.0000000000000000,
3229 4.0000000000000000, -0.40000000000000002 },
3230 { 0.96550736800511827, 0.50000000000000000, 1.0000000000000000,
3231 4.0000000000000000, -0.30000000000000004 },
3232 { 0.97638624595136270, 0.50000000000000000, 1.0000000000000000,
3233 4.0000000000000000, -0.19999999999999996 },
3234 { 0.98786011482678993, 0.50000000000000000, 1.0000000000000000,
3235 4.0000000000000000, -0.099999999999999978 },
3236 { 1.0000000000000000, 0.50000000000000000, 1.0000000000000000,
3237 4.0000000000000000, 0.0000000000000000 },
3238 { 1.0128914530682316, 0.50000000000000000, 1.0000000000000000,
3239 4.0000000000000000, 0.10000000000000009 },
3240 { 1.0266391040215350, 0.50000000000000000, 1.0000000000000000,
3241 4.0000000000000000, 0.19999999999999996 },
3242 { 1.0413732738729464, 0.50000000000000000, 1.0000000000000000,
3243 4.0000000000000000, 0.30000000000000004 },
3244 { 1.0572599536532992, 0.50000000000000000, 1.0000000000000000,
3245 4.0000000000000000, 0.39999999999999991 },
3246 { 1.0745166004060953, 0.50000000000000000, 1.0000000000000000,
3247 4.0000000000000000, 0.50000000000000000 },
3248 { 1.0934387388831386, 0.50000000000000000, 1.0000000000000000,
3249 4.0000000000000000, 0.60000000000000009 },
3250 { 1.1144486980714641, 0.50000000000000000, 1.0000000000000000,
3251 4.0000000000000000, 0.69999999999999996 },
3252 { 1.1381966011250106, 0.50000000000000000, 1.0000000000000000,
3253 4.0000000000000000, 0.80000000000000004 },
3254 { 1.1658171625342397, 0.50000000000000000, 1.0000000000000000,
3255 4.0000000000000000, 0.89999999999999991 },
3256 };
3257
3258 // Test function for a=0.50000000000000000, b=1.0000000000000000, c=4.0000000000000000.
3259 template <typename Tp>
3260 void test047()
3261 {
3262 const Tp eps = std::numeric_limits<Tp>::epsilon();
3263 Tp max_abs_diff = -Tp(1);
3264 Tp max_abs_frac = -Tp(1);
3265 unsigned int num_datum = sizeof(data047)
3266 / sizeof(testcase_hyperg<double>);
3267 for (unsigned int i = 0; i < num_datum; ++i)
3268 {
3269 const Tp f = std::tr1::hyperg(Tp(data047[i].a), Tp(data047[i].b),
3270 Tp(data047[i].c), Tp(data047[i].x));
3271 const Tp f0 = data047[i].f0;
3272 const Tp diff = f - f0;
3273 if (std::abs(diff) > max_abs_diff)
3274 max_abs_diff = std::abs(diff);
3275 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
3276 {
3277 const Tp frac = diff / f0;
3278 if (std::abs(frac) > max_abs_frac)
3279 max_abs_frac = std::abs(frac);
3280 }
3281 }
3282 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3283 }
3284
3285 // Test data for a=0.50000000000000000, b=1.0000000000000000, c=6.0000000000000000.
3286 testcase_hyperg<double> data048[] = {
3287 { 0.93641908369732885, 0.50000000000000000, 1.0000000000000000,
3288 6.0000000000000000, -0.90000000000000002 },
3289 { 0.94256349654111315, 0.50000000000000000, 1.0000000000000000,
3290 6.0000000000000000, -0.80000000000000004 },
3291 { 0.94890138508461319, 0.50000000000000000, 1.0000000000000000,
3292 6.0000000000000000, -0.69999999999999996 },
3293 { 0.95544578858430007, 0.50000000000000000, 1.0000000000000000,
3294 6.0000000000000000, -0.59999999999999998 },
3295 { 0.96221121193620718, 0.50000000000000000, 1.0000000000000000,
3296 6.0000000000000000, -0.50000000000000000 },
3297 { 0.96921386948293542, 0.50000000000000000, 1.0000000000000000,
3298 6.0000000000000000, -0.40000000000000002 },
3299 { 0.97647198488394704, 0.50000000000000000, 1.0000000000000000,
3300 6.0000000000000000, -0.30000000000000004 },
3301 { 0.98400616412578656, 0.50000000000000000, 1.0000000000000000,
3302 6.0000000000000000, -0.19999999999999996 },
3303 { 0.99183986544963032, 0.50000000000000000, 1.0000000000000000,
3304 6.0000000000000000, -0.099999999999999978 },
3305 { 1.0000000000000000, 0.50000000000000000, 1.0000000000000000,
3306 6.0000000000000000, 0.0000000000000000 },
3307 { 1.0085177124149158, 0.50000000000000000, 1.0000000000000000,
3308 6.0000000000000000, 0.10000000000000009 },
3309 { 1.0174294150407122, 0.50000000000000000, 1.0000000000000000,
3310 6.0000000000000000, 0.19999999999999996 },
3311 { 1.0267781897388850, 0.50000000000000000, 1.0000000000000000,
3312 6.0000000000000000, 0.30000000000000004 },
3313 { 1.0366157405967285, 0.50000000000000000, 1.0000000000000000,
3314 6.0000000000000000, 0.39999999999999991 },
3315 { 1.0470052068648839, 0.50000000000000000, 1.0000000000000000,
3316 6.0000000000000000, 0.50000000000000000 },
3317 { 1.0580253905513313, 0.50000000000000000, 1.0000000000000000,
3318 6.0000000000000000, 0.60000000000000009 },
3319 { 1.0697774741209765, 0.50000000000000000, 1.0000000000000000,
3320 6.0000000000000000, 0.69999999999999996 },
3321 { 1.0823965556448414, 0.50000000000000000, 1.0000000000000000,
3322 6.0000000000000000, 0.80000000000000004 },
3323 { 1.0960739512057103, 0.50000000000000000, 1.0000000000000000,
3324 6.0000000000000000, 0.89999999999999991 },
3325 };
3326
3327 // Test function for a=0.50000000000000000, b=1.0000000000000000, c=6.0000000000000000.
3328 template <typename Tp>
3329 void test048()
3330 {
3331 const Tp eps = std::numeric_limits<Tp>::epsilon();
3332 Tp max_abs_diff = -Tp(1);
3333 Tp max_abs_frac = -Tp(1);
3334 unsigned int num_datum = sizeof(data048)
3335 / sizeof(testcase_hyperg<double>);
3336 for (unsigned int i = 0; i < num_datum; ++i)
3337 {
3338 const Tp f = std::tr1::hyperg(Tp(data048[i].a), Tp(data048[i].b),
3339 Tp(data048[i].c), Tp(data048[i].x));
3340 const Tp f0 = data048[i].f0;
3341 const Tp diff = f - f0;
3342 if (std::abs(diff) > max_abs_diff)
3343 max_abs_diff = std::abs(diff);
3344 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
3345 {
3346 const Tp frac = diff / f0;
3347 if (std::abs(frac) > max_abs_frac)
3348 max_abs_frac = std::abs(frac);
3349 }
3350 }
3351 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3352 }
3353
3354 // Test data for a=0.50000000000000000, b=1.0000000000000000, c=8.0000000000000000.
3355 testcase_hyperg<double> data049[] = {
3356 { 0.95069883346936235, 0.50000000000000000, 1.0000000000000000,
3357 8.0000000000000000, -0.90000000000000002 },
3358 { 0.95559618047704165, 0.50000000000000000, 1.0000000000000000,
3359 8.0000000000000000, -0.80000000000000004 },
3360 { 0.96061938755931653, 0.50000000000000000, 1.0000000000000000,
3361 8.0000000000000000, -0.69999999999999996 },
3362 { 0.96577553912851344, 0.50000000000000000, 1.0000000000000000,
3363 8.0000000000000000, -0.59999999999999998 },
3364 { 0.97107239473807716, 0.50000000000000000, 1.0000000000000000,
3365 8.0000000000000000, -0.50000000000000000 },
3366 { 0.97651848528588503, 0.50000000000000000, 1.0000000000000000,
3367 8.0000000000000000, -0.40000000000000002 },
3368 { 0.98212322830227139, 0.50000000000000000, 1.0000000000000000,
3369 8.0000000000000000, -0.30000000000000004 },
3370 { 0.98789706736195781, 0.50000000000000000, 1.0000000000000000,
3371 8.0000000000000000, -0.19999999999999996 },
3372 { 0.99385164237825074, 0.50000000000000000, 1.0000000000000000,
3373 8.0000000000000000, -0.099999999999999978 },
3374 { 1.0000000000000000, 0.50000000000000000, 1.0000000000000000,
3375 8.0000000000000000, 0.0000000000000000 },
3376 { 1.0063568569383123, 0.50000000000000000, 1.0000000000000000,
3377 8.0000000000000000, 0.10000000000000009 },
3378 { 1.0129389344715818, 0.50000000000000000, 1.0000000000000000,
3379 8.0000000000000000, 0.19999999999999996 },
3380 { 1.0197653907773940, 0.50000000000000000, 1.0000000000000000,
3381 8.0000000000000000, 0.30000000000000004 },
3382 { 1.0268583912277143, 0.50000000000000000, 1.0000000000000000,
3383 8.0000000000000000, 0.39999999999999991 },
3384 { 1.0342438793937092, 0.50000000000000000, 1.0000000000000000,
3385 8.0000000000000000, 0.50000000000000000 },
3386 { 1.0419526514766855, 0.50000000000000000, 1.0000000000000000,
3387 8.0000000000000000, 0.60000000000000009 },
3388 { 1.0500219124976327, 0.50000000000000000, 1.0000000000000000,
3389 8.0000000000000000, 0.69999999999999996 },
3390 { 1.0584976491907043, 0.50000000000000000, 1.0000000000000000,
3391 8.0000000000000000, 0.80000000000000004 },
3392 { 1.0674385240268101, 0.50000000000000000, 1.0000000000000000,
3393 8.0000000000000000, 0.89999999999999991 },
3394 };
3395
3396 // Test function for a=0.50000000000000000, b=1.0000000000000000, c=8.0000000000000000.
3397 template <typename Tp>
3398 void test049()
3399 {
3400 const Tp eps = std::numeric_limits<Tp>::epsilon();
3401 Tp max_abs_diff = -Tp(1);
3402 Tp max_abs_frac = -Tp(1);
3403 unsigned int num_datum = sizeof(data049)
3404 / sizeof(testcase_hyperg<double>);
3405 for (unsigned int i = 0; i < num_datum; ++i)
3406 {
3407 const Tp f = std::tr1::hyperg(Tp(data049[i].a), Tp(data049[i].b),
3408 Tp(data049[i].c), Tp(data049[i].x));
3409 const Tp f0 = data049[i].f0;
3410 const Tp diff = f - f0;
3411 if (std::abs(diff) > max_abs_diff)
3412 max_abs_diff = std::abs(diff);
3413 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
3414 {
3415 const Tp frac = diff / f0;
3416 if (std::abs(frac) > max_abs_frac)
3417 max_abs_frac = std::abs(frac);
3418 }
3419 }
3420 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3421 }
3422
3423 // Test data for a=0.50000000000000000, b=1.0000000000000000, c=10.000000000000000.
3424 testcase_hyperg<double> data050[] = {
3425 { 0.95968319138913893, 0.50000000000000000, 1.0000000000000000,
3426 10.000000000000000, -0.90000000000000002 },
3427 { 0.96376169072755768, 0.50000000000000000, 1.0000000000000000,
3428 10.000000000000000, -0.80000000000000004 },
3429 { 0.96792900082729316, 0.50000000000000000, 1.0000000000000000,
3430 10.000000000000000, -0.69999999999999996 },
3431 { 0.97218942798115737, 0.50000000000000000, 1.0000000000000000,
3432 10.000000000000000, -0.59999999999999998 },
3433 { 0.97654763592586857, 0.50000000000000000, 1.0000000000000000,
3434 10.000000000000000, -0.50000000000000000 },
3435 { 0.98100869054353856, 0.50000000000000000, 1.0000000000000000,
3436 10.000000000000000, -0.40000000000000002 },
3437 { 0.98557811238699278, 0.50000000000000000, 1.0000000000000000,
3438 10.000000000000000, -0.30000000000000004 },
3439 { 0.99026193885795544, 0.50000000000000000, 1.0000000000000000,
3440 10.000000000000000, -0.19999999999999996 },
3441 { 0.99506679842072221, 0.50000000000000000, 1.0000000000000000,
3442 10.000000000000000, -0.099999999999999978 },
3443 { 1.0000000000000000, 0.50000000000000000, 1.0000000000000000,
3444 10.000000000000000, 0.0000000000000000 },
3445 { 1.0050696417919618, 0.50000000000000000, 1.0000000000000000,
3446 10.000000000000000, 0.10000000000000009 },
3447 { 1.0102847452747090, 0.50000000000000000, 1.0000000000000000,
3448 10.000000000000000, 0.19999999999999996 },
3449 { 1.0156554225057022, 0.50000000000000000, 1.0000000000000000,
3450 10.000000000000000, 0.30000000000000004 },
3451 { 1.0211930882963096, 0.50000000000000000, 1.0000000000000000,
3452 10.000000000000000, 0.39999999999999991 },
3453 { 1.0269107343740711, 0.50000000000000000, 1.0000000000000000,
3454 10.000000000000000, 0.50000000000000000 },
3455 { 1.0328232917216298, 0.50000000000000000, 1.0000000000000000,
3456 10.000000000000000, 0.60000000000000009 },
3457 { 1.0389481230247195, 0.50000000000000000, 1.0000000000000000,
3458 10.000000000000000, 0.69999999999999996 },
3459 { 1.0453057164134614, 0.50000000000000000, 1.0000000000000000,
3460 10.000000000000000, 0.80000000000000004 },
3461 { 1.0519207114461246, 0.50000000000000000, 1.0000000000000000,
3462 10.000000000000000, 0.89999999999999991 },
3463 };
3464
3465 // Test function for a=0.50000000000000000, b=1.0000000000000000, c=10.000000000000000.
3466 template <typename Tp>
3467 void test050()
3468 {
3469 const Tp eps = std::numeric_limits<Tp>::epsilon();
3470 Tp max_abs_diff = -Tp(1);
3471 Tp max_abs_frac = -Tp(1);
3472 unsigned int num_datum = sizeof(data050)
3473 / sizeof(testcase_hyperg<double>);
3474 for (unsigned int i = 0; i < num_datum; ++i)
3475 {
3476 const Tp f = std::tr1::hyperg(Tp(data050[i].a), Tp(data050[i].b),
3477 Tp(data050[i].c), Tp(data050[i].x));
3478 const Tp f0 = data050[i].f0;
3479 const Tp diff = f - f0;
3480 if (std::abs(diff) > max_abs_diff)
3481 max_abs_diff = std::abs(diff);
3482 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
3483 {
3484 const Tp frac = diff / f0;
3485 if (std::abs(frac) > max_abs_frac)
3486 max_abs_frac = std::abs(frac);
3487 }
3488 }
3489 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3490 }
3491
3492 // Test data for a=0.50000000000000000, b=2.0000000000000000, c=2.0000000000000000.
3493 testcase_hyperg<double> data051[] = {
3494 { 0.72547625011001171, 0.50000000000000000, 2.0000000000000000,
3495 2.0000000000000000, -0.90000000000000002 },
3496 { 0.74535599249992990, 0.50000000000000000, 2.0000000000000000,
3497 2.0000000000000000, -0.80000000000000004 },
3498 { 0.76696498884737041, 0.50000000000000000, 2.0000000000000000,
3499 2.0000000000000000, -0.69999999999999996 },
3500 { 0.79056941504209477, 0.50000000000000000, 2.0000000000000000,
3501 2.0000000000000000, -0.59999999999999998 },
3502 { 0.81649658092772603, 0.50000000000000000, 2.0000000000000000,
3503 2.0000000000000000, -0.50000000000000000 },
3504 { 0.84515425472851657, 0.50000000000000000, 2.0000000000000000,
3505 2.0000000000000000, -0.40000000000000002 },
3506 { 0.87705801930702920, 0.50000000000000000, 2.0000000000000000,
3507 2.0000000000000000, -0.30000000000000004 },
3508 { 0.91287092917527690, 0.50000000000000000, 2.0000000000000000,
3509 2.0000000000000000, -0.19999999999999996 },
3510 { 0.95346258924559224, 0.50000000000000000, 2.0000000000000000,
3511 2.0000000000000000, -0.099999999999999978 },
3512 { 1.0000000000000000, 0.50000000000000000, 2.0000000000000000,
3513 2.0000000000000000, 0.0000000000000000 },
3514 { 1.0540925533894598, 0.50000000000000000, 2.0000000000000000,
3515 2.0000000000000000, 0.10000000000000009 },
3516 { 1.1180339887498949, 0.50000000000000000, 2.0000000000000000,
3517 2.0000000000000000, 0.19999999999999996 },
3518 { 1.1952286093343938, 0.50000000000000000, 2.0000000000000000,
3519 2.0000000000000000, 0.30000000000000004 },
3520 { 1.2909944487358056, 0.50000000000000000, 2.0000000000000000,
3521 2.0000000000000000, 0.39999999999999991 },
3522 { 1.4142135623730949, 0.50000000000000000, 2.0000000000000000,
3523 2.0000000000000000, 0.50000000000000000 },
3524 { 1.5811388300841900, 0.50000000000000000, 2.0000000000000000,
3525 2.0000000000000000, 0.60000000000000009 },
3526 { 1.8257418583505536, 0.50000000000000000, 2.0000000000000000,
3527 2.0000000000000000, 0.69999999999999996 },
3528 { 2.2360679774997898, 0.50000000000000000, 2.0000000000000000,
3529 2.0000000000000000, 0.80000000000000004 },
3530 { 3.1622776601683782, 0.50000000000000000, 2.0000000000000000,
3531 2.0000000000000000, 0.89999999999999991 },
3532 };
3533
3534 // Test function for a=0.50000000000000000, b=2.0000000000000000, c=2.0000000000000000.
3535 template <typename Tp>
3536 void test051()
3537 {
3538 const Tp eps = std::numeric_limits<Tp>::epsilon();
3539 Tp max_abs_diff = -Tp(1);
3540 Tp max_abs_frac = -Tp(1);
3541 unsigned int num_datum = sizeof(data051)
3542 / sizeof(testcase_hyperg<double>);
3543 for (unsigned int i = 0; i < num_datum; ++i)
3544 {
3545 const Tp f = std::tr1::hyperg(Tp(data051[i].a), Tp(data051[i].b),
3546 Tp(data051[i].c), Tp(data051[i].x));
3547 const Tp f0 = data051[i].f0;
3548 const Tp diff = f - f0;
3549 if (std::abs(diff) > max_abs_diff)
3550 max_abs_diff = std::abs(diff);
3551 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
3552 {
3553 const Tp frac = diff / f0;
3554 if (std::abs(frac) > max_abs_frac)
3555 max_abs_frac = std::abs(frac);
3556 }
3557 }
3558 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3559 }
3560
3561 // Test data for a=0.50000000000000000, b=2.0000000000000000, c=4.0000000000000000.
3562 testcase_hyperg<double> data052[] = {
3563 { 0.83664260086443798, 0.50000000000000000, 2.0000000000000000,
3564 4.0000000000000000, -0.90000000000000002 },
3565 { 0.85046584300227146, 0.50000000000000000, 2.0000000000000000,
3566 4.0000000000000000, -0.80000000000000004 },
3567 { 0.86509574979651593, 0.50000000000000000, 2.0000000000000000,
3568 4.0000000000000000, -0.69999999999999996 },
3569 { 0.88062082573041867, 0.50000000000000000, 2.0000000000000000,
3570 4.0000000000000000, -0.59999999999999998 },
3571 { 0.89714464248521586, 0.50000000000000000, 2.0000000000000000,
3572 4.0000000000000000, -0.50000000000000000 },
3573 { 0.91478946588967558, 0.50000000000000000, 2.0000000000000000,
3574 4.0000000000000000, -0.40000000000000002 },
3575 { 0.93370105322348573, 0.50000000000000000, 2.0000000000000000,
3576 4.0000000000000000, -0.30000000000000004 },
3577 { 0.95405511057700887, 0.50000000000000000, 2.0000000000000000,
3578 4.0000000000000000, -0.19999999999999996 },
3579 { 0.97606616007978142, 0.50000000000000000, 2.0000000000000000,
3580 4.0000000000000000, -0.099999999999999978 },
3581 { 1.0000000000000000, 0.50000000000000000, 2.0000000000000000,
3582 4.0000000000000000, 0.0000000000000000 },
3583 { 1.0261916902334731, 0.50000000000000000, 2.0000000000000000,
3584 4.0000000000000000, 0.10000000000000009 },
3585 { 1.0550723519434702, 0.50000000000000000, 2.0000000000000000,
3586 4.0000000000000000, 0.19999999999999996 },
3587 { 1.0872106588188091, 0.50000000000000000, 2.0000000000000000,
3588 4.0000000000000000, 0.30000000000000004 },
3589 { 1.1233801699379020, 0.50000000000000000, 2.0000000000000000,
3590 4.0000000000000000, 0.39999999999999991 },
3591 { 1.1646752981725688, 0.50000000000000000, 2.0000000000000000,
3592 4.0000000000000000, 0.50000000000000000 },
3593 { 1.2127272514219511, 0.50000000000000000, 2.0000000000000000,
3594 4.0000000000000000, 0.60000000000000009 },
3595 { 1.2701518651068637, 0.50000000000000000, 2.0000000000000000,
3596 4.0000000000000000, 0.69999999999999996 },
3597 { 1.3416407864998725, 0.50000000000000000, 2.0000000000000000,
3598 4.0000000000000000, 0.80000000000000004 },
3599 { 1.4374795179111102, 0.50000000000000000, 2.0000000000000000,
3600 4.0000000000000000, 0.89999999999999991 },
3601 };
3602
3603 // Test function for a=0.50000000000000000, b=2.0000000000000000, c=4.0000000000000000.
3604 template <typename Tp>
3605 void test052()
3606 {
3607 const Tp eps = std::numeric_limits<Tp>::epsilon();
3608 Tp max_abs_diff = -Tp(1);
3609 Tp max_abs_frac = -Tp(1);
3610 unsigned int num_datum = sizeof(data052)
3611 / sizeof(testcase_hyperg<double>);
3612 for (unsigned int i = 0; i < num_datum; ++i)
3613 {
3614 const Tp f = std::tr1::hyperg(Tp(data052[i].a), Tp(data052[i].b),
3615 Tp(data052[i].c), Tp(data052[i].x));
3616 const Tp f0 = data052[i].f0;
3617 const Tp diff = f - f0;
3618 if (std::abs(diff) > max_abs_diff)
3619 max_abs_diff = std::abs(diff);
3620 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
3621 {
3622 const Tp frac = diff / f0;
3623 if (std::abs(frac) > max_abs_frac)
3624 max_abs_frac = std::abs(frac);
3625 }
3626 }
3627 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3628 }
3629
3630 // Test data for a=0.50000000000000000, b=2.0000000000000000, c=6.0000000000000000.
3631 testcase_hyperg<double> data053[] = {
3632 { 0.88195381730235833, 0.50000000000000000, 2.0000000000000000,
3633 6.0000000000000000, -0.90000000000000002 },
3634 { 0.89265078469555093, 0.50000000000000000, 2.0000000000000000,
3635 6.0000000000000000, -0.80000000000000004 },
3636 { 0.90382937908303707, 0.50000000000000000, 2.0000000000000000,
3637 6.0000000000000000, -0.69999999999999996 },
3638 { 0.91553161389880577, 0.50000000000000000, 2.0000000000000000,
3639 6.0000000000000000, -0.59999999999999998 },
3640 { 0.92780530349281576, 0.50000000000000000, 2.0000000000000000,
3641 6.0000000000000000, -0.50000000000000000 },
3642 { 0.94070521140346042, 0.50000000000000000, 2.0000000000000000,
3643 6.0000000000000000, -0.40000000000000002 },
3644 { 0.95429450630523349, 0.50000000000000000, 2.0000000000000000,
3645 6.0000000000000000, -0.30000000000000004 },
3646 { 0.96864663325785849, 0.50000000000000000, 2.0000000000000000,
3647 6.0000000000000000, -0.19999999999999996 },
3648 { 0.98384775588541795, 0.50000000000000000, 2.0000000000000000,
3649 6.0000000000000000, -0.099999999999999978 },
3650 { 1.0000000000000000, 0.50000000000000000, 2.0000000000000000,
3651 6.0000000000000000, 0.0000000000000000 },
3652 { 1.0172258496884334, 0.50000000000000000, 2.0000000000000000,
3653 6.0000000000000000, 0.10000000000000009 },
3654 { 1.0356742479163459, 0.50000000000000000, 2.0000000000000000,
3655 6.0000000000000000, 0.19999999999999996 },
3656 { 1.0555293036908924, 0.50000000000000000, 2.0000000000000000,
3657 6.0000000000000000, 0.30000000000000004 },
3658 { 1.0770231491562379, 0.50000000000000000, 2.0000000000000000,
3659 6.0000000000000000, 0.39999999999999991 },
3660 { 1.1004557416484888, 0.50000000000000000, 2.0000000000000000,
3661 6.0000000000000000, 0.50000000000000000 },
3662 { 1.1262270515731978, 0.50000000000000000, 2.0000000000000000,
3663 6.0000000000000000, 0.60000000000000009 },
3664 { 1.1548932919125086, 0.50000000000000000, 2.0000000000000000,
3665 6.0000000000000000, 0.69999999999999996 },
3666 { 1.1872757758134724, 0.50000000000000000, 2.0000000000000000,
3667 6.0000000000000000, 0.80000000000000004 },
3668 { 1.2247091713458949, 0.50000000000000000, 2.0000000000000000,
3669 6.0000000000000000, 0.89999999999999991 },
3670 };
3671
3672 // Test function for a=0.50000000000000000, b=2.0000000000000000, c=6.0000000000000000.
3673 template <typename Tp>
3674 void test053()
3675 {
3676 const Tp eps = std::numeric_limits<Tp>::epsilon();
3677 Tp max_abs_diff = -Tp(1);
3678 Tp max_abs_frac = -Tp(1);
3679 unsigned int num_datum = sizeof(data053)
3680 / sizeof(testcase_hyperg<double>);
3681 for (unsigned int i = 0; i < num_datum; ++i)
3682 {
3683 const Tp f = std::tr1::hyperg(Tp(data053[i].a), Tp(data053[i].b),
3684 Tp(data053[i].c), Tp(data053[i].x));
3685 const Tp f0 = data053[i].f0;
3686 const Tp diff = f - f0;
3687 if (std::abs(diff) > max_abs_diff)
3688 max_abs_diff = std::abs(diff);
3689 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
3690 {
3691 const Tp frac = diff / f0;
3692 if (std::abs(frac) > max_abs_frac)
3693 max_abs_frac = std::abs(frac);
3694 }
3695 }
3696 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3697 }
3698
3699 // Test data for a=0.50000000000000000, b=2.0000000000000000, c=8.0000000000000000.
3700 testcase_hyperg<double> data054[] = {
3701 { 0.90716919697107301, 0.50000000000000000, 2.0000000000000000,
3702 8.0000000000000000, -0.90000000000000002 },
3703 { 0.91592299407142519, 0.50000000000000000, 2.0000000000000000,
3704 8.0000000000000000, -0.80000000000000004 },
3705 { 0.92500027075874236, 0.50000000000000000, 2.0000000000000000,
3706 8.0000000000000000, -0.69999999999999996 },
3707 { 0.93442464185467167, 0.50000000000000000, 2.0000000000000000,
3708 8.0000000000000000, -0.59999999999999998 },
3709 { 0.94422248683737009, 0.50000000000000000, 2.0000000000000000,
3710 8.0000000000000000, -0.50000000000000000 },
3711 { 0.95442341810133347, 0.50000000000000000, 2.0000000000000000,
3712 8.0000000000000000, -0.40000000000000002 },
3713 { 0.96506085725516400, 0.50000000000000000, 2.0000000000000000,
3714 8.0000000000000000, -0.30000000000000004 },
3715 { 0.97617275213704069, 0.50000000000000000, 2.0000000000000000,
3716 8.0000000000000000, -0.19999999999999996 },
3717 { 0.98780247986309799, 0.50000000000000000, 2.0000000000000000,
3718 8.0000000000000000, -0.099999999999999978 },
3719 { 1.0000000000000000, 0.50000000000000000, 2.0000000000000000,
3720 8.0000000000000000, 0.0000000000000000 },
3721 { 1.0128233505813447, 0.50000000000000000, 2.0000000000000000,
3722 8.0000000000000000, 0.10000000000000009 },
3723 { 1.0263406246541855, 0.50000000000000000, 2.0000000000000000,
3724 8.0000000000000000, 0.19999999999999996 },
3725 { 1.0406326381700366, 0.50000000000000000, 2.0000000000000000,
3726 8.0000000000000000, 0.30000000000000004 },
3727 { 1.0557966239802845, 0.50000000000000000, 2.0000000000000000,
3728 8.0000000000000000, 0.39999999999999991 },
3729 { 1.0719515075786321, 0.50000000000000000, 2.0000000000000000,
3730 8.0000000000000000, 0.50000000000000000 },
3731 { 1.0892457392422055, 0.50000000000000000, 2.0000000000000000,
3732 8.0000000000000000, 0.60000000000000009 },
3733 { 1.1078695188000958, 0.50000000000000000, 2.0000000000000000,
3734 8.0000000000000000, 0.69999999999999996 },
3735 { 1.1280752258974340, 0.50000000000000000, 2.0000000000000000,
3736 8.0000000000000000, 0.80000000000000004 },
3737 { 1.1502152002706476, 0.50000000000000000, 2.0000000000000000,
3738 8.0000000000000000, 0.89999999999999991 },
3739 };
3740
3741 // Test function for a=0.50000000000000000, b=2.0000000000000000, c=8.0000000000000000.
3742 template <typename Tp>
3743 void test054()
3744 {
3745 const Tp eps = std::numeric_limits<Tp>::epsilon();
3746 Tp max_abs_diff = -Tp(1);
3747 Tp max_abs_frac = -Tp(1);
3748 unsigned int num_datum = sizeof(data054)
3749 / sizeof(testcase_hyperg<double>);
3750 for (unsigned int i = 0; i < num_datum; ++i)
3751 {
3752 const Tp f = std::tr1::hyperg(Tp(data054[i].a), Tp(data054[i].b),
3753 Tp(data054[i].c), Tp(data054[i].x));
3754 const Tp f0 = data054[i].f0;
3755 const Tp diff = f - f0;
3756 if (std::abs(diff) > max_abs_diff)
3757 max_abs_diff = std::abs(diff);
3758 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
3759 {
3760 const Tp frac = diff / f0;
3761 if (std::abs(frac) > max_abs_frac)
3762 max_abs_frac = std::abs(frac);
3763 }
3764 }
3765 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3766 }
3767
3768 // Test data for a=0.50000000000000000, b=2.0000000000000000, c=10.000000000000000.
3769 testcase_hyperg<double> data055[] = {
3770 { 0.92336416053263093, 0.50000000000000000, 2.0000000000000000,
3771 10.000000000000000, -0.90000000000000002 },
3772 { 0.93078397248364519, 0.50000000000000000, 2.0000000000000000,
3773 10.000000000000000, -0.80000000000000004 },
3774 { 0.93843714333600226, 0.50000000000000000, 2.0000000000000000,
3775 10.000000000000000, -0.69999999999999996 },
3776 { 0.94633837784068076, 0.50000000000000000, 2.0000000000000000,
3777 10.000000000000000, -0.59999999999999998 },
3778 { 0.95450388104967909, 0.50000000000000000, 2.0000000000000000,
3779 10.000000000000000, -0.50000000000000000 },
3780 { 0.96295158125742764, 0.50000000000000000, 2.0000000000000000,
3781 10.000000000000000, -0.40000000000000002 },
3782 { 0.97170139827854296, 0.50000000000000000, 2.0000000000000000,
3783 10.000000000000000, -0.30000000000000004 },
3784 { 0.98077556918512687, 0.50000000000000000, 2.0000000000000000,
3785 10.000000000000000, -0.19999999999999996 },
3786 { 0.99019904777750845, 0.50000000000000000, 2.0000000000000000,
3787 10.000000000000000, -0.099999999999999978 },
3788 { 1.0000000000000000, 0.50000000000000000, 2.0000000000000000,
3789 10.000000000000000, 0.0000000000000000 },
3790 { 1.0102104261941198, 0.50000000000000000, 2.0000000000000000,
3791 10.000000000000000, 0.10000000000000009 },
3792 { 1.0208669540935695, 0.50000000000000000, 2.0000000000000000,
3793 10.000000000000000, 0.19999999999999996 },
3794 { 1.0320118665407505, 0.50000000000000000, 2.0000000000000000,
3795 10.000000000000000, 0.30000000000000004 },
3796 { 1.0436944599504387, 0.50000000000000000, 2.0000000000000000,
3797 10.000000000000000, 0.39999999999999991 },
3798 { 1.0559728828278145, 0.50000000000000000, 2.0000000000000000,
3799 10.000000000000000, 0.50000000000000000 },
3800 { 1.0689166967761712, 0.50000000000000000, 2.0000000000000000,
3801 10.000000000000000, 0.60000000000000009 },
3802 { 1.0826105758119842, 0.50000000000000000, 2.0000000000000000,
3803 10.000000000000000, 0.69999999999999996 },
3804 { 1.0971599106346146, 0.50000000000000000, 2.0000000000000000,
3805 10.000000000000000, 0.80000000000000004 },
3806 { 1.1126998828023964, 0.50000000000000000, 2.0000000000000000,
3807 10.000000000000000, 0.89999999999999991 },
3808 };
3809
3810 // Test function for a=0.50000000000000000, b=2.0000000000000000, c=10.000000000000000.
3811 template <typename Tp>
3812 void test055()
3813 {
3814 const Tp eps = std::numeric_limits<Tp>::epsilon();
3815 Tp max_abs_diff = -Tp(1);
3816 Tp max_abs_frac = -Tp(1);
3817 unsigned int num_datum = sizeof(data055)
3818 / sizeof(testcase_hyperg<double>);
3819 for (unsigned int i = 0; i < num_datum; ++i)
3820 {
3821 const Tp f = std::tr1::hyperg(Tp(data055[i].a), Tp(data055[i].b),
3822 Tp(data055[i].c), Tp(data055[i].x));
3823 const Tp f0 = data055[i].f0;
3824 const Tp diff = f - f0;
3825 if (std::abs(diff) > max_abs_diff)
3826 max_abs_diff = std::abs(diff);
3827 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
3828 {
3829 const Tp frac = diff / f0;
3830 if (std::abs(frac) > max_abs_frac)
3831 max_abs_frac = std::abs(frac);
3832 }
3833 }
3834 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3835 }
3836
3837 // Test data for a=0.50000000000000000, b=5.0000000000000000, c=2.0000000000000000.
3838 testcase_hyperg<double> data056[] = {
3839 { 0.52275983209457511, 0.50000000000000000, 5.0000000000000000,
3840 2.0000000000000000, -0.90000000000000002 },
3841 { 0.54700336898142965, 0.50000000000000000, 5.0000000000000000,
3842 2.0000000000000000, -0.80000000000000004 },
3843 { 0.57468955512601971, 0.50000000000000000, 5.0000000000000000,
3844 2.0000000000000000, -0.69999999999999996 },
3845 { 0.60665490543315015, 0.50000000000000000, 5.0000000000000000,
3846 2.0000000000000000, -0.59999999999999998 },
3847 { 0.64403057859056123, 0.50000000000000000, 5.0000000000000000,
3848 2.0000000000000000, -0.50000000000000000 },
3849 { 0.68838183648623719, 0.50000000000000000, 5.0000000000000000,
3850 2.0000000000000000, -0.40000000000000002 },
3851 { 0.74193265039311085, 0.50000000000000000, 5.0000000000000000,
3852 2.0000000000000000, -0.30000000000000004 },
3853 { 0.80794095908995300, 0.50000000000000000, 5.0000000000000000,
3854 2.0000000000000000, -0.19999999999999996 },
3855 { 0.89135275749639320, 0.50000000000000000, 5.0000000000000000,
3856 2.0000000000000000, -0.099999999999999978 },
3857 { 1.0000000000000000, 0.50000000000000000, 5.0000000000000000,
3858 2.0000000000000000, 0.0000000000000000 },
3859 { 1.1469266219310688, 0.50000000000000000, 5.0000000000000000,
3860 2.0000000000000000, 0.10000000000000009 },
3861 { 1.3552340708357489, 0.50000000000000000, 5.0000000000000000,
3862 2.0000000000000000, 0.19999999999999996 },
3863 { 1.6690840478838305, 0.50000000000000000, 5.0000000000000000,
3864 2.0000000000000000, 0.30000000000000004 },
3865 { 2.1815415453174483, 0.50000000000000000, 5.0000000000000000,
3866 2.0000000000000000, 0.39999999999999991 },
3867 { 3.1156892546032235, 0.50000000000000000, 5.0000000000000000,
3868 2.0000000000000000, 0.50000000000000000 },
3869 { 5.1109077417760416, 0.50000000000000000, 5.0000000000000000,
3870 2.0000000000000000, 0.60000000000000009 },
3871 { 10.560352936466296, 0.50000000000000000, 5.0000000000000000,
3872 2.0000000000000000, 0.69999999999999996 },
3873 { 33.541019662496815, 0.50000000000000000, 5.0000000000000000,
3874 2.0000000000000000, 0.80000000000000004 },
3875 { 300.66343065819501, 0.50000000000000000, 5.0000000000000000,
3876 2.0000000000000000, 0.89999999999999991 },
3877 };
3878
3879 // Test function for a=0.50000000000000000, b=5.0000000000000000, c=2.0000000000000000.
3880 template <typename Tp>
3881 void test056()
3882 {
3883 const Tp eps = std::numeric_limits<Tp>::epsilon();
3884 Tp max_abs_diff = -Tp(1);
3885 Tp max_abs_frac = -Tp(1);
3886 unsigned int num_datum = sizeof(data056)
3887 / sizeof(testcase_hyperg<double>);
3888 for (unsigned int i = 0; i < num_datum; ++i)
3889 {
3890 const Tp f = std::tr1::hyperg(Tp(data056[i].a), Tp(data056[i].b),
3891 Tp(data056[i].c), Tp(data056[i].x));
3892 const Tp f0 = data056[i].f0;
3893 const Tp diff = f - f0;
3894 if (std::abs(diff) > max_abs_diff)
3895 max_abs_diff = std::abs(diff);
3896 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
3897 {
3898 const Tp frac = diff / f0;
3899 if (std::abs(frac) > max_abs_frac)
3900 max_abs_frac = std::abs(frac);
3901 }
3902 }
3903 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3904 }
3905
3906 // Test data for a=0.50000000000000000, b=5.0000000000000000, c=4.0000000000000000.
3907 testcase_hyperg<double> data057[] = {
3908 { 0.68252041951139264, 0.50000000000000000, 5.0000000000000000,
3909 4.0000000000000000, -0.90000000000000002 },
3910 { 0.70394732624993395, 0.50000000000000000, 5.0000000000000000,
3911 4.0000000000000000, -0.80000000000000004 },
3912 { 0.72748884971552041, 0.50000000000000000, 5.0000000000000000,
3913 4.0000000000000000, -0.69999999999999996 },
3914 { 0.75351147371199689, 0.50000000000000000, 5.0000000000000000,
3915 4.0000000000000000, -0.59999999999999998 },
3916 { 0.78247589005573748, 0.50000000000000000, 5.0000000000000000,
3917 4.0000000000000000, -0.50000000000000000 },
3918 { 0.81497017420249818, 0.50000000000000000, 5.0000000000000000,
3919 4.0000000000000000, -0.40000000000000002 },
3920 { 0.85175826875009564, 0.50000000000000000, 5.0000000000000000,
3921 4.0000000000000000, -0.30000000000000004 },
3922 { 0.89385278481745867, 0.50000000000000000, 5.0000000000000000,
3923 4.0000000000000000, -0.19999999999999996 },
3924 { 0.94262778709507411, 0.50000000000000000, 5.0000000000000000,
3925 4.0000000000000000, -0.099999999999999978 },
3926 { 1.0000000000000000, 0.50000000000000000, 5.0000000000000000,
3927 4.0000000000000000, 0.0000000000000000 },
3928 { 1.0687327277420910, 0.50000000000000000, 5.0000000000000000,
3929 4.0000000000000000, 0.10000000000000009 },
3930 { 1.1529725508983291, 0.50000000000000000, 5.0000000000000000,
3931 4.0000000000000000, 0.19999999999999996 },
3932 { 1.2592587134058799, 0.50000000000000000, 5.0000000000000000,
3933 4.0000000000000000, 0.30000000000000004 },
3934 { 1.3985773194637892, 0.50000000000000000, 5.0000000000000000,
3935 4.0000000000000000, 0.39999999999999991 },
3936 { 1.5909902576697317, 0.50000000000000000, 5.0000000000000000,
3937 4.0000000000000000, 0.50000000000000000 },
3938 { 1.8776023607249752, 0.50000000000000000, 5.0000000000000000,
3939 4.0000000000000000, 0.60000000000000009 },
3940 { 2.3582499003694646, 0.50000000000000000, 5.0000000000000000,
3941 4.0000000000000000, 0.69999999999999996 },
3942 { 3.3541019662496838, 0.50000000000000000, 5.0000000000000000,
3943 4.0000000000000000, 0.80000000000000004 },
3944 { 6.7198400278577859, 0.50000000000000000, 5.0000000000000000,
3945 4.0000000000000000, 0.89999999999999991 },
3946 };
3947
3948 // Test function for a=0.50000000000000000, b=5.0000000000000000, c=4.0000000000000000.
3949 template <typename Tp>
3950 void test057()
3951 {
3952 const Tp eps = std::numeric_limits<Tp>::epsilon();
3953 Tp max_abs_diff = -Tp(1);
3954 Tp max_abs_frac = -Tp(1);
3955 unsigned int num_datum = sizeof(data057)
3956 / sizeof(testcase_hyperg<double>);
3957 for (unsigned int i = 0; i < num_datum; ++i)
3958 {
3959 const Tp f = std::tr1::hyperg(Tp(data057[i].a), Tp(data057[i].b),
3960 Tp(data057[i].c), Tp(data057[i].x));
3961 const Tp f0 = data057[i].f0;
3962 const Tp diff = f - f0;
3963 if (std::abs(diff) > max_abs_diff)
3964 max_abs_diff = std::abs(diff);
3965 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
3966 {
3967 const Tp frac = diff / f0;
3968 if (std::abs(frac) > max_abs_frac)
3969 max_abs_frac = std::abs(frac);
3970 }
3971 }
3972 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3973 }
3974
3975 // Test data for a=0.50000000000000000, b=5.0000000000000000, c=6.0000000000000000.
3976 testcase_hyperg<double> data058[] = {
3977 { 0.75755211927082589, 0.50000000000000000, 5.0000000000000000,
3978 6.0000000000000000, -0.90000000000000002 },
3979 { 0.77603550233010998, 0.50000000000000000, 5.0000000000000000,
3980 6.0000000000000000, -0.80000000000000004 },
3981 { 0.79596241913438492, 0.50000000000000000, 5.0000000000000000,
3982 6.0000000000000000, -0.69999999999999996 },
3983 { 0.81753360792105201, 0.50000000000000000, 5.0000000000000000,
3984 6.0000000000000000, -0.59999999999999998 },
3985 { 0.84099165409805521, 0.50000000000000000, 5.0000000000000000,
3986 6.0000000000000000, -0.50000000000000000 },
3987 { 0.86663303852180873, 0.50000000000000000, 5.0000000000000000,
3988 6.0000000000000000, -0.40000000000000002 },
3989 { 0.89482475828629970, 0.50000000000000000, 5.0000000000000000,
3990 6.0000000000000000, -0.30000000000000004 },
3991 { 0.92602774279590350, 0.50000000000000000, 5.0000000000000000,
3992 6.0000000000000000, -0.19999999999999996 },
3993 { 0.96083064727087386, 0.50000000000000000, 5.0000000000000000,
3994 6.0000000000000000, -0.099999999999999978 },
3995 { 1.0000000000000000, 0.50000000000000000, 5.0000000000000000,
3996 6.0000000000000000, 0.0000000000000000 },
3997 { 1.0445570841313008, 0.50000000000000000, 5.0000000000000000,
3998 6.0000000000000000, 0.10000000000000009 },
3999 { 1.0959004638926031, 0.50000000000000000, 5.0000000000000000,
4000 6.0000000000000000, 0.19999999999999996 },
4001 { 1.1560106261370562, 0.50000000000000000, 5.0000000000000000,
4002 6.0000000000000000, 0.30000000000000004 },
4003 { 1.2278121770678145, 0.50000000000000000, 5.0000000000000000,
4004 6.0000000000000000, 0.39999999999999991 },
4005 { 1.3158640214709998, 0.50000000000000000, 5.0000000000000000,
4006 6.0000000000000000, 0.50000000000000000 },
4007 { 1.4278095344155000, 0.50000000000000000, 5.0000000000000000,
4008 6.0000000000000000, 0.60000000000000009 },
4009 { 1.5778700502946612, 0.50000000000000000, 5.0000000000000000,
4010 6.0000000000000000, 0.69999999999999996 },
4011 { 1.7972173289196469, 0.50000000000000000, 5.0000000000000000,
4012 6.0000000000000000, 0.80000000000000004 },
4013 { 2.1789970569269732, 0.50000000000000000, 5.0000000000000000,
4014 6.0000000000000000, 0.89999999999999991 },
4015 };
4016
4017 // Test function for a=0.50000000000000000, b=5.0000000000000000, c=6.0000000000000000.
4018 template <typename Tp>
4019 void test058()
4020 {
4021 const Tp eps = std::numeric_limits<Tp>::epsilon();
4022 Tp max_abs_diff = -Tp(1);
4023 Tp max_abs_frac = -Tp(1);
4024 unsigned int num_datum = sizeof(data058)
4025 / sizeof(testcase_hyperg<double>);
4026 for (unsigned int i = 0; i < num_datum; ++i)
4027 {
4028 const Tp f = std::tr1::hyperg(Tp(data058[i].a), Tp(data058[i].b),
4029 Tp(data058[i].c), Tp(data058[i].x));
4030 const Tp f0 = data058[i].f0;
4031 const Tp diff = f - f0;
4032 if (std::abs(diff) > max_abs_diff)
4033 max_abs_diff = std::abs(diff);
4034 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
4035 {
4036 const Tp frac = diff / f0;
4037 if (std::abs(frac) > max_abs_frac)
4038 max_abs_frac = std::abs(frac);
4039 }
4040 }
4041 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4042 }
4043
4044 // Test data for a=0.50000000000000000, b=5.0000000000000000, c=8.0000000000000000.
4045 testcase_hyperg<double> data059[] = {
4046 { 0.80270093579329471, 0.50000000000000000, 5.0000000000000000,
4047 8.0000000000000000, -0.90000000000000002 },
4048 { 0.81884974572462788, 0.50000000000000000, 5.0000000000000000,
4049 8.0000000000000000, -0.80000000000000004 },
4050 { 0.83605266330015271, 0.50000000000000000, 5.0000000000000000,
4051 8.0000000000000000, -0.69999999999999996 },
4052 { 0.85443340762795972, 0.50000000000000000, 5.0000000000000000,
4053 8.0000000000000000, -0.59999999999999998 },
4054 { 0.87413762182790655, 0.50000000000000000, 5.0000000000000000,
4055 8.0000000000000000, -0.50000000000000000 },
4056 { 0.89533826626907331, 0.50000000000000000, 5.0000000000000000,
4057 8.0000000000000000, -0.40000000000000002 },
4058 { 0.91824276674115268, 0.50000000000000000, 5.0000000000000000,
4059 8.0000000000000000, -0.30000000000000004 },
4060 { 0.94310265050720576, 0.50000000000000000, 5.0000000000000000,
4061 8.0000000000000000, -0.19999999999999996 },
4062 { 0.97022678857609712, 0.50000000000000000, 5.0000000000000000,
4063 8.0000000000000000, -0.099999999999999978 },
4064 { 1.0000000000000000, 0.50000000000000000, 5.0000000000000000,
4065 8.0000000000000000, 0.0000000000000000 },
4066 { 1.0329098673199812, 0.50000000000000000, 5.0000000000000000,
4067 8.0000000000000000, 0.10000000000000009 },
4068 { 1.0695865684573389, 0.50000000000000000, 5.0000000000000000,
4069 8.0000000000000000, 0.19999999999999996 },
4070 { 1.1108642103944570, 0.50000000000000000, 5.0000000000000000,
4071 8.0000000000000000, 0.30000000000000004 },
4072 { 1.1578795055970506, 0.50000000000000000, 5.0000000000000000,
4073 8.0000000000000000, 0.39999999999999991 },
4074 { 1.2122394794169442, 0.50000000000000000, 5.0000000000000000,
4075 8.0000000000000000, 0.50000000000000000 },
4076 { 1.2763274721556934, 0.50000000000000000, 5.0000000000000000,
4077 8.0000000000000000, 0.60000000000000009 },
4078 { 1.3539179650251021, 0.50000000000000000, 5.0000000000000000,
4079 8.0000000000000000, 0.69999999999999996 },
4080 { 1.4515986118197148, 0.50000000000000000, 5.0000000000000000,
4081 8.0000000000000000, 0.80000000000000004 },
4082 { 1.5829284571614219, 0.50000000000000000, 5.0000000000000000,
4083 8.0000000000000000, 0.89999999999999991 },
4084 };
4085
4086 // Test function for a=0.50000000000000000, b=5.0000000000000000, c=8.0000000000000000.
4087 template <typename Tp>
4088 void test059()
4089 {
4090 const Tp eps = std::numeric_limits<Tp>::epsilon();
4091 Tp max_abs_diff = -Tp(1);
4092 Tp max_abs_frac = -Tp(1);
4093 unsigned int num_datum = sizeof(data059)
4094 / sizeof(testcase_hyperg<double>);
4095 for (unsigned int i = 0; i < num_datum; ++i)
4096 {
4097 const Tp f = std::tr1::hyperg(Tp(data059[i].a), Tp(data059[i].b),
4098 Tp(data059[i].c), Tp(data059[i].x));
4099 const Tp f0 = data059[i].f0;
4100 const Tp diff = f - f0;
4101 if (std::abs(diff) > max_abs_diff)
4102 max_abs_diff = std::abs(diff);
4103 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
4104 {
4105 const Tp frac = diff / f0;
4106 if (std::abs(frac) > max_abs_frac)
4107 max_abs_frac = std::abs(frac);
4108 }
4109 }
4110 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4111 }
4112
4113 // Test data for a=0.50000000000000000, b=5.0000000000000000, c=10.000000000000000.
4114 testcase_hyperg<double> data060[] = {
4115 { 0.83322694172301959, 0.50000000000000000, 5.0000000000000000,
4116 10.000000000000000, -0.90000000000000002 },
4117 { 0.84753931604765664, 0.50000000000000000, 5.0000000000000000,
4118 10.000000000000000, -0.80000000000000004 },
4119 { 0.86265784532195022, 0.50000000000000000, 5.0000000000000000,
4120 10.000000000000000, -0.69999999999999996 },
4121 { 0.87866479300707079, 0.50000000000000000, 5.0000000000000000,
4122 10.000000000000000, -0.59999999999999998 },
4123 { 0.89565516540263501, 0.50000000000000000, 5.0000000000000000,
4124 10.000000000000000, -0.50000000000000000 },
4125 { 0.91373946207610557, 0.50000000000000000, 5.0000000000000000,
4126 10.000000000000000, -0.40000000000000002 },
4127 { 0.93304721345881891, 0.50000000000000000, 5.0000000000000000,
4128 10.000000000000000, -0.30000000000000004 },
4129 { 0.95373159512905148, 0.50000000000000000, 5.0000000000000000,
4130 10.000000000000000, -0.19999999999999996 },
4131 { 0.97597554238828121, 0.50000000000000000, 5.0000000000000000,
4132 10.000000000000000, -0.099999999999999978 },
4133 { 1.0000000000000000, 0.50000000000000000, 5.0000000000000000,
4134 10.000000000000000, 0.0000000000000000 },
4135 { 1.0260752851887982, 0.50000000000000000, 5.0000000000000000,
4136 10.000000000000000, 0.10000000000000009 },
4137 { 1.0545371197996178, 0.50000000000000000, 5.0000000000000000,
4138 10.000000000000000, 0.19999999999999996 },
4139 { 1.0858099017045830, 0.50000000000000000, 5.0000000000000000,
4140 10.000000000000000, 0.30000000000000004 },
4141 { 1.1204416568688709, 0.50000000000000000, 5.0000000000000000,
4142 10.000000000000000, 0.39999999999999991 },
4143 { 1.1591587835964847, 0.50000000000000000, 5.0000000000000000,
4144 10.000000000000000, 0.50000000000000000 },
4145 { 1.2029564720303347, 0.50000000000000000, 5.0000000000000000,
4146 10.000000000000000, 0.60000000000000009 },
4147 { 1.2532588722007874, 0.50000000000000000, 5.0000000000000000,
4148 10.000000000000000, 0.69999999999999996 },
4149 { 1.3122319926925459, 0.50000000000000000, 5.0000000000000000,
4150 10.000000000000000, 0.80000000000000004 },
4151 { 1.3834948587364100, 0.50000000000000000, 5.0000000000000000,
4152 10.000000000000000, 0.89999999999999991 },
4153 };
4154
4155 // Test function for a=0.50000000000000000, b=5.0000000000000000, c=10.000000000000000.
4156 template <typename Tp>
4157 void test060()
4158 {
4159 const Tp eps = std::numeric_limits<Tp>::epsilon();
4160 Tp max_abs_diff = -Tp(1);
4161 Tp max_abs_frac = -Tp(1);
4162 unsigned int num_datum = sizeof(data060)
4163 / sizeof(testcase_hyperg<double>);
4164 for (unsigned int i = 0; i < num_datum; ++i)
4165 {
4166 const Tp f = std::tr1::hyperg(Tp(data060[i].a), Tp(data060[i].b),
4167 Tp(data060[i].c), Tp(data060[i].x));
4168 const Tp f0 = data060[i].f0;
4169 const Tp diff = f - f0;
4170 if (std::abs(diff) > max_abs_diff)
4171 max_abs_diff = std::abs(diff);
4172 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
4173 {
4174 const Tp frac = diff / f0;
4175 if (std::abs(frac) > max_abs_frac)
4176 max_abs_frac = std::abs(frac);
4177 }
4178 }
4179 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4180 }
4181
4182 // Test data for a=0.50000000000000000, b=10.000000000000000, c=2.0000000000000000.
4183 testcase_hyperg<double> data061[] = {
4184 { 0.37727530159464628, 0.50000000000000000, 10.000000000000000,
4185 2.0000000000000000, -0.90000000000000002 },
4186 { 0.39816010922169010, 0.50000000000000000, 10.000000000000000,
4187 2.0000000000000000, -0.80000000000000004 },
4188 { 0.42283703041362453, 0.50000000000000000, 10.000000000000000,
4189 2.0000000000000000, -0.69999999999999996 },
4190 { 0.45255640448730505, 0.50000000000000000, 10.000000000000000,
4191 2.0000000000000000, -0.59999999999999998 },
4192 { 0.48919507154431141, 0.50000000000000000, 10.000000000000000,
4193 2.0000000000000000, -0.50000000000000000 },
4194 { 0.53569358917731880, 0.50000000000000000, 10.000000000000000,
4195 2.0000000000000000, -0.40000000000000002 },
4196 { 0.59689778897029566, 0.50000000000000000, 10.000000000000000,
4197 2.0000000000000000, -0.30000000000000004 },
4198 { 0.68128587569875731, 0.50000000000000000, 10.000000000000000,
4199 2.0000000000000000, -0.19999999999999996 },
4200 { 0.80478739308790359, 0.50000000000000000, 10.000000000000000,
4201 2.0000000000000000, -0.099999999999999978 },
4202 { 1.0000000000000000, 0.50000000000000000, 10.000000000000000,
4203 2.0000000000000000, 0.0000000000000000 },
4204 { 1.3408664196153621, 0.50000000000000000, 10.000000000000000,
4205 2.0000000000000000, 0.10000000000000009 },
4206 { 2.0175364359923860, 0.50000000000000000, 10.000000000000000,
4207 2.0000000000000000, 0.19999999999999996 },
4208 { 3.6011214553736646, 0.50000000000000000, 10.000000000000000,
4209 2.0000000000000000, 0.30000000000000004 },
4210 { 8.1799429939495312, 0.50000000000000000, 10.000000000000000,
4211 2.0000000000000000, 0.39999999999999991 },
4212 { 25.644834637536000, 0.50000000000000000, 10.000000000000000,
4213 2.0000000000000000, 0.50000000000000000 },
4214 { 123.13738891597615, 0.50000000000000000, 10.000000000000000,
4215 2.0000000000000000, 0.60000000000000009 },
4216 { 1088.7122410321333, 0.50000000000000000, 10.000000000000000,
4217 2.0000000000000000, 0.69999999999999996 },
4218 { 27358.291704709951, 0.50000000000000000, 10.000000000000000,
4219 2.0000000000000000, 0.80000000000000004 },
4220 { 8174369.0266731177, 0.50000000000000000, 10.000000000000000,
4221 2.0000000000000000, 0.89999999999999991 },
4222 };
4223
4224 // Test function for a=0.50000000000000000, b=10.000000000000000, c=2.0000000000000000.
4225 template <typename Tp>
4226 void test061()
4227 {
4228 const Tp eps = std::numeric_limits<Tp>::epsilon();
4229 Tp max_abs_diff = -Tp(1);
4230 Tp max_abs_frac = -Tp(1);
4231 unsigned int num_datum = sizeof(data061)
4232 / sizeof(testcase_hyperg<double>);
4233 for (unsigned int i = 0; i < num_datum; ++i)
4234 {
4235 const Tp f = std::tr1::hyperg(Tp(data061[i].a), Tp(data061[i].b),
4236 Tp(data061[i].c), Tp(data061[i].x));
4237 const Tp f0 = data061[i].f0;
4238 const Tp diff = f - f0;
4239 if (std::abs(diff) > max_abs_diff)
4240 max_abs_diff = std::abs(diff);
4241 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
4242 {
4243 const Tp frac = diff / f0;
4244 if (std::abs(frac) > max_abs_frac)
4245 max_abs_frac = std::abs(frac);
4246 }
4247 }
4248 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4249 }
4250
4251 // Test data for a=0.50000000000000000, b=10.000000000000000, c=4.0000000000000000.
4252 testcase_hyperg<double> data062[] = {
4253 { 0.53905528308450834, 0.50000000000000000, 10.000000000000000,
4254 4.0000000000000000, -0.90000000000000002 },
4255 { 0.56235533974376162, 0.50000000000000000, 10.000000000000000,
4256 4.0000000000000000, -0.80000000000000004 },
4257 { 0.58887657983263575, 0.50000000000000000, 10.000000000000000,
4258 4.0000000000000000, -0.69999999999999996 },
4259 { 0.61941227047262915, 0.50000000000000000, 10.000000000000000,
4260 4.0000000000000000, -0.59999999999999998 },
4261 { 0.65504896640793853, 0.50000000000000000, 10.000000000000000,
4262 4.0000000000000000, -0.50000000000000000 },
4263 { 0.69731666644529999, 0.50000000000000000, 10.000000000000000,
4264 4.0000000000000000, -0.40000000000000002 },
4265 { 0.74844073299399128, 0.50000000000000000, 10.000000000000000,
4266 4.0000000000000000, -0.30000000000000004 },
4267 { 0.81178446800105752, 0.50000000000000000, 10.000000000000000,
4268 4.0000000000000000, -0.19999999999999996 },
4269 { 0.89266981277598023, 0.50000000000000000, 10.000000000000000,
4270 4.0000000000000000, -0.099999999999999978 },
4271 { 1.0000000000000000, 0.50000000000000000, 10.000000000000000,
4272 4.0000000000000000, 0.0000000000000000 },
4273 { 1.1497248473106778, 0.50000000000000000, 10.000000000000000,
4274 4.0000000000000000, 0.10000000000000009 },
4275 { 1.3729717112654571, 0.50000000000000000, 10.000000000000000,
4276 4.0000000000000000, 0.19999999999999996 },
4277 { 1.7374982340374392, 0.50000000000000000, 10.000000000000000,
4278 4.0000000000000000, 0.30000000000000004 },
4279 { 2.4134479340960580, 0.50000000000000000, 10.000000000000000,
4280 4.0000000000000000, 0.39999999999999991 },
4281 { 3.9191255240471192, 0.50000000000000000, 10.000000000000000,
4282 4.0000000000000000, 0.50000000000000000 },
4283 { 8.3316373077761270, 0.50000000000000000, 10.000000000000000,
4284 4.0000000000000000, 0.60000000000000009 },
4285 { 28.323020339843335, 0.50000000000000000, 10.000000000000000,
4286 4.0000000000000000, 0.69999999999999996 },
4287 { 225.84286572747891, 0.50000000000000000, 10.000000000000000,
4288 4.0000000000000000, 0.80000000000000004 },
4289 { 12757.127591286655, 0.50000000000000000, 10.000000000000000,
4290 4.0000000000000000, 0.89999999999999991 },
4291 };
4292
4293 // Test function for a=0.50000000000000000, b=10.000000000000000, c=4.0000000000000000.
4294 template <typename Tp>
4295 void test062()
4296 {
4297 const Tp eps = std::numeric_limits<Tp>::epsilon();
4298 Tp max_abs_diff = -Tp(1);
4299 Tp max_abs_frac = -Tp(1);
4300 unsigned int num_datum = sizeof(data062)
4301 / sizeof(testcase_hyperg<double>);
4302 for (unsigned int i = 0; i < num_datum; ++i)
4303 {
4304 const Tp f = std::tr1::hyperg(Tp(data062[i].a), Tp(data062[i].b),
4305 Tp(data062[i].c), Tp(data062[i].x));
4306 const Tp f0 = data062[i].f0;
4307 const Tp diff = f - f0;
4308 if (std::abs(diff) > max_abs_diff)
4309 max_abs_diff = std::abs(diff);
4310 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
4311 {
4312 const Tp frac = diff / f0;
4313 if (std::abs(frac) > max_abs_frac)
4314 max_abs_frac = std::abs(frac);
4315 }
4316 }
4317 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4318 }
4319
4320 // Test data for a=0.50000000000000000, b=10.000000000000000, c=6.0000000000000000.
4321 testcase_hyperg<double> data063[] = {
4322 { 0.62672622092226071, 0.50000000000000000, 10.000000000000000,
4323 6.0000000000000000, -0.90000000000000002 },
4324 { 0.64931010269769829, 0.50000000000000000, 10.000000000000000,
4325 6.0000000000000000, -0.80000000000000004 },
4326 { 0.67448067519076316, 0.50000000000000000, 10.000000000000000,
4327 6.0000000000000000, -0.69999999999999996 },
4328 { 0.70276306239803676, 0.50000000000000000, 10.000000000000000,
4329 6.0000000000000000, -0.59999999999999998 },
4330 { 0.73484179773087555, 0.50000000000000000, 10.000000000000000,
4331 6.0000000000000000, -0.50000000000000000 },
4332 { 0.77162761412743897, 0.50000000000000000, 10.000000000000000,
4333 6.0000000000000000, -0.40000000000000002 },
4334 { 0.81436116844816531, 0.50000000000000000, 10.000000000000000,
4335 6.0000000000000000, -0.30000000000000004 },
4336 { 0.86477994787944557, 0.50000000000000000, 10.000000000000000,
4337 6.0000000000000000, -0.19999999999999996 },
4338 { 0.92539820516603888, 0.50000000000000000, 10.000000000000000,
4339 6.0000000000000000, -0.099999999999999978 },
4340 { 1.0000000000000000, 0.50000000000000000, 10.000000000000000,
4341 6.0000000000000000, 0.0000000000000000 },
4342 { 1.0945599448210315, 0.50000000000000000, 10.000000000000000,
4343 6.0000000000000000, 0.10000000000000009 },
4344 { 1.2190897395597264, 0.50000000000000000, 10.000000000000000,
4345 6.0000000000000000, 0.19999999999999996 },
4346 { 1.3916844336856475, 0.50000000000000000, 10.000000000000000,
4347 6.0000000000000000, 0.30000000000000004 },
4348 { 1.6484497630432013, 0.50000000000000000, 10.000000000000000,
4349 6.0000000000000000, 0.39999999999999991 },
4350 { 2.0717772717131155, 0.50000000000000000, 10.000000000000000,
4351 6.0000000000000000, 0.50000000000000000 },
4352 { 2.8893613630810924, 0.50000000000000000, 10.000000000000000,
4353 6.0000000000000000, 0.60000000000000009 },
4354 { 4.9459404075413529, 0.50000000000000000, 10.000000000000000,
4355 6.0000000000000000, 0.69999999999999996 },
4356 { 13.487394149998716, 0.50000000000000000, 10.000000000000000,
4357 6.0000000000000000, 0.80000000000000004 },
4358 { 136.57616044013972, 0.50000000000000000, 10.000000000000000,
4359 6.0000000000000000, 0.89999999999999991 },
4360 };
4361
4362 // Test function for a=0.50000000000000000, b=10.000000000000000, c=6.0000000000000000.
4363 template <typename Tp>
4364 void test063()
4365 {
4366 const Tp eps = std::numeric_limits<Tp>::epsilon();
4367 Tp max_abs_diff = -Tp(1);
4368 Tp max_abs_frac = -Tp(1);
4369 unsigned int num_datum = sizeof(data063)
4370 / sizeof(testcase_hyperg<double>);
4371 for (unsigned int i = 0; i < num_datum; ++i)
4372 {
4373 const Tp f = std::tr1::hyperg(Tp(data063[i].a), Tp(data063[i].b),
4374 Tp(data063[i].c), Tp(data063[i].x));
4375 const Tp f0 = data063[i].f0;
4376 const Tp diff = f - f0;
4377 if (std::abs(diff) > max_abs_diff)
4378 max_abs_diff = std::abs(diff);
4379 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
4380 {
4381 const Tp frac = diff / f0;
4382 if (std::abs(frac) > max_abs_frac)
4383 max_abs_frac = std::abs(frac);
4384 }
4385 }
4386 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4387 }
4388
4389 // Test data for a=0.50000000000000000, b=10.000000000000000, c=8.0000000000000000.
4390 testcase_hyperg<double> data064[] = {
4391 { 0.68421604440344341, 0.50000000000000000, 10.000000000000000,
4392 8.0000000000000000, -0.90000000000000002 },
4393 { 0.70548098055548891, 0.50000000000000000, 10.000000000000000,
4394 8.0000000000000000, -0.80000000000000004 },
4395 { 0.72884342311710348, 0.50000000000000000, 10.000000000000000,
4396 8.0000000000000000, -0.69999999999999996 },
4397 { 0.75466953437856243, 0.50000000000000000, 10.000000000000000,
4398 8.0000000000000000, -0.59999999999999998 },
4399 { 0.78342090924662600, 0.50000000000000000, 10.000000000000000,
4400 8.0000000000000000, -0.50000000000000000 },
4401 { 0.81568884278645049, 0.50000000000000000, 10.000000000000000,
4402 8.0000000000000000, -0.40000000000000002 },
4403 { 0.85224480241465206, 0.50000000000000000, 10.000000000000000,
4404 8.0000000000000000, -0.30000000000000004 },
4405 { 0.89411692571131696, 0.50000000000000000, 10.000000000000000,
4406 8.0000000000000000, -0.19999999999999996 },
4407 { 0.94270986892954756, 0.50000000000000000, 10.000000000000000,
4408 8.0000000000000000, -0.099999999999999978 },
4409 { 1.0000000000000000, 0.50000000000000000, 10.000000000000000,
4410 8.0000000000000000, 0.0000000000000000 },
4411 { 1.0688682849120232, 0.50000000000000000, 10.000000000000000,
4412 8.0000000000000000, 0.10000000000000009 },
4413 { 1.1537004376097553, 0.50000000000000000, 10.000000000000000,
4414 8.0000000000000000, 0.19999999999999996 },
4415 { 1.2615455028370031, 0.50000000000000000, 10.000000000000000,
4416 8.0000000000000000, 0.30000000000000004 },
4417 { 1.4045541456153436, 0.50000000000000000, 10.000000000000000,
4418 8.0000000000000000, 0.39999999999999991 },
4419 { 1.6057216489444517, 0.50000000000000000, 10.000000000000000,
4420 8.0000000000000000, 0.50000000000000000 },
4421 { 1.9146603020550739, 0.50000000000000000, 10.000000000000000,
4422 8.0000000000000000, 0.60000000000000009 },
4423 { 2.4617931307620298, 0.50000000000000000, 10.000000000000000,
4424 8.0000000000000000, 0.69999999999999996 },
4425 { 3.7267799624996498, 0.50000000000000000, 10.000000000000000,
4426 8.0000000000000000, 0.80000000000000004 },
4427 { 9.3880118036248401, 0.50000000000000000, 10.000000000000000,
4428 8.0000000000000000, 0.89999999999999991 },
4429 };
4430
4431 // Test function for a=0.50000000000000000, b=10.000000000000000, c=8.0000000000000000.
4432 template <typename Tp>
4433 void test064()
4434 {
4435 const Tp eps = std::numeric_limits<Tp>::epsilon();
4436 Tp max_abs_diff = -Tp(1);
4437 Tp max_abs_frac = -Tp(1);
4438 unsigned int num_datum = sizeof(data064)
4439 / sizeof(testcase_hyperg<double>);
4440 for (unsigned int i = 0; i < num_datum; ++i)
4441 {
4442 const Tp f = std::tr1::hyperg(Tp(data064[i].a), Tp(data064[i].b),
4443 Tp(data064[i].c), Tp(data064[i].x));
4444 const Tp f0 = data064[i].f0;
4445 const Tp diff = f - f0;
4446 if (std::abs(diff) > max_abs_diff)
4447 max_abs_diff = std::abs(diff);
4448 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
4449 {
4450 const Tp frac = diff / f0;
4451 if (std::abs(frac) > max_abs_frac)
4452 max_abs_frac = std::abs(frac);
4453 }
4454 }
4455 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4456 }
4457
4458 // Test data for a=0.50000000000000000, b=10.000000000000000, c=10.000000000000000.
4459 testcase_hyperg<double> data065[] = {
4460 { 0.72547625011001171, 0.50000000000000000, 10.000000000000000,
4461 10.000000000000000, -0.90000000000000002 },
4462 { 0.74535599249992990, 0.50000000000000000, 10.000000000000000,
4463 10.000000000000000, -0.80000000000000004 },
4464 { 0.76696498884737041, 0.50000000000000000, 10.000000000000000,
4465 10.000000000000000, -0.69999999999999996 },
4466 { 0.79056941504209477, 0.50000000000000000, 10.000000000000000,
4467 10.000000000000000, -0.59999999999999998 },
4468 { 0.81649658092772603, 0.50000000000000000, 10.000000000000000,
4469 10.000000000000000, -0.50000000000000000 },
4470 { 0.84515425472851657, 0.50000000000000000, 10.000000000000000,
4471 10.000000000000000, -0.40000000000000002 },
4472 { 0.87705801930702920, 0.50000000000000000, 10.000000000000000,
4473 10.000000000000000, -0.30000000000000004 },
4474 { 0.91287092917527690, 0.50000000000000000, 10.000000000000000,
4475 10.000000000000000, -0.19999999999999996 },
4476 { 0.95346258924559224, 0.50000000000000000, 10.000000000000000,
4477 10.000000000000000, -0.099999999999999978 },
4478 { 1.0000000000000000, 0.50000000000000000, 10.000000000000000,
4479 10.000000000000000, 0.0000000000000000 },
4480 { 1.0540925533894598, 0.50000000000000000, 10.000000000000000,
4481 10.000000000000000, 0.10000000000000009 },
4482 { 1.1180339887498949, 0.50000000000000000, 10.000000000000000,
4483 10.000000000000000, 0.19999999999999996 },
4484 { 1.1952286093343938, 0.50000000000000000, 10.000000000000000,
4485 10.000000000000000, 0.30000000000000004 },
4486 { 1.2909944487358056, 0.50000000000000000, 10.000000000000000,
4487 10.000000000000000, 0.39999999999999991 },
4488 { 1.4142135623730949, 0.50000000000000000, 10.000000000000000,
4489 10.000000000000000, 0.50000000000000000 },
4490 { 1.5811388300841900, 0.50000000000000000, 10.000000000000000,
4491 10.000000000000000, 0.60000000000000009 },
4492 { 1.8257418583505536, 0.50000000000000000, 10.000000000000000,
4493 10.000000000000000, 0.69999999999999996 },
4494 { 2.2360679774997898, 0.50000000000000000, 10.000000000000000,
4495 10.000000000000000, 0.80000000000000004 },
4496 { 3.1622776601683782, 0.50000000000000000, 10.000000000000000,
4497 10.000000000000000, 0.89999999999999991 },
4498 };
4499
4500 // Test function for a=0.50000000000000000, b=10.000000000000000, c=10.000000000000000.
4501 template <typename Tp>
4502 void test065()
4503 {
4504 const Tp eps = std::numeric_limits<Tp>::epsilon();
4505 Tp max_abs_diff = -Tp(1);
4506 Tp max_abs_frac = -Tp(1);
4507 unsigned int num_datum = sizeof(data065)
4508 / sizeof(testcase_hyperg<double>);
4509 for (unsigned int i = 0; i < num_datum; ++i)
4510 {
4511 const Tp f = std::tr1::hyperg(Tp(data065[i].a), Tp(data065[i].b),
4512 Tp(data065[i].c), Tp(data065[i].x));
4513 const Tp f0 = data065[i].f0;
4514 const Tp diff = f - f0;
4515 if (std::abs(diff) > max_abs_diff)
4516 max_abs_diff = std::abs(diff);
4517 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
4518 {
4519 const Tp frac = diff / f0;
4520 if (std::abs(frac) > max_abs_frac)
4521 max_abs_frac = std::abs(frac);
4522 }
4523 }
4524 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4525 }
4526
4527 // Test data for a=0.50000000000000000, b=20.000000000000000, c=2.0000000000000000.
4528 testcase_hyperg<double> data066[] = {
4529 { 0.26690449940521566, 0.50000000000000000, 20.000000000000000,
4530 2.0000000000000000, -0.90000000000000002 },
4531 { 0.28252302866181805, 0.50000000000000000, 20.000000000000000,
4532 2.0000000000000000, -0.80000000000000004 },
4533 { 0.30123616141153819, 0.50000000000000000, 20.000000000000000,
4534 2.0000000000000000, -0.69999999999999996 },
4535 { 0.32421384687602628, 0.50000000000000000, 20.000000000000000,
4536 2.0000000000000000, -0.59999999999999998 },
4537 { 0.35334630811776752, 0.50000000000000000, 20.000000000000000,
4538 2.0000000000000000, -0.50000000000000000 },
4539 { 0.39191793127467034, 0.50000000000000000, 20.000000000000000,
4540 2.0000000000000000, -0.40000000000000002 },
4541 { 0.44620488618129206, 0.50000000000000000, 20.000000000000000,
4542 2.0000000000000000, -0.30000000000000004 },
4543 { 0.52980896919265685, 0.50000000000000000, 20.000000000000000,
4544 2.0000000000000000, -0.19999999999999996 },
4545 { 0.67754711477562357, 0.50000000000000000, 20.000000000000000,
4546 2.0000000000000000, -0.099999999999999978 },
4547 { 1.0000000000000000, 0.50000000000000000, 20.000000000000000,
4548 2.0000000000000000, 0.0000000000000000 },
4549 { 1.9567557771780317, 0.50000000000000000, 20.000000000000000,
4550 2.0000000000000000, 0.10000000000000009 },
4551 { 6.1816042148333086, 0.50000000000000000, 20.000000000000000,
4552 2.0000000000000000, 0.19999999999999996 },
4553 { 35.653088618561227, 0.50000000000000000, 20.000000000000000,
4554 2.0000000000000000, 0.30000000000000004 },
4555 { 377.51482843179906, 0.50000000000000000, 20.000000000000000,
4556 2.0000000000000000, 0.39999999999999991 },
4557 { 7645.8816551195359, 0.50000000000000000, 20.000000000000000,
4558 2.0000000000000000, 0.50000000000000000 },
4559 { 354791.74537980522, 0.50000000000000000, 20.000000000000000,
4560 2.0000000000000000, 0.60000000000000009 },
4561 { 57009889.966638684, 0.50000000000000000, 20.000000000000000,
4562 2.0000000000000000, 0.69999999999999996 },
4563 { 83771357024.863937, 0.50000000000000000, 20.000000000000000,
4564 2.0000000000000000, 0.80000000000000004 },
4565 { 25866972896376408., 0.50000000000000000, 20.000000000000000,
4566 2.0000000000000000, 0.89999999999999991 },
4567 };
4568
4569 // Test function for a=0.50000000000000000, b=20.000000000000000, c=2.0000000000000000.
4570 template <typename Tp>
4571 void test066()
4572 {
4573 const Tp eps = std::numeric_limits<Tp>::epsilon();
4574 Tp max_abs_diff = -Tp(1);
4575 Tp max_abs_frac = -Tp(1);
4576 unsigned int num_datum = sizeof(data066)
4577 / sizeof(testcase_hyperg<double>);
4578 for (unsigned int i = 0; i < num_datum; ++i)
4579 {
4580 const Tp f = std::tr1::hyperg(Tp(data066[i].a), Tp(data066[i].b),
4581 Tp(data066[i].c), Tp(data066[i].x));
4582 const Tp f0 = data066[i].f0;
4583 const Tp diff = f - f0;
4584 if (std::abs(diff) > max_abs_diff)
4585 max_abs_diff = std::abs(diff);
4586 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
4587 {
4588 const Tp frac = diff / f0;
4589 if (std::abs(frac) > max_abs_frac)
4590 max_abs_frac = std::abs(frac);
4591 }
4592 }
4593 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4594 }
4595
4596 // Test data for a=0.50000000000000000, b=20.000000000000000, c=4.0000000000000000.
4597 testcase_hyperg<double> data067[] = {
4598 { 0.40342659436153405, 0.50000000000000000, 20.000000000000000,
4599 4.0000000000000000, -0.90000000000000002 },
4600 { 0.42420571192034318, 0.50000000000000000, 20.000000000000000,
4601 4.0000000000000000, -0.80000000000000004 },
4602 { 0.44852768286073008, 0.50000000000000000, 20.000000000000000,
4603 4.0000000000000000, -0.69999999999999996 },
4604 { 0.47751245808592863, 0.50000000000000000, 20.000000000000000,
4605 4.0000000000000000, -0.59999999999999998 },
4606 { 0.51283632632707754, 0.50000000000000000, 20.000000000000000,
4607 4.0000000000000000, -0.50000000000000000 },
4608 { 0.55713468814894307, 0.50000000000000000, 20.000000000000000,
4609 4.0000000000000000, -0.40000000000000002 },
4610 { 0.61481320817757312, 0.50000000000000000, 20.000000000000000,
4611 4.0000000000000000, -0.30000000000000004 },
4612 { 0.69383483410097202, 0.50000000000000000, 20.000000000000000,
4613 4.0000000000000000, -0.19999999999999996 },
4614 { 0.81012002526006033, 0.50000000000000000, 20.000000000000000,
4615 4.0000000000000000, -0.099999999999999978 },
4616 { 1.0000000000000000, 0.50000000000000000, 20.000000000000000,
4617 4.0000000000000000, 0.0000000000000000 },
4618 { 1.3622225506603911, 0.50000000000000000, 20.000000000000000,
4619 4.0000000000000000, 0.10000000000000009 },
4620 { 2.2349513086109001, 0.50000000000000000, 20.000000000000000,
4621 4.0000000000000000, 0.19999999999999996 },
4622 { 5.1864917536761723, 0.50000000000000000, 20.000000000000000,
4623 4.0000000000000000, 0.30000000000000004 },
4624 { 21.020560423779411, 0.50000000000000000, 20.000000000000000,
4625 4.0000000000000000, 0.39999999999999991 },
4626 { 175.19649997100612, 0.50000000000000000, 20.000000000000000,
4627 4.0000000000000000, 0.50000000000000000 },
4628 { 3467.1587803688708, 0.50000000000000000, 20.000000000000000,
4629 4.0000000000000000, 0.60000000000000009 },
4630 { 225003.88683445856, 0.50000000000000000, 20.000000000000000,
4631 4.0000000000000000, 0.69999999999999996 },
4632 { 110837674.65652709, 0.50000000000000000, 20.000000000000000,
4633 4.0000000000000000, 0.80000000000000004 },
4634 { 6688966964170.6807, 0.50000000000000000, 20.000000000000000,
4635 4.0000000000000000, 0.89999999999999991 },
4636 };
4637
4638 // Test function for a=0.50000000000000000, b=20.000000000000000, c=4.0000000000000000.
4639 template <typename Tp>
4640 void test067()
4641 {
4642 const Tp eps = std::numeric_limits<Tp>::epsilon();
4643 Tp max_abs_diff = -Tp(1);
4644 Tp max_abs_frac = -Tp(1);
4645 unsigned int num_datum = sizeof(data067)
4646 / sizeof(testcase_hyperg<double>);
4647 for (unsigned int i = 0; i < num_datum; ++i)
4648 {
4649 const Tp f = std::tr1::hyperg(Tp(data067[i].a), Tp(data067[i].b),
4650 Tp(data067[i].c), Tp(data067[i].x));
4651 const Tp f0 = data067[i].f0;
4652 const Tp diff = f - f0;
4653 if (std::abs(diff) > max_abs_diff)
4654 max_abs_diff = std::abs(diff);
4655 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
4656 {
4657 const Tp frac = diff / f0;
4658 if (std::abs(frac) > max_abs_frac)
4659 max_abs_frac = std::abs(frac);
4660 }
4661 }
4662 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4663 }
4664
4665 // Test data for a=0.50000000000000000, b=20.000000000000000, c=6.0000000000000000.
4666 testcase_hyperg<double> data068[] = {
4667 { 0.48716309885816761, 0.50000000000000000, 20.000000000000000,
4668 6.0000000000000000, -0.90000000000000002 },
4669 { 0.50965859152542281, 0.50000000000000000, 20.000000000000000,
4670 6.0000000000000000, -0.80000000000000004 },
4671 { 0.53554809210658971, 0.50000000000000000, 20.000000000000000,
4672 6.0000000000000000, -0.69999999999999996 },
4673 { 0.56576689207507136, 0.50000000000000000, 20.000000000000000,
4674 6.0000000000000000, -0.59999999999999998 },
4675 { 0.60164849637133688, 0.50000000000000000, 20.000000000000000,
4676 6.0000000000000000, -0.50000000000000000 },
4677 { 0.64516711595404375, 0.50000000000000000, 20.000000000000000,
4678 6.0000000000000000, -0.40000000000000002 },
4679 { 0.69938278735493542, 0.50000000000000000, 20.000000000000000,
4680 6.0000000000000000, -0.30000000000000004 },
4681 { 0.76931621518401860, 0.50000000000000000, 20.000000000000000,
4682 6.0000000000000000, -0.19999999999999996 },
4683 { 0.86381808725530695, 0.50000000000000000, 20.000000000000000,
4684 6.0000000000000000, -0.099999999999999978 },
4685 { 1.0000000000000000, 0.50000000000000000, 20.000000000000000,
4686 6.0000000000000000, 0.0000000000000000 },
4687 { 1.2152051956815531, 0.50000000000000000, 20.000000000000000,
4688 6.0000000000000000, 0.10000000000000009 },
4689 { 1.6052546785425543, 0.50000000000000000, 20.000000000000000,
4690 6.0000000000000000, 0.19999999999999996 },
4691 { 2.4765586046012635, 0.50000000000000000, 20.000000000000000,
4692 6.0000000000000000, 0.30000000000000004 },
4693 { 5.1564492216997486, 0.50000000000000000, 20.000000000000000,
4694 6.0000000000000000, 0.39999999999999991 },
4695 { 18.446158392136365, 0.50000000000000000, 20.000000000000000,
4696 6.0000000000000000, 0.50000000000000000 },
4697 { 150.44577670123971, 0.50000000000000000, 20.000000000000000,
4698 6.0000000000000000, 0.60000000000000009 },
4699 { 3862.6317400115768, 0.50000000000000000, 20.000000000000000,
4700 6.0000000000000000, 0.69999999999999996 },
4701 { 632428.34833625401, 0.50000000000000000, 20.000000000000000,
4702 6.0000000000000000, 0.80000000000000004 },
4703 { 7426927663.3808765, 0.50000000000000000, 20.000000000000000,
4704 6.0000000000000000, 0.89999999999999991 },
4705 };
4706
4707 // Test function for a=0.50000000000000000, b=20.000000000000000, c=6.0000000000000000.
4708 template <typename Tp>
4709 void test068()
4710 {
4711 const Tp eps = std::numeric_limits<Tp>::epsilon();
4712 Tp max_abs_diff = -Tp(1);
4713 Tp max_abs_frac = -Tp(1);
4714 unsigned int num_datum = sizeof(data068)
4715 / sizeof(testcase_hyperg<double>);
4716 for (unsigned int i = 0; i < num_datum; ++i)
4717 {
4718 const Tp f = std::tr1::hyperg(Tp(data068[i].a), Tp(data068[i].b),
4719 Tp(data068[i].c), Tp(data068[i].x));
4720 const Tp f0 = data068[i].f0;
4721 const Tp diff = f - f0;
4722 if (std::abs(diff) > max_abs_diff)
4723 max_abs_diff = std::abs(diff);
4724 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
4725 {
4726 const Tp frac = diff / f0;
4727 if (std::abs(frac) > max_abs_frac)
4728 max_abs_frac = std::abs(frac);
4729 }
4730 }
4731 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4732 }
4733
4734 // Test data for a=0.50000000000000000, b=20.000000000000000, c=8.0000000000000000.
4735 testcase_hyperg<double> data069[] = {
4736 { 0.54703266209548362, 0.50000000000000000, 20.000000000000000,
4737 8.0000000000000000, -0.90000000000000002 },
4738 { 0.56997321774144971, 0.50000000000000000, 20.000000000000000,
4739 8.0000000000000000, -0.80000000000000004 },
4740 { 0.59603026159654970, 0.50000000000000000, 20.000000000000000,
4741 8.0000000000000000, -0.69999999999999996 },
4742 { 0.62596978851120511, 0.50000000000000000, 20.000000000000000,
4743 8.0000000000000000, -0.59999999999999998 },
4744 { 0.66084565876898926, 0.50000000000000000, 20.000000000000000,
4745 8.0000000000000000, -0.50000000000000000 },
4746 { 0.70215256667232839, 0.50000000000000000, 20.000000000000000,
4747 8.0000000000000000, -0.40000000000000002 },
4748 { 0.75208916592008568, 0.50000000000000000, 20.000000000000000,
4749 8.0000000000000000, -0.30000000000000004 },
4750 { 0.81403631111658648, 0.50000000000000000, 20.000000000000000,
4751 8.0000000000000000, -0.19999999999999996 },
4752 { 0.89348608489854608, 0.50000000000000000, 20.000000000000000,
4753 8.0000000000000000, -0.099999999999999978 },
4754 { 1.0000000000000000, 0.50000000000000000, 20.000000000000000,
4755 8.0000000000000000, 0.0000000000000000 },
4756 { 1.1517793185139173, 0.50000000000000000, 20.000000000000000,
4757 8.0000000000000000, 0.10000000000000009 },
4758 { 1.3878110313656598, 0.50000000000000000, 20.000000000000000,
4759 8.0000000000000000, 0.19999999999999996 },
4760 { 1.8061071794572381, 0.50000000000000000, 20.000000000000000,
4761 8.0000000000000000, 0.30000000000000004 },
4762 { 2.7148594517859586, 0.50000000000000000, 20.000000000000000,
4763 8.0000000000000000, 0.39999999999999991 },
4764 { 5.4529435709049361, 0.50000000000000000, 20.000000000000000,
4765 8.0000000000000000, 0.50000000000000000 },
4766 { 19.487310275377109, 0.50000000000000000, 20.000000000000000,
4767 8.0000000000000000, 0.60000000000000009 },
4768 { 191.69079165937470, 0.50000000000000000, 20.000000000000000,
4769 8.0000000000000000, 0.69999999999999996 },
4770 { 10218.543981792311, 0.50000000000000000, 20.000000000000000,
4771 8.0000000000000000, 0.80000000000000004 },
4772 { 23160836.646583911, 0.50000000000000000, 20.000000000000000,
4773 8.0000000000000000, 0.89999999999999991 },
4774 };
4775
4776 // Test function for a=0.50000000000000000, b=20.000000000000000, c=8.0000000000000000.
4777 template <typename Tp>
4778 void test069()
4779 {
4780 const Tp eps = std::numeric_limits<Tp>::epsilon();
4781 Tp max_abs_diff = -Tp(1);
4782 Tp max_abs_frac = -Tp(1);
4783 unsigned int num_datum = sizeof(data069)
4784 / sizeof(testcase_hyperg<double>);
4785 for (unsigned int i = 0; i < num_datum; ++i)
4786 {
4787 const Tp f = std::tr1::hyperg(Tp(data069[i].a), Tp(data069[i].b),
4788 Tp(data069[i].c), Tp(data069[i].x));
4789 const Tp f0 = data069[i].f0;
4790 const Tp diff = f - f0;
4791 if (std::abs(diff) > max_abs_diff)
4792 max_abs_diff = std::abs(diff);
4793 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
4794 {
4795 const Tp frac = diff / f0;
4796 if (std::abs(frac) > max_abs_frac)
4797 max_abs_frac = std::abs(frac);
4798 }
4799 }
4800 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4801 }
4802
4803 // Test data for a=0.50000000000000000, b=20.000000000000000, c=10.000000000000000.
4804 testcase_hyperg<double> data070[] = {
4805 { 0.59292067298616002, 0.50000000000000000, 20.000000000000000,
4806 10.000000000000000, -0.90000000000000002 },
4807 { 0.61572496720679915, 0.50000000000000000, 20.000000000000000,
4808 10.000000000000000, -0.80000000000000004 },
4809 { 0.64135339122875623, 0.50000000000000000, 20.000000000000000,
4810 10.000000000000000, -0.69999999999999996 },
4811 { 0.67043457419280483, 0.50000000000000000, 20.000000000000000,
4812 10.000000000000000, -0.59999999999999998 },
4813 { 0.70380956268170980, 0.50000000000000000, 20.000000000000000,
4814 10.000000000000000, -0.50000000000000000 },
4815 { 0.74263251901495231, 0.50000000000000000, 20.000000000000000,
4816 10.000000000000000, -0.40000000000000002 },
4817 { 0.78853555445528278, 0.50000000000000000, 20.000000000000000,
4818 10.000000000000000, -0.30000000000000004 },
4819 { 0.84391122775673766, 0.50000000000000000, 20.000000000000000,
4820 10.000000000000000, -0.19999999999999996 },
4821 { 0.91242401018807406, 0.50000000000000000, 20.000000000000000,
4822 10.000000000000000, -0.099999999999999978 },
4823 { 1.0000000000000000, 0.50000000000000000, 20.000000000000000,
4824 10.000000000000000, 0.0000000000000000 },
4825 { 1.1169059681274873, 0.50000000000000000, 20.000000000000000,
4826 10.000000000000000, 0.10000000000000009 },
4827 { 1.2825928301302667, 0.50000000000000000, 20.000000000000000,
4828 10.000000000000000, 0.19999999999999996 },
4829 { 1.5385937789924939, 0.50000000000000000, 20.000000000000000,
4830 10.000000000000000, 0.30000000000000004 },
4831 { 1.9895771187893898, 0.50000000000000000, 20.000000000000000,
4832 10.000000000000000, 0.39999999999999991 },
4833 { 2.9707335806970168, 0.50000000000000000, 20.000000000000000,
4834 10.000000000000000, 0.50000000000000000 },
4835 { 6.0299506157180467, 0.50000000000000000, 20.000000000000000,
4836 10.000000000000000, 0.60000000000000009 },
4837 { 24.259090336955577, 0.50000000000000000, 20.000000000000000,
4838 10.000000000000000, 0.69999999999999996 },
4839 { 406.27267173257223, 0.50000000000000000, 20.000000000000000,
4840 10.000000000000000, 0.80000000000000004 },
4841 { 174330.03997220192, 0.50000000000000000, 20.000000000000000,
4842 10.000000000000000, 0.89999999999999991 },
4843 };
4844
4845 // Test function for a=0.50000000000000000, b=20.000000000000000, c=10.000000000000000.
4846 template <typename Tp>
4847 void test070()
4848 {
4849 const Tp eps = std::numeric_limits<Tp>::epsilon();
4850 Tp max_abs_diff = -Tp(1);
4851 Tp max_abs_frac = -Tp(1);
4852 unsigned int num_datum = sizeof(data070)
4853 / sizeof(testcase_hyperg<double>);
4854 for (unsigned int i = 0; i < num_datum; ++i)
4855 {
4856 const Tp f = std::tr1::hyperg(Tp(data070[i].a), Tp(data070[i].b),
4857 Tp(data070[i].c), Tp(data070[i].x));
4858 const Tp f0 = data070[i].f0;
4859 const Tp diff = f - f0;
4860 if (std::abs(diff) > max_abs_diff)
4861 max_abs_diff = std::abs(diff);
4862 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
4863 {
4864 const Tp frac = diff / f0;
4865 if (std::abs(frac) > max_abs_frac)
4866 max_abs_frac = std::abs(frac);
4867 }
4868 }
4869 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4870 }
4871
4872 // Test data for a=1.0000000000000000, b=0.0000000000000000, c=2.0000000000000000.
4873 testcase_hyperg<double> data071[] = {
4874 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4875 2.0000000000000000, -0.90000000000000002 },
4876 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4877 2.0000000000000000, -0.80000000000000004 },
4878 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4879 2.0000000000000000, -0.69999999999999996 },
4880 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4881 2.0000000000000000, -0.59999999999999998 },
4882 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4883 2.0000000000000000, -0.50000000000000000 },
4884 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4885 2.0000000000000000, -0.40000000000000002 },
4886 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4887 2.0000000000000000, -0.30000000000000004 },
4888 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4889 2.0000000000000000, -0.19999999999999996 },
4890 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4891 2.0000000000000000, -0.099999999999999978 },
4892 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4893 2.0000000000000000, 0.0000000000000000 },
4894 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4895 2.0000000000000000, 0.10000000000000009 },
4896 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4897 2.0000000000000000, 0.19999999999999996 },
4898 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4899 2.0000000000000000, 0.30000000000000004 },
4900 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4901 2.0000000000000000, 0.39999999999999991 },
4902 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4903 2.0000000000000000, 0.50000000000000000 },
4904 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4905 2.0000000000000000, 0.60000000000000009 },
4906 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4907 2.0000000000000000, 0.69999999999999996 },
4908 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4909 2.0000000000000000, 0.80000000000000004 },
4910 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4911 2.0000000000000000, 0.89999999999999991 },
4912 };
4913
4914 // Test function for a=1.0000000000000000, b=0.0000000000000000, c=2.0000000000000000.
4915 template <typename Tp>
4916 void test071()
4917 {
4918 const Tp eps = std::numeric_limits<Tp>::epsilon();
4919 Tp max_abs_diff = -Tp(1);
4920 Tp max_abs_frac = -Tp(1);
4921 unsigned int num_datum = sizeof(data071)
4922 / sizeof(testcase_hyperg<double>);
4923 for (unsigned int i = 0; i < num_datum; ++i)
4924 {
4925 const Tp f = std::tr1::hyperg(Tp(data071[i].a), Tp(data071[i].b),
4926 Tp(data071[i].c), Tp(data071[i].x));
4927 const Tp f0 = data071[i].f0;
4928 const Tp diff = f - f0;
4929 if (std::abs(diff) > max_abs_diff)
4930 max_abs_diff = std::abs(diff);
4931 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
4932 {
4933 const Tp frac = diff / f0;
4934 if (std::abs(frac) > max_abs_frac)
4935 max_abs_frac = std::abs(frac);
4936 }
4937 }
4938 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4939 }
4940
4941 // Test data for a=1.0000000000000000, b=0.0000000000000000, c=4.0000000000000000.
4942 testcase_hyperg<double> data072[] = {
4943 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4944 4.0000000000000000, -0.90000000000000002 },
4945 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4946 4.0000000000000000, -0.80000000000000004 },
4947 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4948 4.0000000000000000, -0.69999999999999996 },
4949 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4950 4.0000000000000000, -0.59999999999999998 },
4951 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4952 4.0000000000000000, -0.50000000000000000 },
4953 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4954 4.0000000000000000, -0.40000000000000002 },
4955 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4956 4.0000000000000000, -0.30000000000000004 },
4957 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4958 4.0000000000000000, -0.19999999999999996 },
4959 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4960 4.0000000000000000, -0.099999999999999978 },
4961 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4962 4.0000000000000000, 0.0000000000000000 },
4963 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4964 4.0000000000000000, 0.10000000000000009 },
4965 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4966 4.0000000000000000, 0.19999999999999996 },
4967 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4968 4.0000000000000000, 0.30000000000000004 },
4969 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4970 4.0000000000000000, 0.39999999999999991 },
4971 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4972 4.0000000000000000, 0.50000000000000000 },
4973 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4974 4.0000000000000000, 0.60000000000000009 },
4975 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4976 4.0000000000000000, 0.69999999999999996 },
4977 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4978 4.0000000000000000, 0.80000000000000004 },
4979 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
4980 4.0000000000000000, 0.89999999999999991 },
4981 };
4982
4983 // Test function for a=1.0000000000000000, b=0.0000000000000000, c=4.0000000000000000.
4984 template <typename Tp>
4985 void test072()
4986 {
4987 const Tp eps = std::numeric_limits<Tp>::epsilon();
4988 Tp max_abs_diff = -Tp(1);
4989 Tp max_abs_frac = -Tp(1);
4990 unsigned int num_datum = sizeof(data072)
4991 / sizeof(testcase_hyperg<double>);
4992 for (unsigned int i = 0; i < num_datum; ++i)
4993 {
4994 const Tp f = std::tr1::hyperg(Tp(data072[i].a), Tp(data072[i].b),
4995 Tp(data072[i].c), Tp(data072[i].x));
4996 const Tp f0 = data072[i].f0;
4997 const Tp diff = f - f0;
4998 if (std::abs(diff) > max_abs_diff)
4999 max_abs_diff = std::abs(diff);
5000 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
5001 {
5002 const Tp frac = diff / f0;
5003 if (std::abs(frac) > max_abs_frac)
5004 max_abs_frac = std::abs(frac);
5005 }
5006 }
5007 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5008 }
5009
5010 // Test data for a=1.0000000000000000, b=0.0000000000000000, c=6.0000000000000000.
5011 testcase_hyperg<double> data073[] = {
5012 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5013 6.0000000000000000, -0.90000000000000002 },
5014 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5015 6.0000000000000000, -0.80000000000000004 },
5016 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5017 6.0000000000000000, -0.69999999999999996 },
5018 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5019 6.0000000000000000, -0.59999999999999998 },
5020 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5021 6.0000000000000000, -0.50000000000000000 },
5022 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5023 6.0000000000000000, -0.40000000000000002 },
5024 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5025 6.0000000000000000, -0.30000000000000004 },
5026 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5027 6.0000000000000000, -0.19999999999999996 },
5028 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5029 6.0000000000000000, -0.099999999999999978 },
5030 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5031 6.0000000000000000, 0.0000000000000000 },
5032 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5033 6.0000000000000000, 0.10000000000000009 },
5034 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5035 6.0000000000000000, 0.19999999999999996 },
5036 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5037 6.0000000000000000, 0.30000000000000004 },
5038 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5039 6.0000000000000000, 0.39999999999999991 },
5040 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5041 6.0000000000000000, 0.50000000000000000 },
5042 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5043 6.0000000000000000, 0.60000000000000009 },
5044 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5045 6.0000000000000000, 0.69999999999999996 },
5046 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5047 6.0000000000000000, 0.80000000000000004 },
5048 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5049 6.0000000000000000, 0.89999999999999991 },
5050 };
5051
5052 // Test function for a=1.0000000000000000, b=0.0000000000000000, c=6.0000000000000000.
5053 template <typename Tp>
5054 void test073()
5055 {
5056 const Tp eps = std::numeric_limits<Tp>::epsilon();
5057 Tp max_abs_diff = -Tp(1);
5058 Tp max_abs_frac = -Tp(1);
5059 unsigned int num_datum = sizeof(data073)
5060 / sizeof(testcase_hyperg<double>);
5061 for (unsigned int i = 0; i < num_datum; ++i)
5062 {
5063 const Tp f = std::tr1::hyperg(Tp(data073[i].a), Tp(data073[i].b),
5064 Tp(data073[i].c), Tp(data073[i].x));
5065 const Tp f0 = data073[i].f0;
5066 const Tp diff = f - f0;
5067 if (std::abs(diff) > max_abs_diff)
5068 max_abs_diff = std::abs(diff);
5069 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
5070 {
5071 const Tp frac = diff / f0;
5072 if (std::abs(frac) > max_abs_frac)
5073 max_abs_frac = std::abs(frac);
5074 }
5075 }
5076 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5077 }
5078
5079 // Test data for a=1.0000000000000000, b=0.0000000000000000, c=8.0000000000000000.
5080 testcase_hyperg<double> data074[] = {
5081 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5082 8.0000000000000000, -0.90000000000000002 },
5083 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5084 8.0000000000000000, -0.80000000000000004 },
5085 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5086 8.0000000000000000, -0.69999999999999996 },
5087 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5088 8.0000000000000000, -0.59999999999999998 },
5089 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5090 8.0000000000000000, -0.50000000000000000 },
5091 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5092 8.0000000000000000, -0.40000000000000002 },
5093 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5094 8.0000000000000000, -0.30000000000000004 },
5095 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5096 8.0000000000000000, -0.19999999999999996 },
5097 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5098 8.0000000000000000, -0.099999999999999978 },
5099 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5100 8.0000000000000000, 0.0000000000000000 },
5101 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5102 8.0000000000000000, 0.10000000000000009 },
5103 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5104 8.0000000000000000, 0.19999999999999996 },
5105 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5106 8.0000000000000000, 0.30000000000000004 },
5107 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5108 8.0000000000000000, 0.39999999999999991 },
5109 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5110 8.0000000000000000, 0.50000000000000000 },
5111 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5112 8.0000000000000000, 0.60000000000000009 },
5113 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5114 8.0000000000000000, 0.69999999999999996 },
5115 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5116 8.0000000000000000, 0.80000000000000004 },
5117 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5118 8.0000000000000000, 0.89999999999999991 },
5119 };
5120
5121 // Test function for a=1.0000000000000000, b=0.0000000000000000, c=8.0000000000000000.
5122 template <typename Tp>
5123 void test074()
5124 {
5125 const Tp eps = std::numeric_limits<Tp>::epsilon();
5126 Tp max_abs_diff = -Tp(1);
5127 Tp max_abs_frac = -Tp(1);
5128 unsigned int num_datum = sizeof(data074)
5129 / sizeof(testcase_hyperg<double>);
5130 for (unsigned int i = 0; i < num_datum; ++i)
5131 {
5132 const Tp f = std::tr1::hyperg(Tp(data074[i].a), Tp(data074[i].b),
5133 Tp(data074[i].c), Tp(data074[i].x));
5134 const Tp f0 = data074[i].f0;
5135 const Tp diff = f - f0;
5136 if (std::abs(diff) > max_abs_diff)
5137 max_abs_diff = std::abs(diff);
5138 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
5139 {
5140 const Tp frac = diff / f0;
5141 if (std::abs(frac) > max_abs_frac)
5142 max_abs_frac = std::abs(frac);
5143 }
5144 }
5145 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5146 }
5147
5148 // Test data for a=1.0000000000000000, b=0.0000000000000000, c=10.000000000000000.
5149 testcase_hyperg<double> data075[] = {
5150 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5151 10.000000000000000, -0.90000000000000002 },
5152 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5153 10.000000000000000, -0.80000000000000004 },
5154 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5155 10.000000000000000, -0.69999999999999996 },
5156 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5157 10.000000000000000, -0.59999999999999998 },
5158 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5159 10.000000000000000, -0.50000000000000000 },
5160 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5161 10.000000000000000, -0.40000000000000002 },
5162 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5163 10.000000000000000, -0.30000000000000004 },
5164 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5165 10.000000000000000, -0.19999999999999996 },
5166 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5167 10.000000000000000, -0.099999999999999978 },
5168 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5169 10.000000000000000, 0.0000000000000000 },
5170 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5171 10.000000000000000, 0.10000000000000009 },
5172 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5173 10.000000000000000, 0.19999999999999996 },
5174 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5175 10.000000000000000, 0.30000000000000004 },
5176 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5177 10.000000000000000, 0.39999999999999991 },
5178 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5179 10.000000000000000, 0.50000000000000000 },
5180 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5181 10.000000000000000, 0.60000000000000009 },
5182 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5183 10.000000000000000, 0.69999999999999996 },
5184 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5185 10.000000000000000, 0.80000000000000004 },
5186 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
5187 10.000000000000000, 0.89999999999999991 },
5188 };
5189
5190 // Test function for a=1.0000000000000000, b=0.0000000000000000, c=10.000000000000000.
5191 template <typename Tp>
5192 void test075()
5193 {
5194 const Tp eps = std::numeric_limits<Tp>::epsilon();
5195 Tp max_abs_diff = -Tp(1);
5196 Tp max_abs_frac = -Tp(1);
5197 unsigned int num_datum = sizeof(data075)
5198 / sizeof(testcase_hyperg<double>);
5199 for (unsigned int i = 0; i < num_datum; ++i)
5200 {
5201 const Tp f = std::tr1::hyperg(Tp(data075[i].a), Tp(data075[i].b),
5202 Tp(data075[i].c), Tp(data075[i].x));
5203 const Tp f0 = data075[i].f0;
5204 const Tp diff = f - f0;
5205 if (std::abs(diff) > max_abs_diff)
5206 max_abs_diff = std::abs(diff);
5207 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
5208 {
5209 const Tp frac = diff / f0;
5210 if (std::abs(frac) > max_abs_frac)
5211 max_abs_frac = std::abs(frac);
5212 }
5213 }
5214 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5215 }
5216
5217 // Test data for a=1.0000000000000000, b=0.50000000000000000, c=2.0000000000000000.
5218 testcase_hyperg<double> data076[] = {
5219 { 0.84089972268671609, 1.0000000000000000, 0.50000000000000000,
5220 2.0000000000000000, -0.90000000000000002 },
5221 { 0.85410196624968437, 1.0000000000000000, 0.50000000000000000,
5222 2.0000000000000000, -0.80000000000000004 },
5223 { 0.86811566011579933, 1.0000000000000000, 0.50000000000000000,
5224 2.0000000000000000, -0.69999999999999996 },
5225 { 0.88303688022450544, 1.0000000000000000, 0.50000000000000000,
5226 2.0000000000000000, -0.59999999999999998 },
5227 { 0.89897948556635565, 1.0000000000000000, 0.50000000000000000,
5228 2.0000000000000000, -0.50000000000000000 },
5229 { 0.91607978309961580, 1.0000000000000000, 0.50000000000000000,
5230 2.0000000000000000, -0.40000000000000002 },
5231 { 0.93450283399425305, 1.0000000000000000, 0.50000000000000000,
5232 2.0000000000000000, -0.30000000000000004 },
5233 { 0.95445115010332193, 1.0000000000000000, 0.50000000000000000,
5234 2.0000000000000000, -0.19999999999999996 },
5235 { 0.97617696340303095, 1.0000000000000000, 0.50000000000000000,
5236 2.0000000000000000, -0.099999999999999978 },
5237 { 1.0000000000000000, 1.0000000000000000, 0.50000000000000000,
5238 2.0000000000000000, 0.0000000000000000 },
5239 { 1.0263340389897240, 1.0000000000000000, 0.50000000000000000,
5240 2.0000000000000000, 0.10000000000000009 },
5241 { 1.0557280900008410, 1.0000000000000000, 0.50000000000000000,
5242 2.0000000000000000, 0.19999999999999996 },
5243 { 1.0889331564394962, 1.0000000000000000, 0.50000000000000000,
5244 2.0000000000000000, 0.30000000000000004 },
5245 { 1.1270166537925830, 1.0000000000000000, 0.50000000000000000,
5246 2.0000000000000000, 0.39999999999999991 },
5247 { 1.1715728752538095, 1.0000000000000000, 0.50000000000000000,
5248 2.0000000000000000, 0.50000000000000000 },
5249 { 1.2251482265544145, 1.0000000000000000, 0.50000000000000000,
5250 2.0000000000000000, 0.60000000000000009 },
5251 { 1.2922212642709541, 1.0000000000000000, 0.50000000000000000,
5252 2.0000000000000000, 0.69999999999999996 },
5253 { 1.3819660112501042, 1.0000000000000000, 0.50000000000000000,
5254 2.0000000000000000, 0.80000000000000004 },
5255 { 1.5194938532959119, 1.0000000000000000, 0.50000000000000000,
5256 2.0000000000000000, 0.89999999999999991 },
5257 };
5258
5259 // Test function for a=1.0000000000000000, b=0.50000000000000000, c=2.0000000000000000.
5260 template <typename Tp>
5261 void test076()
5262 {
5263 const Tp eps = std::numeric_limits<Tp>::epsilon();
5264 Tp max_abs_diff = -Tp(1);
5265 Tp max_abs_frac = -Tp(1);
5266 unsigned int num_datum = sizeof(data076)
5267 / sizeof(testcase_hyperg<double>);
5268 for (unsigned int i = 0; i < num_datum; ++i)
5269 {
5270 const Tp f = std::tr1::hyperg(Tp(data076[i].a), Tp(data076[i].b),
5271 Tp(data076[i].c), Tp(data076[i].x));
5272 const Tp f0 = data076[i].f0;
5273 const Tp diff = f - f0;
5274 if (std::abs(diff) > max_abs_diff)
5275 max_abs_diff = std::abs(diff);
5276 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
5277 {
5278 const Tp frac = diff / f0;
5279 if (std::abs(frac) > max_abs_frac)
5280 max_abs_frac = std::abs(frac);
5281 }
5282 }
5283 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5284 }
5285
5286 // Test data for a=1.0000000000000000, b=0.50000000000000000, c=4.0000000000000000.
5287 testcase_hyperg<double> data077[] = {
5288 { 0.90992197313391499, 1.0000000000000000, 0.50000000000000000,
5289 4.0000000000000000, -0.90000000000000002 },
5290 { 0.91822592662244507, 1.0000000000000000, 0.50000000000000000,
5291 4.0000000000000000, -0.80000000000000004 },
5292 { 0.92687104566419531, 1.0000000000000000, 0.50000000000000000,
5293 4.0000000000000000, -0.69999999999999996 },
5294 { 0.93588628166548815, 1.0000000000000000, 0.50000000000000000,
5295 4.0000000000000000, -0.59999999999999998 },
5296 { 0.94530459215552909, 1.0000000000000000, 0.50000000000000000,
5297 4.0000000000000000, -0.50000000000000000 },
5298 { 0.95516374875247467, 1.0000000000000000, 0.50000000000000000,
5299 4.0000000000000000, -0.40000000000000002 },
5300 { 0.96550736800511827, 1.0000000000000000, 0.50000000000000000,
5301 4.0000000000000000, -0.30000000000000004 },
5302 { 0.97638624595136270, 1.0000000000000000, 0.50000000000000000,
5303 4.0000000000000000, -0.19999999999999996 },
5304 { 0.98786011482678993, 1.0000000000000000, 0.50000000000000000,
5305 4.0000000000000000, -0.099999999999999978 },
5306 { 1.0000000000000000, 1.0000000000000000, 0.50000000000000000,
5307 4.0000000000000000, 0.0000000000000000 },
5308 { 1.0128914530682316, 1.0000000000000000, 0.50000000000000000,
5309 4.0000000000000000, 0.10000000000000009 },
5310 { 1.0266391040215350, 1.0000000000000000, 0.50000000000000000,
5311 4.0000000000000000, 0.19999999999999996 },
5312 { 1.0413732738729464, 1.0000000000000000, 0.50000000000000000,
5313 4.0000000000000000, 0.30000000000000004 },
5314 { 1.0572599536532992, 1.0000000000000000, 0.50000000000000000,
5315 4.0000000000000000, 0.39999999999999991 },
5316 { 1.0745166004060953, 1.0000000000000000, 0.50000000000000000,
5317 4.0000000000000000, 0.50000000000000000 },
5318 { 1.0934387388831386, 1.0000000000000000, 0.50000000000000000,
5319 4.0000000000000000, 0.60000000000000009 },
5320 { 1.1144486980714641, 1.0000000000000000, 0.50000000000000000,
5321 4.0000000000000000, 0.69999999999999996 },
5322 { 1.1381966011250106, 1.0000000000000000, 0.50000000000000000,
5323 4.0000000000000000, 0.80000000000000004 },
5324 { 1.1658171625342397, 1.0000000000000000, 0.50000000000000000,
5325 4.0000000000000000, 0.89999999999999991 },
5326 };
5327
5328 // Test function for a=1.0000000000000000, b=0.50000000000000000, c=4.0000000000000000.
5329 template <typename Tp>
5330 void test077()
5331 {
5332 const Tp eps = std::numeric_limits<Tp>::epsilon();
5333 Tp max_abs_diff = -Tp(1);
5334 Tp max_abs_frac = -Tp(1);
5335 unsigned int num_datum = sizeof(data077)
5336 / sizeof(testcase_hyperg<double>);
5337 for (unsigned int i = 0; i < num_datum; ++i)
5338 {
5339 const Tp f = std::tr1::hyperg(Tp(data077[i].a), Tp(data077[i].b),
5340 Tp(data077[i].c), Tp(data077[i].x));
5341 const Tp f0 = data077[i].f0;
5342 const Tp diff = f - f0;
5343 if (std::abs(diff) > max_abs_diff)
5344 max_abs_diff = std::abs(diff);
5345 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
5346 {
5347 const Tp frac = diff / f0;
5348 if (std::abs(frac) > max_abs_frac)
5349 max_abs_frac = std::abs(frac);
5350 }
5351 }
5352 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5353 }
5354
5355 // Test data for a=1.0000000000000000, b=0.50000000000000000, c=6.0000000000000000.
5356 testcase_hyperg<double> data078[] = {
5357 { 0.93641908369732885, 1.0000000000000000, 0.50000000000000000,
5358 6.0000000000000000, -0.90000000000000002 },
5359 { 0.94256349654111315, 1.0000000000000000, 0.50000000000000000,
5360 6.0000000000000000, -0.80000000000000004 },
5361 { 0.94890138508461319, 1.0000000000000000, 0.50000000000000000,
5362 6.0000000000000000, -0.69999999999999996 },
5363 { 0.95544578858430007, 1.0000000000000000, 0.50000000000000000,
5364 6.0000000000000000, -0.59999999999999998 },
5365 { 0.96221121193620718, 1.0000000000000000, 0.50000000000000000,
5366 6.0000000000000000, -0.50000000000000000 },
5367 { 0.96921386948293542, 1.0000000000000000, 0.50000000000000000,
5368 6.0000000000000000, -0.40000000000000002 },
5369 { 0.97647198488394704, 1.0000000000000000, 0.50000000000000000,
5370 6.0000000000000000, -0.30000000000000004 },
5371 { 0.98400616412578656, 1.0000000000000000, 0.50000000000000000,
5372 6.0000000000000000, -0.19999999999999996 },
5373 { 0.99183986544963032, 1.0000000000000000, 0.50000000000000000,
5374 6.0000000000000000, -0.099999999999999978 },
5375 { 1.0000000000000000, 1.0000000000000000, 0.50000000000000000,
5376 6.0000000000000000, 0.0000000000000000 },
5377 { 1.0085177124149158, 1.0000000000000000, 0.50000000000000000,
5378 6.0000000000000000, 0.10000000000000009 },
5379 { 1.0174294150407122, 1.0000000000000000, 0.50000000000000000,
5380 6.0000000000000000, 0.19999999999999996 },
5381 { 1.0267781897388850, 1.0000000000000000, 0.50000000000000000,
5382 6.0000000000000000, 0.30000000000000004 },
5383 { 1.0366157405967285, 1.0000000000000000, 0.50000000000000000,
5384 6.0000000000000000, 0.39999999999999991 },
5385 { 1.0470052068648839, 1.0000000000000000, 0.50000000000000000,
5386 6.0000000000000000, 0.50000000000000000 },
5387 { 1.0580253905513313, 1.0000000000000000, 0.50000000000000000,
5388 6.0000000000000000, 0.60000000000000009 },
5389 { 1.0697774741209765, 1.0000000000000000, 0.50000000000000000,
5390 6.0000000000000000, 0.69999999999999996 },
5391 { 1.0823965556448414, 1.0000000000000000, 0.50000000000000000,
5392 6.0000000000000000, 0.80000000000000004 },
5393 { 1.0960739512057103, 1.0000000000000000, 0.50000000000000000,
5394 6.0000000000000000, 0.89999999999999991 },
5395 };
5396
5397 // Test function for a=1.0000000000000000, b=0.50000000000000000, c=6.0000000000000000.
5398 template <typename Tp>
5399 void test078()
5400 {
5401 const Tp eps = std::numeric_limits<Tp>::epsilon();
5402 Tp max_abs_diff = -Tp(1);
5403 Tp max_abs_frac = -Tp(1);
5404 unsigned int num_datum = sizeof(data078)
5405 / sizeof(testcase_hyperg<double>);
5406 for (unsigned int i = 0; i < num_datum; ++i)
5407 {
5408 const Tp f = std::tr1::hyperg(Tp(data078[i].a), Tp(data078[i].b),
5409 Tp(data078[i].c), Tp(data078[i].x));
5410 const Tp f0 = data078[i].f0;
5411 const Tp diff = f - f0;
5412 if (std::abs(diff) > max_abs_diff)
5413 max_abs_diff = std::abs(diff);
5414 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
5415 {
5416 const Tp frac = diff / f0;
5417 if (std::abs(frac) > max_abs_frac)
5418 max_abs_frac = std::abs(frac);
5419 }
5420 }
5421 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5422 }
5423
5424 // Test data for a=1.0000000000000000, b=0.50000000000000000, c=8.0000000000000000.
5425 testcase_hyperg<double> data079[] = {
5426 { 0.95069883346936235, 1.0000000000000000, 0.50000000000000000,
5427 8.0000000000000000, -0.90000000000000002 },
5428 { 0.95559618047704165, 1.0000000000000000, 0.50000000000000000,
5429 8.0000000000000000, -0.80000000000000004 },
5430 { 0.96061938755931653, 1.0000000000000000, 0.50000000000000000,
5431 8.0000000000000000, -0.69999999999999996 },
5432 { 0.96577553912851344, 1.0000000000000000, 0.50000000000000000,
5433 8.0000000000000000, -0.59999999999999998 },
5434 { 0.97107239473807716, 1.0000000000000000, 0.50000000000000000,
5435 8.0000000000000000, -0.50000000000000000 },
5436 { 0.97651848528588503, 1.0000000000000000, 0.50000000000000000,
5437 8.0000000000000000, -0.40000000000000002 },
5438 { 0.98212322830227139, 1.0000000000000000, 0.50000000000000000,
5439 8.0000000000000000, -0.30000000000000004 },
5440 { 0.98789706736195781, 1.0000000000000000, 0.50000000000000000,
5441 8.0000000000000000, -0.19999999999999996 },
5442 { 0.99385164237825074, 1.0000000000000000, 0.50000000000000000,
5443 8.0000000000000000, -0.099999999999999978 },
5444 { 1.0000000000000000, 1.0000000000000000, 0.50000000000000000,
5445 8.0000000000000000, 0.0000000000000000 },
5446 { 1.0063568569383123, 1.0000000000000000, 0.50000000000000000,
5447 8.0000000000000000, 0.10000000000000009 },
5448 { 1.0129389344715818, 1.0000000000000000, 0.50000000000000000,
5449 8.0000000000000000, 0.19999999999999996 },
5450 { 1.0197653907773940, 1.0000000000000000, 0.50000000000000000,
5451 8.0000000000000000, 0.30000000000000004 },
5452 { 1.0268583912277143, 1.0000000000000000, 0.50000000000000000,
5453 8.0000000000000000, 0.39999999999999991 },
5454 { 1.0342438793937092, 1.0000000000000000, 0.50000000000000000,
5455 8.0000000000000000, 0.50000000000000000 },
5456 { 1.0419526514766855, 1.0000000000000000, 0.50000000000000000,
5457 8.0000000000000000, 0.60000000000000009 },
5458 { 1.0500219124976327, 1.0000000000000000, 0.50000000000000000,
5459 8.0000000000000000, 0.69999999999999996 },
5460 { 1.0584976491907043, 1.0000000000000000, 0.50000000000000000,
5461 8.0000000000000000, 0.80000000000000004 },
5462 { 1.0674385240268101, 1.0000000000000000, 0.50000000000000000,
5463 8.0000000000000000, 0.89999999999999991 },
5464 };
5465
5466 // Test function for a=1.0000000000000000, b=0.50000000000000000, c=8.0000000000000000.
5467 template <typename Tp>
5468 void test079()
5469 {
5470 const Tp eps = std::numeric_limits<Tp>::epsilon();
5471 Tp max_abs_diff = -Tp(1);
5472 Tp max_abs_frac = -Tp(1);
5473 unsigned int num_datum = sizeof(data079)
5474 / sizeof(testcase_hyperg<double>);
5475 for (unsigned int i = 0; i < num_datum; ++i)
5476 {
5477 const Tp f = std::tr1::hyperg(Tp(data079[i].a), Tp(data079[i].b),
5478 Tp(data079[i].c), Tp(data079[i].x));
5479 const Tp f0 = data079[i].f0;
5480 const Tp diff = f - f0;
5481 if (std::abs(diff) > max_abs_diff)
5482 max_abs_diff = std::abs(diff);
5483 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
5484 {
5485 const Tp frac = diff / f0;
5486 if (std::abs(frac) > max_abs_frac)
5487 max_abs_frac = std::abs(frac);
5488 }
5489 }
5490 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5491 }
5492
5493 // Test data for a=1.0000000000000000, b=0.50000000000000000, c=10.000000000000000.
5494 testcase_hyperg<double> data080[] = {
5495 { 0.95968319138913893, 1.0000000000000000, 0.50000000000000000,
5496 10.000000000000000, -0.90000000000000002 },
5497 { 0.96376169072755768, 1.0000000000000000, 0.50000000000000000,
5498 10.000000000000000, -0.80000000000000004 },
5499 { 0.96792900082729316, 1.0000000000000000, 0.50000000000000000,
5500 10.000000000000000, -0.69999999999999996 },
5501 { 0.97218942798115737, 1.0000000000000000, 0.50000000000000000,
5502 10.000000000000000, -0.59999999999999998 },
5503 { 0.97654763592586857, 1.0000000000000000, 0.50000000000000000,
5504 10.000000000000000, -0.50000000000000000 },
5505 { 0.98100869054353856, 1.0000000000000000, 0.50000000000000000,
5506 10.000000000000000, -0.40000000000000002 },
5507 { 0.98557811238699278, 1.0000000000000000, 0.50000000000000000,
5508 10.000000000000000, -0.30000000000000004 },
5509 { 0.99026193885795544, 1.0000000000000000, 0.50000000000000000,
5510 10.000000000000000, -0.19999999999999996 },
5511 { 0.99506679842072221, 1.0000000000000000, 0.50000000000000000,
5512 10.000000000000000, -0.099999999999999978 },
5513 { 1.0000000000000000, 1.0000000000000000, 0.50000000000000000,
5514 10.000000000000000, 0.0000000000000000 },
5515 { 1.0050696417919618, 1.0000000000000000, 0.50000000000000000,
5516 10.000000000000000, 0.10000000000000009 },
5517 { 1.0102847452747090, 1.0000000000000000, 0.50000000000000000,
5518 10.000000000000000, 0.19999999999999996 },
5519 { 1.0156554225057022, 1.0000000000000000, 0.50000000000000000,
5520 10.000000000000000, 0.30000000000000004 },
5521 { 1.0211930882963096, 1.0000000000000000, 0.50000000000000000,
5522 10.000000000000000, 0.39999999999999991 },
5523 { 1.0269107343740711, 1.0000000000000000, 0.50000000000000000,
5524 10.000000000000000, 0.50000000000000000 },
5525 { 1.0328232917216298, 1.0000000000000000, 0.50000000000000000,
5526 10.000000000000000, 0.60000000000000009 },
5527 { 1.0389481230247195, 1.0000000000000000, 0.50000000000000000,
5528 10.000000000000000, 0.69999999999999996 },
5529 { 1.0453057164134614, 1.0000000000000000, 0.50000000000000000,
5530 10.000000000000000, 0.80000000000000004 },
5531 { 1.0519207114461246, 1.0000000000000000, 0.50000000000000000,
5532 10.000000000000000, 0.89999999999999991 },
5533 };
5534
5535 // Test function for a=1.0000000000000000, b=0.50000000000000000, c=10.000000000000000.
5536 template <typename Tp>
5537 void test080()
5538 {
5539 const Tp eps = std::numeric_limits<Tp>::epsilon();
5540 Tp max_abs_diff = -Tp(1);
5541 Tp max_abs_frac = -Tp(1);
5542 unsigned int num_datum = sizeof(data080)
5543 / sizeof(testcase_hyperg<double>);
5544 for (unsigned int i = 0; i < num_datum; ++i)
5545 {
5546 const Tp f = std::tr1::hyperg(Tp(data080[i].a), Tp(data080[i].b),
5547 Tp(data080[i].c), Tp(data080[i].x));
5548 const Tp f0 = data080[i].f0;
5549 const Tp diff = f - f0;
5550 if (std::abs(diff) > max_abs_diff)
5551 max_abs_diff = std::abs(diff);
5552 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
5553 {
5554 const Tp frac = diff / f0;
5555 if (std::abs(frac) > max_abs_frac)
5556 max_abs_frac = std::abs(frac);
5557 }
5558 }
5559 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5560 }
5561
5562 // Test data for a=1.0000000000000000, b=1.0000000000000000, c=2.0000000000000000.
5563 testcase_hyperg<double> data081[] = {
5564 { 0.71317098463599404, 1.0000000000000000, 1.0000000000000000,
5565 2.0000000000000000, -0.90000000000000002 },
5566 { 0.73473333112764871, 1.0000000000000000, 1.0000000000000000,
5567 2.0000000000000000, -0.80000000000000004 },
5568 { 0.75804035866024377, 1.0000000000000000, 1.0000000000000000,
5569 2.0000000000000000, -0.69999999999999996 },
5570 { 0.78333938207622600, 1.0000000000000000, 1.0000000000000000,
5571 2.0000000000000000, -0.59999999999999998 },
5572 { 0.81093021621632877, 1.0000000000000000, 1.0000000000000000,
5573 2.0000000000000000, -0.50000000000000000 },
5574 { 0.84118059155303226, 1.0000000000000000, 1.0000000000000000,
5575 2.0000000000000000, -0.40000000000000002 },
5576 { 0.87454754822497005, 1.0000000000000000, 1.0000000000000000,
5577 2.0000000000000000, -0.30000000000000004 },
5578 { 0.91160778396977304, 1.0000000000000000, 1.0000000000000000,
5579 2.0000000000000000, -0.19999999999999996 },
5580 { 0.95310179804324857, 1.0000000000000000, 1.0000000000000000,
5581 2.0000000000000000, -0.099999999999999978 },
5582 { 1.0000000000000000, 1.0000000000000000, 1.0000000000000000,
5583 2.0000000000000000, 0.0000000000000000 },
5584 { 1.0536051565782629, 1.0000000000000000, 1.0000000000000000,
5585 2.0000000000000000, 0.10000000000000009 },
5586 { 1.1157177565710485, 1.0000000000000000, 1.0000000000000000,
5587 2.0000000000000000, 0.19999999999999996 },
5588 { 1.1889164797957747, 1.0000000000000000, 1.0000000000000000,
5589 2.0000000000000000, 0.30000000000000004 },
5590 { 1.2770640594149765, 1.0000000000000000, 1.0000000000000000,
5591 2.0000000000000000, 0.39999999999999991 },
5592 { 1.3862943611198899, 1.0000000000000000, 1.0000000000000000,
5593 2.0000000000000000, 0.50000000000000000 },
5594 { 1.5271512197902593, 1.0000000000000000, 1.0000000000000000,
5595 2.0000000000000000, 0.60000000000000009 },
5596 { 1.7199611490370503, 1.0000000000000000, 1.0000000000000000,
5597 2.0000000000000000, 0.69999999999999996 },
5598 { 2.0117973905426232, 1.0000000000000000, 1.0000000000000000,
5599 2.0000000000000000, 0.80000000000000004 },
5600 { 2.5584278811044912, 1.0000000000000000, 1.0000000000000000,
5601 2.0000000000000000, 0.89999999999999991 },
5602 };
5603
5604 // Test function for a=1.0000000000000000, b=1.0000000000000000, c=2.0000000000000000.
5605 template <typename Tp>
5606 void test081()
5607 {
5608 const Tp eps = std::numeric_limits<Tp>::epsilon();
5609 Tp max_abs_diff = -Tp(1);
5610 Tp max_abs_frac = -Tp(1);
5611 unsigned int num_datum = sizeof(data081)
5612 / sizeof(testcase_hyperg<double>);
5613 for (unsigned int i = 0; i < num_datum; ++i)
5614 {
5615 const Tp f = std::tr1::hyperg(Tp(data081[i].a), Tp(data081[i].b),
5616 Tp(data081[i].c), Tp(data081[i].x));
5617 const Tp f0 = data081[i].f0;
5618 const Tp diff = f - f0;
5619 if (std::abs(diff) > max_abs_diff)
5620 max_abs_diff = std::abs(diff);
5621 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
5622 {
5623 const Tp frac = diff / f0;
5624 if (std::abs(frac) > max_abs_frac)
5625 max_abs_frac = std::abs(frac);
5626 }
5627 }
5628 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5629 }
5630
5631 // Test data for a=1.0000000000000000, b=1.0000000000000000, c=4.0000000000000000.
5632 testcase_hyperg<double> data082[] = {
5633 { 0.83165649828125576, 1.0000000000000000, 1.0000000000000000,
5634 4.0000000000000000, -0.90000000000000002 },
5635 { 0.84626246650116577, 1.0000000000000000, 1.0000000000000000,
5636 4.0000000000000000, -0.80000000000000004 },
5637 { 0.86165287670267410, 1.0000000000000000, 1.0000000000000000,
5638 4.0000000000000000, -0.69999999999999996 },
5639 { 0.87790681762615241, 1.0000000000000000, 1.0000000000000000,
5640 4.0000000000000000, -0.59999999999999998 },
5641 { 0.89511583784087689, 1.0000000000000000, 1.0000000000000000,
5642 4.0000000000000000, -0.50000000000000000 },
5643 { 0.91338673957393823, 1.0000000000000000, 1.0000000000000000,
5644 4.0000000000000000, -0.40000000000000002 },
5645 { 0.93284521667331954, 1.0000000000000000, 1.0000000000000000,
5646 4.0000000000000000, -0.30000000000000004 },
5647 { 0.95364066873549813, 1.0000000000000000, 1.0000000000000000,
5648 4.0000000000000000, -0.19999999999999996 },
5649 { 0.97595268969924187, 1.0000000000000000, 1.0000000000000000,
5650 4.0000000000000000, -0.099999999999999978 },
5651 { 1.0000000000000000, 1.0000000000000000, 1.0000000000000000,
5652 4.0000000000000000, 0.0000000000000000 },
5653 { 1.0260530485179122, 1.0000000000000000, 1.0000000000000000,
5654 4.0000000000000000, 0.10000000000000009 },
5655 { 1.0544523154103413, 1.0000000000000000, 1.0000000000000000,
5656 4.0000000000000000, 0.19999999999999996 },
5657 { 1.0856358366643180, 1.0000000000000000, 1.0000000000000000,
5658 4.0000000000000000, 0.30000000000000004 },
5659 { 1.1201824010510930, 1.0000000000000000, 1.0000000000000000,
5660 4.0000000000000000, 0.39999999999999991 },
5661 { 1.1588830833596719, 1.0000000000000000, 1.0000000000000000,
5662 4.0000000000000000, 0.50000000000000000 },
5663 { 1.2028682930536780, 1.0000000000000000, 1.0000000000000000,
5664 4.0000000000000000, 0.60000000000000009 },
5665 { 1.2538561433469468, 1.0000000000000000, 1.0000000000000000,
5666 4.0000000000000000, 0.69999999999999996 },
5667 { 1.3147120107267418, 1.0000000000000000, 1.0000000000000000,
5668 4.0000000000000000, 0.80000000000000004 },
5669 { 1.3910528844853491, 1.0000000000000000, 1.0000000000000000,
5670 4.0000000000000000, 0.89999999999999991 },
5671 };
5672
5673 // Test function for a=1.0000000000000000, b=1.0000000000000000, c=4.0000000000000000.
5674 template <typename Tp>
5675 void test082()
5676 {
5677 const Tp eps = std::numeric_limits<Tp>::epsilon();
5678 Tp max_abs_diff = -Tp(1);
5679 Tp max_abs_frac = -Tp(1);
5680 unsigned int num_datum = sizeof(data082)
5681 / sizeof(testcase_hyperg<double>);
5682 for (unsigned int i = 0; i < num_datum; ++i)
5683 {
5684 const Tp f = std::tr1::hyperg(Tp(data082[i].a), Tp(data082[i].b),
5685 Tp(data082[i].c), Tp(data082[i].x));
5686 const Tp f0 = data082[i].f0;
5687 const Tp diff = f - f0;
5688 if (std::abs(diff) > max_abs_diff)
5689 max_abs_diff = std::abs(diff);
5690 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
5691 {
5692 const Tp frac = diff / f0;
5693 if (std::abs(frac) > max_abs_frac)
5694 max_abs_frac = std::abs(frac);
5695 }
5696 }
5697 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5698 }
5699
5700 // Test data for a=1.0000000000000000, b=1.0000000000000000, c=6.0000000000000000.
5701 testcase_hyperg<double> data083[] = {
5702 { 0.87917686994924527, 1.0000000000000000, 1.0000000000000000,
5703 6.0000000000000000, -0.90000000000000002 },
5704 { 0.89033956110358414, 1.0000000000000000, 1.0000000000000000,
5705 6.0000000000000000, -0.80000000000000004 },
5706 { 0.90196195126098366, 1.0000000000000000, 1.0000000000000000,
5707 6.0000000000000000, -0.69999999999999996 },
5708 { 0.91408080149514692, 1.0000000000000000, 1.0000000000000000,
5709 6.0000000000000000, -0.59999999999999998 },
5710 { 0.92673756761314952, 1.0000000000000000, 1.0000000000000000,
5711 6.0000000000000000, -0.50000000000000000 },
5712 { 0.93997926630123407, 1.0000000000000000, 1.0000000000000000,
5713 6.0000000000000000, -0.40000000000000002 },
5714 { 0.95385955885019291, 1.0000000000000000, 1.0000000000000000,
5715 6.0000000000000000, -0.30000000000000004 },
5716 { 0.96844012412988900, 1.0000000000000000, 1.0000000000000000,
5717 6.0000000000000000, -0.19999999999999996 },
5718 { 0.98379242268046208, 1.0000000000000000, 1.0000000000000000,
5719 6.0000000000000000, -0.099999999999999978 },
5720 { 1.0000000000000000, 1.0000000000000000, 1.0000000000000000,
5721 6.0000000000000000, 0.0000000000000000 },
5722 { 1.0171615499181177, 1.0000000000000000, 1.0000000000000000,
5723 6.0000000000000000, 0.10000000000000009 },
5724 { 1.0353950776091037, 1.0000000000000000, 1.0000000000000000,
5725 6.0000000000000000, 0.19999999999999996 },
5726 { 1.0548437030651112, 1.0000000000000000, 1.0000000000000000,
5727 6.0000000000000000, 0.30000000000000004 },
5728 { 1.0756840039415978, 1.0000000000000000, 1.0000000000000000,
5729 6.0000000000000000, 0.39999999999999991 },
5730 { 1.0981384722661196, 1.0000000000000000, 1.0000000000000000,
5731 6.0000000000000000, 0.50000000000000000 },
5732 { 1.1224950318916129, 1.0000000000000000, 1.0000000000000000,
5733 6.0000000000000000, 0.60000000000000009 },
5734 { 1.1491396357184527, 1.0000000000000000, 1.0000000000000000,
5735 6.0000000000000000, 0.69999999999999996 },
5736 { 1.1786158344507012, 1.0000000000000000, 1.0000000000000000,
5737 6.0000000000000000, 0.80000000000000004 },
5738 { 1.2117500593515478, 1.0000000000000000, 1.0000000000000000,
5739 6.0000000000000000, 0.89999999999999991 },
5740 };
5741
5742 // Test function for a=1.0000000000000000, b=1.0000000000000000, c=6.0000000000000000.
5743 template <typename Tp>
5744 void test083()
5745 {
5746 const Tp eps = std::numeric_limits<Tp>::epsilon();
5747 Tp max_abs_diff = -Tp(1);
5748 Tp max_abs_frac = -Tp(1);
5749 unsigned int num_datum = sizeof(data083)
5750 / sizeof(testcase_hyperg<double>);
5751 for (unsigned int i = 0; i < num_datum; ++i)
5752 {
5753 const Tp f = std::tr1::hyperg(Tp(data083[i].a), Tp(data083[i].b),
5754 Tp(data083[i].c), Tp(data083[i].x));
5755 const Tp f0 = data083[i].f0;
5756 const Tp diff = f - f0;
5757 if (std::abs(diff) > max_abs_diff)
5758 max_abs_diff = std::abs(diff);
5759 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
5760 {
5761 const Tp frac = diff / f0;
5762 if (std::abs(frac) > max_abs_frac)
5763 max_abs_frac = std::abs(frac);
5764 }
5765 }
5766 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5767 }
5768
5769 // Test data for a=1.0000000000000000, b=1.0000000000000000, c=8.0000000000000000.
5770 testcase_hyperg<double> data084[] = {
5771 { 0.90538259348578409, 1.0000000000000000, 1.0000000000000000,
5772 8.0000000000000000, -0.90000000000000002 },
5773 { 0.91444830598832050, 1.0000000000000000, 1.0000000000000000,
5774 8.0000000000000000, -0.80000000000000004 },
5775 { 0.92381915945974002, 1.0000000000000000, 1.0000000000000000,
5776 8.0000000000000000, -0.69999999999999996 },
5777 { 0.93351553488501815, 1.0000000000000000, 1.0000000000000000,
5778 8.0000000000000000, -0.59999999999999998 },
5779 { 0.94356001859234884, 1.0000000000000000, 1.0000000000000000,
5780 8.0000000000000000, -0.50000000000000000 },
5781 { 0.95397775039949584, 1.0000000000000000, 1.0000000000000000,
5782 8.0000000000000000, -0.40000000000000002 },
5783 { 0.96479684710618019, 1.0000000000000000, 1.0000000000000000,
5784 8.0000000000000000, -0.30000000000000004 },
5785 { 0.97604892281308531, 1.0000000000000000, 1.0000000000000000,
5786 8.0000000000000000, -0.19999999999999996 },
5787 { 0.98776973540356938, 1.0000000000000000, 1.0000000000000000,
5788 8.0000000000000000, -0.099999999999999978 },
5789 { 1.0000000000000000, 1.0000000000000000, 1.0000000000000000,
5790 8.0000000000000000, 0.0000000000000000 },
5791 { 1.0127864273812119, 1.0000000000000000, 1.0000000000000000,
5792 8.0000000000000000, 0.10000000000000009 },
5793 { 1.0261830717772533, 1.0000000000000000, 1.0000000000000000,
5794 8.0000000000000000, 0.19999999999999996 },
5795 { 1.0402531144740719, 1.0000000000000000, 1.0000000000000000,
5796 8.0000000000000000, 0.30000000000000004 },
5797 { 1.0550712790827002, 1.0000000000000000, 1.0000000000000000,
5798 8.0000000000000000, 0.39999999999999991 },
5799 { 1.0707271945059007, 1.0000000000000000, 1.0000000000000000,
5800 8.0000000000000000, 0.50000000000000000 },
5801 { 1.0873302420658923, 1.0000000000000000, 1.0000000000000000,
5802 8.0000000000000000, 0.60000000000000009 },
5803 { 1.1050168587085545, 1.0000000000000000, 1.0000000000000000,
5804 8.0000000000000000, 0.69999999999999996 },
5805 { 1.1239622188477687, 1.0000000000000000, 1.0000000000000000,
5806 8.0000000000000000, 0.80000000000000004 },
5807 { 1.1444006183097781, 1.0000000000000000, 1.0000000000000000,
5808 8.0000000000000000, 0.89999999999999991 },
5809 };
5810
5811 // Test function for a=1.0000000000000000, b=1.0000000000000000, c=8.0000000000000000.
5812 template <typename Tp>
5813 void test084()
5814 {
5815 const Tp eps = std::numeric_limits<Tp>::epsilon();
5816 Tp max_abs_diff = -Tp(1);
5817 Tp max_abs_frac = -Tp(1);
5818 unsigned int num_datum = sizeof(data084)
5819 / sizeof(testcase_hyperg<double>);
5820 for (unsigned int i = 0; i < num_datum; ++i)
5821 {
5822 const Tp f = std::tr1::hyperg(Tp(data084[i].a), Tp(data084[i].b),
5823 Tp(data084[i].c), Tp(data084[i].x));
5824 const Tp f0 = data084[i].f0;
5825 const Tp diff = f - f0;
5826 if (std::abs(diff) > max_abs_diff)
5827 max_abs_diff = std::abs(diff);
5828 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
5829 {
5830 const Tp frac = diff / f0;
5831 if (std::abs(frac) > max_abs_frac)
5832 max_abs_frac = std::abs(frac);
5833 }
5834 }
5835 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5836 }
5837
5838 // Test data for a=1.0000000000000000, b=1.0000000000000000, c=10.000000000000000.
5839 testcase_hyperg<double> data085[] = {
5840 { 0.92211295632330403, 1.0000000000000000, 1.0000000000000000,
5841 10.000000000000000, -0.90000000000000002 },
5842 { 0.92975727737040659, 1.0000000000000000, 1.0000000000000000,
5843 10.000000000000000, -0.80000000000000004 },
5844 { 0.93761992348333467, 1.0000000000000000, 1.0000000000000000,
5845 10.000000000000000, -0.69999999999999996 },
5846 { 0.94571346180587801, 1.0000000000000000, 1.0000000000000000,
5847 10.000000000000000, -0.59999999999999998 },
5848 { 0.95405164371146867, 1.0000000000000000, 1.0000000000000000,
5849 10.000000000000000, -0.50000000000000000 },
5850 { 0.96264956879205954, 1.0000000000000000, 1.0000000000000000,
5851 10.000000000000000, -0.40000000000000002 },
5852 { 0.97152388013493096, 1.0000000000000000, 1.0000000000000000,
5853 10.000000000000000, -0.30000000000000004 },
5854 { 0.98069299877709348, 1.0000000000000000, 1.0000000000000000,
5855 10.000000000000000, -0.19999999999999996 },
5856 { 0.99017740778385854, 1.0000000000000000, 1.0000000000000000,
5857 10.000000000000000, -0.099999999999999978 },
5858 { 1.0000000000000000, 1.0000000000000000, 1.0000000000000000,
5859 10.000000000000000, 0.0000000000000000 },
5860 { 1.0101865087004833, 1.0000000000000000, 1.0000000000000000,
5861 10.000000000000000, 0.10000000000000009 },
5862 { 1.0207660479892111, 1.0000000000000000, 1.0000000000000000,
5863 10.000000000000000, 0.19999999999999996 },
5864 { 1.0317718013185031, 1.0000000000000000, 1.0000000000000000,
5865 10.000000000000000, 0.30000000000000004 },
5866 { 1.0432419144892398, 1.0000000000000000, 1.0000000000000000,
5867 10.000000000000000, 0.39999999999999991 },
5868 { 1.0552206786504446, 1.0000000000000000, 1.0000000000000000,
5869 10.000000000000000, 0.50000000000000000 },
5870 { 1.0677601383233675, 1.0000000000000000, 1.0000000000000000,
5871 10.000000000000000, 0.60000000000000009 },
5872 { 1.0809223485579968, 1.0000000000000000, 1.0000000000000000,
5873 10.000000000000000, 0.69999999999999996 },
5874 { 1.0947826783002668, 1.0000000000000000, 1.0000000000000000,
5875 10.000000000000000, 0.80000000000000004 },
5876 { 1.1094349304493603, 1.0000000000000000, 1.0000000000000000,
5877 10.000000000000000, 0.89999999999999991 },
5878 };
5879
5880 // Test function for a=1.0000000000000000, b=1.0000000000000000, c=10.000000000000000.
5881 template <typename Tp>
5882 void test085()
5883 {
5884 const Tp eps = std::numeric_limits<Tp>::epsilon();
5885 Tp max_abs_diff = -Tp(1);
5886 Tp max_abs_frac = -Tp(1);
5887 unsigned int num_datum = sizeof(data085)
5888 / sizeof(testcase_hyperg<double>);
5889 for (unsigned int i = 0; i < num_datum; ++i)
5890 {
5891 const Tp f = std::tr1::hyperg(Tp(data085[i].a), Tp(data085[i].b),
5892 Tp(data085[i].c), Tp(data085[i].x));
5893 const Tp f0 = data085[i].f0;
5894 const Tp diff = f - f0;
5895 if (std::abs(diff) > max_abs_diff)
5896 max_abs_diff = std::abs(diff);
5897 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
5898 {
5899 const Tp frac = diff / f0;
5900 if (std::abs(frac) > max_abs_frac)
5901 max_abs_frac = std::abs(frac);
5902 }
5903 }
5904 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5905 }
5906
5907 // Test data for a=1.0000000000000000, b=2.0000000000000000, c=2.0000000000000000.
5908 testcase_hyperg<double> data086[] = {
5909 { 0.52631578947368429, 1.0000000000000000, 2.0000000000000000,
5910 2.0000000000000000, -0.90000000000000002 },
5911 { 0.55555555555555558, 1.0000000000000000, 2.0000000000000000,
5912 2.0000000000000000, -0.80000000000000004 },
5913 { 0.58823529411764708, 1.0000000000000000, 2.0000000000000000,
5914 2.0000000000000000, -0.69999999999999996 },
5915 { 0.62500000000000000, 1.0000000000000000, 2.0000000000000000,
5916 2.0000000000000000, -0.59999999999999998 },
5917 { 0.66666666666666663, 1.0000000000000000, 2.0000000000000000,
5918 2.0000000000000000, -0.50000000000000000 },
5919 { 0.71428571428571430, 1.0000000000000000, 2.0000000000000000,
5920 2.0000000000000000, -0.40000000000000002 },
5921 { 0.76923076923076927, 1.0000000000000000, 2.0000000000000000,
5922 2.0000000000000000, -0.30000000000000004 },
5923 { 0.83333333333333337, 1.0000000000000000, 2.0000000000000000,
5924 2.0000000000000000, -0.19999999999999996 },
5925 { 0.90909090909090906, 1.0000000000000000, 2.0000000000000000,
5926 2.0000000000000000, -0.099999999999999978 },
5927 { 1.0000000000000000, 1.0000000000000000, 2.0000000000000000,
5928 2.0000000000000000, 0.0000000000000000 },
5929 { 1.1111111111111112, 1.0000000000000000, 2.0000000000000000,
5930 2.0000000000000000, 0.10000000000000009 },
5931 { 1.2500000000000000, 1.0000000000000000, 2.0000000000000000,
5932 2.0000000000000000, 0.19999999999999996 },
5933 { 1.4285714285714286, 1.0000000000000000, 2.0000000000000000,
5934 2.0000000000000000, 0.30000000000000004 },
5935 { 1.6666666666666663, 1.0000000000000000, 2.0000000000000000,
5936 2.0000000000000000, 0.39999999999999991 },
5937 { 2.0000000000000000, 1.0000000000000000, 2.0000000000000000,
5938 2.0000000000000000, 0.50000000000000000 },
5939 { 2.5000000000000004, 1.0000000000000000, 2.0000000000000000,
5940 2.0000000000000000, 0.60000000000000009 },
5941 { 3.3333333333333330, 1.0000000000000000, 2.0000000000000000,
5942 2.0000000000000000, 0.69999999999999996 },
5943 { 5.0000000000000009, 1.0000000000000000, 2.0000000000000000,
5944 2.0000000000000000, 0.80000000000000004 },
5945 { 9.9999999999999929, 1.0000000000000000, 2.0000000000000000,
5946 2.0000000000000000, 0.89999999999999991 },
5947 };
5948
5949 // Test function for a=1.0000000000000000, b=2.0000000000000000, c=2.0000000000000000.
5950 template <typename Tp>
5951 void test086()
5952 {
5953 const Tp eps = std::numeric_limits<Tp>::epsilon();
5954 Tp max_abs_diff = -Tp(1);
5955 Tp max_abs_frac = -Tp(1);
5956 unsigned int num_datum = sizeof(data086)
5957 / sizeof(testcase_hyperg<double>);
5958 for (unsigned int i = 0; i < num_datum; ++i)
5959 {
5960 const Tp f = std::tr1::hyperg(Tp(data086[i].a), Tp(data086[i].b),
5961 Tp(data086[i].c), Tp(data086[i].x));
5962 const Tp f0 = data086[i].f0;
5963 const Tp diff = f - f0;
5964 if (std::abs(diff) > max_abs_diff)
5965 max_abs_diff = std::abs(diff);
5966 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
5967 {
5968 const Tp frac = diff / f0;
5969 if (std::abs(frac) > max_abs_frac)
5970 max_abs_frac = std::abs(frac);
5971 }
5972 }
5973 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5974 }
5975
5976 // Test data for a=1.0000000000000000, b=2.0000000000000000, c=4.0000000000000000.
5977 testcase_hyperg<double> data087[] = {
5978 { 0.70351947549341520, 1.0000000000000000, 2.0000000000000000,
5979 4.0000000000000000, -0.90000000000000002 },
5980 { 0.72637503722092711, 1.0000000000000000, 2.0000000000000000,
5981 4.0000000000000000, -0.80000000000000004 },
5982 { 0.75099661564391251, 1.0000000000000000, 2.0000000000000000,
5983 4.0000000000000000, -0.69999999999999996 },
5984 { 0.77761647796730871, 1.0000000000000000, 2.0000000000000000,
5985 4.0000000000000000, -0.59999999999999998 },
5986 { 0.80651221621216451, 1.0000000000000000, 2.0000000000000000,
5987 4.0000000000000000, -0.50000000000000000 },
5988 { 0.83801894346580275, 1.0000000000000000, 2.0000000000000000,
5989 4.0000000000000000, -0.40000000000000002 },
5990 { 0.87254582050258467, 1.0000000000000000, 2.0000000000000000,
5991 4.0000000000000000, -0.30000000000000004 },
5992 { 0.91059888544083678, 1.0000000000000000, 2.0000000000000000,
5993 4.0000000000000000, -0.19999999999999996 },
5994 { 0.95281329145592386, 1.0000000000000000, 2.0000000000000000,
5995 4.0000000000000000, -0.099999999999999978 },
5996 { 1.0000000000000000, 1.0000000000000000, 2.0000000000000000,
5997 4.0000000000000000, 0.0000000000000000 },
5998 { 1.0532154477379738, 1.0000000000000000, 2.0000000000000000,
5999 4.0000000000000000, 0.10000000000000009 },
6000 { 1.1138692114741471, 1.0000000000000000, 2.0000000000000000,
6001 4.0000000000000000, 0.19999999999999996 },
6002 { 1.1838976095305187, 1.0000000000000000, 2.0000000000000000,
6003 4.0000000000000000, 0.30000000000000004 },
6004 { 1.2660586631630237, 1.0000000000000000, 2.0000000000000000,
6005 4.0000000000000000, 0.39999999999999991 },
6006 { 1.3644676665613118, 1.0000000000000000, 2.0000000000000000,
6007 4.0000000000000000, 0.50000000000000000 },
6008 { 1.4856585347316102, 1.0000000000000000, 2.0000000000000000,
6009 4.0000000000000000, 0.60000000000000009 },
6010 { 1.6409590443536872, 1.0000000000000000, 2.0000000000000000,
6011 4.0000000000000000, 0.69999999999999996 },
6012 { 1.8528798927325769, 1.0000000000000000, 2.0000000000000000,
6013 4.0000000000000000, 0.80000000000000004 },
6014 { 2.1789423102929644, 1.0000000000000000, 2.0000000000000000,
6015 4.0000000000000000, 0.89999999999999991 },
6016 };
6017
6018 // Test function for a=1.0000000000000000, b=2.0000000000000000, c=4.0000000000000000.
6019 template <typename Tp>
6020 void test087()
6021 {
6022 const Tp eps = std::numeric_limits<Tp>::epsilon();
6023 Tp max_abs_diff = -Tp(1);
6024 Tp max_abs_frac = -Tp(1);
6025 unsigned int num_datum = sizeof(data087)
6026 / sizeof(testcase_hyperg<double>);
6027 for (unsigned int i = 0; i < num_datum; ++i)
6028 {
6029 const Tp f = std::tr1::hyperg(Tp(data087[i].a), Tp(data087[i].b),
6030 Tp(data087[i].c), Tp(data087[i].x));
6031 const Tp f0 = data087[i].f0;
6032 const Tp diff = f - f0;
6033 if (std::abs(diff) > max_abs_diff)
6034 max_abs_diff = std::abs(diff);
6035 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
6036 {
6037 const Tp frac = diff / f0;
6038 if (std::abs(frac) > max_abs_frac)
6039 max_abs_frac = std::abs(frac);
6040 }
6041 }
6042 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6043 }
6044
6045 // Test data for a=1.0000000000000000, b=2.0000000000000000, c=6.0000000000000000.
6046 testcase_hyperg<double> data088[] = {
6047 { 0.78068027379106253, 1.0000000000000000, 2.0000000000000000,
6048 6.0000000000000000, -0.90000000000000002 },
6049 { 0.79924541976981278, 1.0000000000000000, 2.0000000000000000,
6050 6.0000000000000000, -0.80000000000000004 },
6051 { 0.81891305585650942, 1.0000000000000000, 2.0000000000000000,
6052 6.0000000000000000, -0.69999999999999996 },
6053 { 0.83979799626213270, 1.0000000000000000, 2.0000000000000000,
6054 6.0000000000000000, -0.59999999999999998 },
6055 { 0.86203315303160166, 1.0000000000000000, 2.0000000000000000,
6056 6.0000000000000000, -0.50000000000000000 },
6057 { 0.88577352485361693, 1.0000000000000000, 2.0000000000000000,
6058 6.0000000000000000, -0.40000000000000002 },
6059 { 0.91120135738402208, 1.0000000000000000, 2.0000000000000000,
6060 6.0000000000000000, -0.30000000000000004 },
6061 { 0.93853291956703588, 1.0000000000000000, 2.0000000000000000,
6062 6.0000000000000000, -0.19999999999999996 },
6063 { 0.96802755388922956, 1.0000000000000000, 2.0000000000000000,
6064 6.0000000000000000, -0.099999999999999978 },
6065 { 1.0000000000000000, 1.0000000000000000, 2.0000000000000000,
6066 6.0000000000000000, 0.0000000000000000 },
6067 { 1.0348375559194773, 1.0000000000000000, 2.0000000000000000,
6068 6.0000000000000000, 0.10000000000000009 },
6069 { 1.0730246119544820, 1.0000000000000000, 2.0000000000000000,
6070 6.0000000000000000, 0.19999999999999996 },
6071 { 1.1151788396279341, 1.0000000000000000, 2.0000000000000000,
6072 6.0000000000000000, 0.30000000000000004 },
6073 { 1.1621066403893472, 1.0000000000000000, 2.0000000000000000,
6074 6.0000000000000000, 0.39999999999999991 },
6075 { 1.2148922218710421, 1.0000000000000000, 2.0000000000000000,
6076 6.0000000000000000, 0.50000000000000000 },
6077 { 1.2750496810838674, 1.0000000000000000, 2.0000000000000000,
6078 6.0000000000000000, 0.60000000000000009 },
6079 { 1.3448048570872917, 1.0000000000000000, 2.0000000000000000,
6080 6.0000000000000000, 0.69999999999999996 },
6081 { 1.4276833109859521, 1.0000000000000000, 2.0000000000000000,
6082 6.0000000000000000, 0.80000000000000004 },
6083 { 1.5299976259379788, 1.0000000000000000, 2.0000000000000000,
6084 6.0000000000000000, 0.89999999999999991 },
6085 };
6086
6087 // Test function for a=1.0000000000000000, b=2.0000000000000000, c=6.0000000000000000.
6088 template <typename Tp>
6089 void test088()
6090 {
6091 const Tp eps = std::numeric_limits<Tp>::epsilon();
6092 Tp max_abs_diff = -Tp(1);
6093 Tp max_abs_frac = -Tp(1);
6094 unsigned int num_datum = sizeof(data088)
6095 / sizeof(testcase_hyperg<double>);
6096 for (unsigned int i = 0; i < num_datum; ++i)
6097 {
6098 const Tp f = std::tr1::hyperg(Tp(data088[i].a), Tp(data088[i].b),
6099 Tp(data088[i].c), Tp(data088[i].x));
6100 const Tp f0 = data088[i].f0;
6101 const Tp diff = f - f0;
6102 if (std::abs(diff) > max_abs_diff)
6103 max_abs_diff = std::abs(diff);
6104 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
6105 {
6106 const Tp frac = diff / f0;
6107 if (std::abs(frac) > max_abs_frac)
6108 max_abs_frac = std::abs(frac);
6109 }
6110 }
6111 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6112 }
6113
6114 // Test data for a=1.0000000000000000, b=2.0000000000000000, c=8.0000000000000000.
6115 testcase_hyperg<double> data089[] = {
6116 { 0.82510759951857582, 1.0000000000000000, 2.0000000000000000,
6117 8.0000000000000000, -0.90000000000000002 },
6118 { 0.84072786892782092, 1.0000000000000000, 2.0000000000000000,
6119 8.0000000000000000, -0.80000000000000004 },
6120 { 0.85710884896562356, 1.0000000000000000, 2.0000000000000000,
6121 8.0000000000000000, -0.69999999999999996 },
6122 { 0.87431674418118333, 1.0000000000000000, 2.0000000000000000,
6123 8.0000000000000000, -0.59999999999999998 },
6124 { 0.89242659229727017, 1.0000000000000000, 2.0000000000000000,
6125 8.0000000000000000, -0.50000000000000000 },
6126 { 0.91152392685930339, 1.0000000000000000, 2.0000000000000000,
6127 8.0000000000000000, -0.40000000000000002 },
6128 { 0.93170685950993570, 1.0000000000000000, 2.0000000000000000,
6129 8.0000000000000000, -0.30000000000000004 },
6130 { 0.95308871926790661, 1.0000000000000000, 2.0000000000000000,
6131 8.0000000000000000, -0.19999999999999996 },
6132 { 0.97580144325325802, 1.0000000000000000, 2.0000000000000000,
6133 8.0000000000000000, -0.099999999999999978 },
6134 { 1.0000000000000000, 1.0000000000000000, 2.0000000000000000,
6135 8.0000000000000000, 0.0000000000000000 },
6136 { 1.0258682619030324, 1.0000000000000000, 2.0000000000000000,
6137 8.0000000000000000, 0.10000000000000009 },
6138 { 1.0536269616706000, 1.0000000000000000, 2.0000000000000000,
6139 8.0000000000000000, 0.19999999999999996 },
6140 { 1.0835447330793833, 1.0000000000000000, 2.0000000000000000,
6141 8.0000000000000000, 0.30000000000000004 },
6142 { 1.1159538758396654, 1.0000000000000000, 2.0000000000000000,
6143 8.0000000000000000, 0.39999999999999991 },
6144 { 1.1512736659291880, 1.0000000000000000, 2.0000000000000000,
6145 8.0000000000000000, 0.50000000000000000 },
6146 { 1.1900463690116090, 1.0000000000000000, 2.0000000000000000,
6147 8.0000000000000000, 0.60000000000000009 },
6148 { 1.2329961591622411, 1.0000000000000000, 2.0000000000000000,
6149 8.0000000000000000, 0.69999999999999996 },
6150 { 1.2811334345669059, 1.0000000000000000, 2.0000000000000000,
6151 8.0000000000000000, 0.80000000000000004 },
6152 { 1.3359629014132051, 1.0000000000000000, 2.0000000000000000,
6153 8.0000000000000000, 0.89999999999999991 },
6154 };
6155
6156 // Test function for a=1.0000000000000000, b=2.0000000000000000, c=8.0000000000000000.
6157 template <typename Tp>
6158 void test089()
6159 {
6160 const Tp eps = std::numeric_limits<Tp>::epsilon();
6161 Tp max_abs_diff = -Tp(1);
6162 Tp max_abs_frac = -Tp(1);
6163 unsigned int num_datum = sizeof(data089)
6164 / sizeof(testcase_hyperg<double>);
6165 for (unsigned int i = 0; i < num_datum; ++i)
6166 {
6167 const Tp f = std::tr1::hyperg(Tp(data089[i].a), Tp(data089[i].b),
6168 Tp(data089[i].c), Tp(data089[i].x));
6169 const Tp f0 = data089[i].f0;
6170 const Tp diff = f - f0;
6171 if (std::abs(diff) > max_abs_diff)
6172 max_abs_diff = std::abs(diff);
6173 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
6174 {
6175 const Tp frac = diff / f0;
6176 if (std::abs(frac) > max_abs_frac)
6177 max_abs_frac = std::abs(frac);
6178 }
6179 }
6180 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6181 }
6182
6183 // Test data for a=1.0000000000000000, b=2.0000000000000000, c=10.000000000000000.
6184 testcase_hyperg<double> data090[] = {
6185 { 0.85426123653345876, 1.0000000000000000, 2.0000000000000000,
6186 10.000000000000000, -0.90000000000000002 },
6187 { 0.86774543390930370, 1.0000000000000000, 2.0000000000000000,
6188 10.000000000000000, -0.80000000000000004 },
6189 { 0.88178859537254239, 1.0000000000000000, 2.0000000000000000,
6190 10.000000000000000, -0.69999999999999996 },
6191 { 0.89643269097060951, 1.0000000000000000, 2.0000000000000000,
6192 10.000000000000000, -0.59999999999999998 },
6193 { 0.91172456687216763, 1.0000000000000000, 2.0000000000000000,
6194 10.000000000000000, -0.50000000000000000 },
6195 { 0.92771674975966134, 1.0000000000000000, 2.0000000000000000,
6196 10.000000000000000, -0.40000000000000002 },
6197 { 0.94446842993888647, 1.0000000000000000, 2.0000000000000000,
6198 10.000000000000000, -0.30000000000000004 },
6199 { 0.96204667481937678, 1.0000000000000000, 2.0000000000000000,
6200 10.000000000000000, -0.19999999999999996 },
6201 { 0.98052794339012128, 1.0000000000000000, 2.0000000000000000,
6202 10.000000000000000, -0.099999999999999978 },
6203 { 1.0000000000000000, 1.0000000000000000, 2.0000000000000000,
6204 10.000000000000000, 0.0000000000000000 },
6205 { 1.0205643671068179, 1.0000000000000000, 2.0000000000000000,
6206 10.000000000000000, 0.10000000000000009 },
6207 { 1.0423395201078882, 1.0000000000000000, 2.0000000000000000,
6208 10.000000000000000, 0.19999999999999996 },
6209 { 1.0654651277885334, 1.0000000000000000, 2.0000000000000000,
6210 10.000000000000000, 0.30000000000000004 },
6211 { 1.0901078068101382, 1.0000000000000000, 2.0000000000000000,
6212 10.000000000000000, 0.39999999999999991 },
6213 { 1.1164691415928940, 1.0000000000000000, 2.0000000000000000,
6214 10.000000000000000, 0.50000000000000000 },
6215 { 1.1447972335326551, 1.0000000000000000, 2.0000000000000000,
6216 10.000000000000000, 0.60000000000000009 },
6217 { 1.1754040384534161, 1.0000000000000000, 2.0000000000000000,
6218 10.000000000000000, 0.69999999999999996 },
6219 { 1.2086928679893112, 1.0000000000000000, 2.0000000000000000,
6220 10.000000000000000, 0.80000000000000004 },
6221 { 1.2452055640510711, 1.0000000000000000, 2.0000000000000000,
6222 10.000000000000000, 0.89999999999999991 },
6223 };
6224
6225 // Test function for a=1.0000000000000000, b=2.0000000000000000, c=10.000000000000000.
6226 template <typename Tp>
6227 void test090()
6228 {
6229 const Tp eps = std::numeric_limits<Tp>::epsilon();
6230 Tp max_abs_diff = -Tp(1);
6231 Tp max_abs_frac = -Tp(1);
6232 unsigned int num_datum = sizeof(data090)
6233 / sizeof(testcase_hyperg<double>);
6234 for (unsigned int i = 0; i < num_datum; ++i)
6235 {
6236 const Tp f = std::tr1::hyperg(Tp(data090[i].a), Tp(data090[i].b),
6237 Tp(data090[i].c), Tp(data090[i].x));
6238 const Tp f0 = data090[i].f0;
6239 const Tp diff = f - f0;
6240 if (std::abs(diff) > max_abs_diff)
6241 max_abs_diff = std::abs(diff);
6242 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
6243 {
6244 const Tp frac = diff / f0;
6245 if (std::abs(frac) > max_abs_frac)
6246 max_abs_frac = std::abs(frac);
6247 }
6248 }
6249 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6250 }
6251
6252 // Test data for a=1.0000000000000000, b=5.0000000000000000, c=2.0000000000000000.
6253 testcase_hyperg<double> data091[] = {
6254 { 0.25646288779245091, 1.0000000000000000, 5.0000000000000000,
6255 2.0000000000000000, -0.90000000000000002 },
6256 { 0.28273129096174382, 1.0000000000000000, 5.0000000000000000,
6257 2.0000000000000000, -0.80000000000000004 },
6258 { 0.31438201170962976, 1.0000000000000000, 5.0000000000000000,
6259 2.0000000000000000, -0.69999999999999996 },
6260 { 0.35308837890625017, 1.0000000000000000, 5.0000000000000000,
6261 2.0000000000000000, -0.59999999999999998 },
6262 { 0.40123456790123463, 1.0000000000000000, 5.0000000000000000,
6263 2.0000000000000000, -0.50000000000000000 },
6264 { 0.46230737192836319, 1.0000000000000000, 5.0000000000000000,
6265 2.0000000000000000, -0.40000000000000002 },
6266 { 0.54156016946185359, 1.0000000000000000, 5.0000000000000000,
6267 2.0000000000000000, -0.30000000000000004 },
6268 { 0.64718364197530875, 1.0000000000000000, 5.0000000000000000,
6269 2.0000000000000000, -0.19999999999999996 },
6270 { 0.79246636158732342, 1.0000000000000000, 5.0000000000000000,
6271 2.0000000000000000, -0.099999999999999978 },
6272 { 1.0000000000000000, 1.0000000000000000, 5.0000000000000000,
6273 2.0000000000000000, 0.0000000000000000 },
6274 { 1.3103947568968148, 1.0000000000000000, 5.0000000000000000,
6275 2.0000000000000000, 0.10000000000000009 },
6276 { 1.8017578125000004, 1.0000000000000000, 5.0000000000000000,
6277 2.0000000000000000, 0.19999999999999996 },
6278 { 2.6374427321949185, 1.0000000000000000, 5.0000000000000000,
6279 2.0000000000000000, 0.30000000000000004 },
6280 { 4.1975308641975282, 1.0000000000000000, 5.0000000000000000,
6281 2.0000000000000000, 0.39999999999999991 },
6282 { 7.4999999999999964, 1.0000000000000000, 5.0000000000000000,
6283 2.0000000000000000, 0.50000000000000000 },
6284 { 15.859375000000012, 1.0000000000000000, 5.0000000000000000,
6285 2.0000000000000000, 0.60000000000000009 },
6286 { 43.734567901234513, 1.0000000000000000, 5.0000000000000000,
6287 2.0000000000000000, 0.69999999999999996 },
6288 { 194.99999999999994, 1.0000000000000000, 5.0000000000000000,
6289 2.0000000000000000, 0.80000000000000004 },
6290 { 2777.4999999999832, 1.0000000000000000, 5.0000000000000000,
6291 2.0000000000000000, 0.89999999999999991 },
6292 };
6293
6294 // Test function for a=1.0000000000000000, b=5.0000000000000000, c=2.0000000000000000.
6295 template <typename Tp>
6296 void test091()
6297 {
6298 const Tp eps = std::numeric_limits<Tp>::epsilon();
6299 Tp max_abs_diff = -Tp(1);
6300 Tp max_abs_frac = -Tp(1);
6301 unsigned int num_datum = sizeof(data091)
6302 / sizeof(testcase_hyperg<double>);
6303 for (unsigned int i = 0; i < num_datum; ++i)
6304 {
6305 const Tp f = std::tr1::hyperg(Tp(data091[i].a), Tp(data091[i].b),
6306 Tp(data091[i].c), Tp(data091[i].x));
6307 const Tp f0 = data091[i].f0;
6308 const Tp diff = f - f0;
6309 if (std::abs(diff) > max_abs_diff)
6310 max_abs_diff = std::abs(diff);
6311 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
6312 {
6313 const Tp frac = diff / f0;
6314 if (std::abs(frac) > max_abs_frac)
6315 max_abs_frac = std::abs(frac);
6316 }
6317 }
6318 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6319 }
6320
6321 // Test data for a=1.0000000000000000, b=5.0000000000000000, c=4.0000000000000000.
6322 testcase_hyperg<double> data092[] = {
6323 { 0.46398891966759004, 1.0000000000000000, 5.0000000000000000,
6324 4.0000000000000000, -0.90000000000000002 },
6325 { 0.49382716049382713, 1.0000000000000000, 5.0000000000000000,
6326 4.0000000000000000, -0.80000000000000004 },
6327 { 0.52768166089965396, 1.0000000000000000, 5.0000000000000000,
6328 4.0000000000000000, -0.69999999999999996 },
6329 { 0.56640624999999978, 1.0000000000000000, 5.0000000000000000,
6330 4.0000000000000000, -0.59999999999999998 },
6331 { 0.61111111111111116, 1.0000000000000000, 5.0000000000000000,
6332 4.0000000000000000, -0.50000000000000000 },
6333 { 0.66326530612244894, 1.0000000000000000, 5.0000000000000000,
6334 4.0000000000000000, -0.40000000000000002 },
6335 { 0.72485207100591698, 1.0000000000000000, 5.0000000000000000,
6336 4.0000000000000000, -0.30000000000000004 },
6337 { 0.79861111111111094, 1.0000000000000000, 5.0000000000000000,
6338 4.0000000000000000, -0.19999999999999996 },
6339 { 0.88842975206611552, 1.0000000000000000, 5.0000000000000000,
6340 4.0000000000000000, -0.099999999999999978 },
6341 { 1.0000000000000000, 1.0000000000000000, 5.0000000000000000,
6342 4.0000000000000000, 0.0000000000000000 },
6343 { 1.1419753086419753, 1.0000000000000000, 5.0000000000000000,
6344 4.0000000000000000, 0.10000000000000009 },
6345 { 1.3281249999999998, 1.0000000000000000, 5.0000000000000000,
6346 4.0000000000000000, 0.19999999999999996 },
6347 { 1.5816326530612239, 1.0000000000000000, 5.0000000000000000,
6348 4.0000000000000000, 0.30000000000000004 },
6349 { 1.9444444444444444, 1.0000000000000000, 5.0000000000000000,
6350 4.0000000000000000, 0.39999999999999991 },
6351 { 2.5000000000000000, 1.0000000000000000, 5.0000000000000000,
6352 4.0000000000000000, 0.50000000000000000 },
6353 { 3.4374999999999996, 1.0000000000000000, 5.0000000000000000,
6354 4.0000000000000000, 0.60000000000000009 },
6355 { 5.2777777777777715, 1.0000000000000000, 5.0000000000000000,
6356 4.0000000000000000, 0.69999999999999996 },
6357 { 9.9999999999999947, 1.0000000000000000, 5.0000000000000000,
6358 4.0000000000000000, 0.80000000000000004 },
6359 { 32.499999999999837, 1.0000000000000000, 5.0000000000000000,
6360 4.0000000000000000, 0.89999999999999991 },
6361 };
6362
6363 // Test function for a=1.0000000000000000, b=5.0000000000000000, c=4.0000000000000000.
6364 template <typename Tp>
6365 void test092()
6366 {
6367 const Tp eps = std::numeric_limits<Tp>::epsilon();
6368 Tp max_abs_diff = -Tp(1);
6369 Tp max_abs_frac = -Tp(1);
6370 unsigned int num_datum = sizeof(data092)
6371 / sizeof(testcase_hyperg<double>);
6372 for (unsigned int i = 0; i < num_datum; ++i)
6373 {
6374 const Tp f = std::tr1::hyperg(Tp(data092[i].a), Tp(data092[i].b),
6375 Tp(data092[i].c), Tp(data092[i].x));
6376 const Tp f0 = data092[i].f0;
6377 const Tp diff = f - f0;
6378 if (std::abs(diff) > max_abs_diff)
6379 max_abs_diff = std::abs(diff);
6380 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
6381 {
6382 const Tp frac = diff / f0;
6383 if (std::abs(frac) > max_abs_frac)
6384 max_abs_frac = std::abs(frac);
6385 }
6386 }
6387 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6388 }
6389
6390 // Test data for a=1.0000000000000000, b=5.0000000000000000, c=6.0000000000000000.
6391 testcase_hyperg<double> data093[] = {
6392 { 0.57476744883397501, 1.0000000000000000, 5.0000000000000000,
6393 6.0000000000000000, -0.90000000000000002 },
6394 { 0.60302731682513933, 1.0000000000000000, 5.0000000000000000,
6395 6.0000000000000000, -0.80000000000000004 },
6396 { 0.63425708719096396, 1.0000000000000000, 5.0000000000000000,
6397 6.0000000000000000, -0.69999999999999996 },
6398 { 0.66895764182970419, 1.0000000000000000, 5.0000000000000000,
6399 6.0000000000000000, -0.59999999999999998 },
6400 { 0.70775063063963428, 1.0000000000000000, 5.0000000000000000,
6401 6.0000000000000000, -0.50000000000000000 },
6402 { 0.75141762103495924, 1.0000000000000000, 5.0000000000000000,
6403 6.0000000000000000, -0.40000000000000002 },
6404 { 0.80095569442603298, 1.0000000000000000, 5.0000000000000000,
6405 6.0000000000000000, -0.30000000000000004 },
6406 { 0.85765823887436754, 1.0000000000000000, 5.0000000000000000,
6407 6.0000000000000000, -0.19999999999999996 },
6408 { 0.92323549576335540, 1.0000000000000000, 5.0000000000000000,
6409 6.0000000000000000, -0.099999999999999978 },
6410 { 1.0000000000000000, 1.0000000000000000, 5.0000000000000000,
6411 6.0000000000000000, 0.0000000000000000 },
6412 { 1.0911622464839472, 1.0000000000000000, 5.0000000000000000,
6413 6.0000000000000000, 0.10000000000000009 },
6414 { 1.2013226178607666, 1.0000000000000000, 5.0000000000000000,
6415 6.0000000000000000, 0.19999999999999996 },
6416 { 1.3373332072682687, 1.0000000000000000, 5.0000000000000000,
6417 6.0000000000000000, 0.30000000000000004 },
6418 { 1.5099074378209716, 1.0000000000000000, 5.0000000000000000,
6419 6.0000000000000000, 0.39999999999999991 },
6420 { 1.7368822229245819, 1.0000000000000000, 5.0000000000000000,
6421 6.0000000000000000, 0.50000000000000000 },
6422 { 2.0505871832661429, 1.0000000000000000, 5.0000000000000000,
6423 6.0000000000000000, 0.60000000000000009 },
6424 { 2.5172389775867967, 1.0000000000000000, 5.0000000000000000,
6425 6.0000000000000000, 0.69999999999999996 },
6426 { 3.3015631983556144, 1.0000000000000000, 5.0000000000000000,
6427 6.0000000000000000, 0.80000000000000004 },
6428 { 5.0005935155044519, 1.0000000000000000, 5.0000000000000000,
6429 6.0000000000000000, 0.89999999999999991 },
6430 };
6431
6432 // Test function for a=1.0000000000000000, b=5.0000000000000000, c=6.0000000000000000.
6433 template <typename Tp>
6434 void test093()
6435 {
6436 const Tp eps = std::numeric_limits<Tp>::epsilon();
6437 Tp max_abs_diff = -Tp(1);
6438 Tp max_abs_frac = -Tp(1);
6439 unsigned int num_datum = sizeof(data093)
6440 / sizeof(testcase_hyperg<double>);
6441 for (unsigned int i = 0; i < num_datum; ++i)
6442 {
6443 const Tp f = std::tr1::hyperg(Tp(data093[i].a), Tp(data093[i].b),
6444 Tp(data093[i].c), Tp(data093[i].x));
6445 const Tp f0 = data093[i].f0;
6446 const Tp diff = f - f0;
6447 if (std::abs(diff) > max_abs_diff)
6448 max_abs_diff = std::abs(diff);
6449 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
6450 {
6451 const Tp frac = diff / f0;
6452 if (std::abs(frac) > max_abs_frac)
6453 max_abs_frac = std::abs(frac);
6454 }
6455 }
6456 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6457 }
6458
6459 // Test data for a=1.0000000000000000, b=5.0000000000000000, c=8.0000000000000000.
6460 testcase_hyperg<double> data094[] = {
6461 { 0.64582752605387961, 1.0000000000000000, 5.0000000000000000,
6462 8.0000000000000000, -0.90000000000000002 },
6463 { 0.67184161997264169, 1.0000000000000000, 5.0000000000000000,
6464 8.0000000000000000, -0.80000000000000004 },
6465 { 0.70012779922368040, 1.0000000000000000, 5.0000000000000000,
6466 8.0000000000000000, -0.69999999999999996 },
6467 { 0.73100784656910256, 1.0000000000000000, 5.0000000000000000,
6468 8.0000000000000000, -0.59999999999999998 },
6469 { 0.76486919089091077, 1.0000000000000000, 5.0000000000000000,
6470 8.0000000000000000, -0.50000000000000000 },
6471 { 0.80218301124334579, 1.0000000000000000, 5.0000000000000000,
6472 8.0000000000000000, -0.40000000000000002 },
6473 { 0.84352883533234446, 1.0000000000000000, 5.0000000000000000,
6474 8.0000000000000000, -0.30000000000000004 },
6475 { 0.88962858902212572, 1.0000000000000000, 5.0000000000000000,
6476 8.0000000000000000, -0.19999999999999996 },
6477 { 0.94139473468584123, 1.0000000000000000, 5.0000000000000000,
6478 8.0000000000000000, -0.099999999999999978 },
6479 { 1.0000000000000000, 1.0000000000000000, 5.0000000000000000,
6480 8.0000000000000000, 0.0000000000000000 },
6481 { 1.0669812691939897, 1.0000000000000000, 5.0000000000000000,
6482 8.0000000000000000, 0.10000000000000009 },
6483 { 1.1443996012177726, 1.0000000000000000, 5.0000000000000000,
6484 8.0000000000000000, 0.19999999999999996 },
6485 { 1.2350966976721314, 1.0000000000000000, 5.0000000000000000,
6486 8.0000000000000000, 0.30000000000000004 },
6487 { 1.3431264370409088, 1.0000000000000000, 5.0000000000000000,
6488 8.0000000000000000, 0.39999999999999991 },
6489 { 1.4745266814162399, 1.0000000000000000, 5.0000000000000000,
6490 8.0000000000000000, 0.50000000000000000 },
6491 { 1.6388137104840066, 1.0000000000000000, 5.0000000000000000,
6492 8.0000000000000000, 0.60000000000000009 },
6493 { 1.8522074849776518, 1.0000000000000000, 5.0000000000000000,
6494 8.0000000000000000, 0.69999999999999996 },
6495 { 2.1458016978417458, 1.0000000000000000, 5.0000000000000000,
6496 8.0000000000000000, 0.80000000000000004 },
6497 { 2.5927464669826339, 1.0000000000000000, 5.0000000000000000,
6498 8.0000000000000000, 0.89999999999999991 },
6499 };
6500
6501 // Test function for a=1.0000000000000000, b=5.0000000000000000, c=8.0000000000000000.
6502 template <typename Tp>
6503 void test094()
6504 {
6505 const Tp eps = std::numeric_limits<Tp>::epsilon();
6506 Tp max_abs_diff = -Tp(1);
6507 Tp max_abs_frac = -Tp(1);
6508 unsigned int num_datum = sizeof(data094)
6509 / sizeof(testcase_hyperg<double>);
6510 for (unsigned int i = 0; i < num_datum; ++i)
6511 {
6512 const Tp f = std::tr1::hyperg(Tp(data094[i].a), Tp(data094[i].b),
6513 Tp(data094[i].c), Tp(data094[i].x));
6514 const Tp f0 = data094[i].f0;
6515 const Tp diff = f - f0;
6516 if (std::abs(diff) > max_abs_diff)
6517 max_abs_diff = std::abs(diff);
6518 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
6519 {
6520 const Tp frac = diff / f0;
6521 if (std::abs(frac) > max_abs_frac)
6522 max_abs_frac = std::abs(frac);
6523 }
6524 }
6525 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6526 }
6527
6528 // Test data for a=1.0000000000000000, b=5.0000000000000000, c=10.000000000000000.
6529 testcase_hyperg<double> data095[] = {
6530 { 0.69583236336670629, 1.0000000000000000, 5.0000000000000000,
6531 10.000000000000000, -0.90000000000000002 },
6532 { 0.71968920666899694, 1.0000000000000000, 5.0000000000000000,
6533 10.000000000000000, -0.80000000000000004 },
6534 { 0.74533885416044232, 1.0000000000000000, 5.0000000000000000,
6535 10.000000000000000, -0.69999999999999996 },
6536 { 0.77300145361503014, 1.0000000000000000, 5.0000000000000000,
6537 10.000000000000000, -0.59999999999999998 },
6538 { 0.80293630810919514, 1.0000000000000000, 5.0000000000000000,
6539 10.000000000000000, -0.50000000000000000 },
6540 { 0.83545132638592035, 1.0000000000000000, 5.0000000000000000,
6541 10.000000000000000, -0.40000000000000002 },
6542 { 0.87091544744412508, 1.0000000000000000, 5.0000000000000000,
6543 10.000000000000000, -0.30000000000000004 },
6544 { 0.90977522877919847, 1.0000000000000000, 5.0000000000000000,
6545 10.000000000000000, -0.19999999999999996 },
6546 { 0.95257738192069130, 1.0000000000000000, 5.0000000000000000,
6547 10.000000000000000, -0.099999999999999978 },
6548 { 1.0000000000000000, 1.0000000000000000, 5.0000000000000000,
6549 10.000000000000000, 0.0000000000000000 },
6550 { 1.0528968282789379, 1.0000000000000000, 5.0000000000000000,
6551 10.000000000000000, 0.10000000000000009 },
6552 { 1.1123617169062123, 1.0000000000000000, 5.0000000000000000,
6553 10.000000000000000, 0.19999999999999996 },
6554 { 1.1798254572896132, 1.0000000000000000, 5.0000000000000000,
6555 10.000000000000000, 0.30000000000000004 },
6556 { 1.2572069000522696, 1.0000000000000000, 5.0000000000000000,
6557 10.000000000000000, 0.39999999999999991 },
6558 { 1.3471600884974377, 1.0000000000000000, 5.0000000000000000,
6559 10.000000000000000, 0.50000000000000000 },
6560 { 1.4535032279573519, 1.0000000000000000, 5.0000000000000000,
6561 10.000000000000000, 0.60000000000000009 },
6562 { 1.5820245752814948, 1.0000000000000000, 5.0000000000000000,
6563 10.000000000000000, 0.69999999999999996 },
6564 { 1.7421756366906538, 1.0000000000000000, 5.0000000000000000,
6565 10.000000000000000, 0.80000000000000004 },
6566 { 1.9513145531098233, 1.0000000000000000, 5.0000000000000000,
6567 10.000000000000000, 0.89999999999999991 },
6568 };
6569
6570 // Test function for a=1.0000000000000000, b=5.0000000000000000, c=10.000000000000000.
6571 template <typename Tp>
6572 void test095()
6573 {
6574 const Tp eps = std::numeric_limits<Tp>::epsilon();
6575 Tp max_abs_diff = -Tp(1);
6576 Tp max_abs_frac = -Tp(1);
6577 unsigned int num_datum = sizeof(data095)
6578 / sizeof(testcase_hyperg<double>);
6579 for (unsigned int i = 0; i < num_datum; ++i)
6580 {
6581 const Tp f = std::tr1::hyperg(Tp(data095[i].a), Tp(data095[i].b),
6582 Tp(data095[i].c), Tp(data095[i].x));
6583 const Tp f0 = data095[i].f0;
6584 const Tp diff = f - f0;
6585 if (std::abs(diff) > max_abs_diff)
6586 max_abs_diff = std::abs(diff);
6587 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
6588 {
6589 const Tp frac = diff / f0;
6590 if (std::abs(frac) > max_abs_frac)
6591 max_abs_frac = std::abs(frac);
6592 }
6593 }
6594 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6595 }
6596
6597 // Test data for a=1.0000000000000000, b=10.000000000000000, c=2.0000000000000000.
6598 testcase_hyperg<double> data096[] = {
6599 { 0.12307420104127871, 1.0000000000000000, 10.000000000000000,
6600 2.0000000000000000, -0.90000000000000002 },
6601 { 0.13818870041457423, 1.0000000000000000, 10.000000000000000,
6602 2.0000000000000000, -0.80000000000000004 },
6603 { 0.15739165631811691, 1.0000000000000000, 10.000000000000000,
6604 2.0000000000000000, -0.69999999999999996 },
6605 { 0.18249038606882068, 1.0000000000000000, 10.000000000000000,
6606 2.0000000000000000, -0.59999999999999998 },
6607 { 0.21644171225027786, 1.0000000000000000, 10.000000000000000,
6608 2.0000000000000000, -0.50000000000000000 },
6609 { 0.26433326159804160, 1.0000000000000000, 10.000000000000000,
6610 2.0000000000000000, -0.40000000000000002 },
6611 { 0.33544459430654533, 1.0000000000000000, 10.000000000000000,
6612 2.0000000000000000, -0.30000000000000004 },
6613 { 0.44788516696232517, 1.0000000000000000, 10.000000000000000,
6614 2.0000000000000000, -0.19999999999999996 },
6615 { 0.63989153514168362, 1.0000000000000000, 10.000000000000000,
6616 2.0000000000000000, -0.099999999999999978 },
6617 { 1.0000000000000000, 1.0000000000000000, 10.000000000000000,
6618 2.0000000000000000, 0.0000000000000000 },
6619 { 1.7568608796813312, 1.0000000000000000, 10.000000000000000,
6620 2.0000000000000000, 0.10000000000000009 },
6621 { 3.5836558871799027, 1.0000000000000000, 10.000000000000000,
6622 2.0000000000000000, 0.19999999999999996 },
6623 { 8.8077526749963226, 1.0000000000000000, 10.000000000000000,
6624 2.0000000000000000, 0.30000000000000004 },
6625 { 27.285841702089190, 1.0000000000000000, 10.000000000000000,
6626 2.0000000000000000, 0.39999999999999991 },
6627 { 113.55555555555557, 1.0000000000000000, 10.000000000000000,
6628 2.0000000000000000, 0.50000000000000000 },
6629 { 706.24023437500091, 1.0000000000000000, 10.000000000000000,
6630 2.0000000000000000, 0.60000000000000009 },
6631 { 8064.1687976651992, 1.0000000000000000, 10.000000000000000,
6632 2.0000000000000000, 0.69999999999999996 },
6633 { 271267.22222222196, 1.0000000000000000, 10.000000000000000,
6634 2.0000000000000000, 0.80000000000000004 },
6635 { 123456789.99999890, 1.0000000000000000, 10.000000000000000,
6636 2.0000000000000000, 0.89999999999999991 },
6637 };
6638
6639 // Test function for a=1.0000000000000000, b=10.000000000000000, c=2.0000000000000000.
6640 template <typename Tp>
6641 void test096()
6642 {
6643 const Tp eps = std::numeric_limits<Tp>::epsilon();
6644 Tp max_abs_diff = -Tp(1);
6645 Tp max_abs_frac = -Tp(1);
6646 unsigned int num_datum = sizeof(data096)
6647 / sizeof(testcase_hyperg<double>);
6648 for (unsigned int i = 0; i < num_datum; ++i)
6649 {
6650 const Tp f = std::tr1::hyperg(Tp(data096[i].a), Tp(data096[i].b),
6651 Tp(data096[i].c), Tp(data096[i].x));
6652 const Tp f0 = data096[i].f0;
6653 const Tp diff = f - f0;
6654 if (std::abs(diff) > max_abs_diff)
6655 max_abs_diff = std::abs(diff);
6656 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
6657 {
6658 const Tp frac = diff / f0;
6659 if (std::abs(frac) > max_abs_frac)
6660 max_abs_frac = std::abs(frac);
6661 }
6662 }
6663 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6664 }
6665
6666 // Test data for a=1.0000000000000000, b=10.000000000000000, c=4.0000000000000000.
6667 testcase_hyperg<double> data097[] = {
6668 { 0.28363728383055758, 1.0000000000000000, 10.000000000000000,
6669 4.0000000000000000, -0.90000000000000002 },
6670 { 0.30933003169808387, 1.0000000000000000, 10.000000000000000,
6671 4.0000000000000000, -0.80000000000000004 },
6672 { 0.33998437757128797, 1.0000000000000000, 10.000000000000000,
6673 4.0000000000000000, -0.69999999999999996 },
6674 { 0.37713553224291119, 1.0000000000000000, 10.000000000000000,
6675 4.0000000000000000, -0.59999999999999998 },
6676 { 0.42299736538419658, 1.0000000000000000, 10.000000000000000,
6677 4.0000000000000000, -0.50000000000000000 },
6678 { 0.48086597727600106, 1.0000000000000000, 10.000000000000000,
6679 4.0000000000000000, -0.40000000000000002 },
6680 { 0.55583495759293045, 1.0000000000000000, 10.000000000000000,
6681 4.0000000000000000, -0.30000000000000004 },
6682 { 0.65612850114039667, 1.0000000000000000, 10.000000000000000,
6683 4.0000000000000000, -0.19999999999999996 },
6684 { 0.79573668772968120, 1.0000000000000000, 10.000000000000000,
6685 4.0000000000000000, -0.099999999999999978 },
6686 { 1.0000000000000000, 1.0000000000000000, 10.000000000000000,
6687 4.0000000000000000, 0.0000000000000000 },
6688 { 1.3184712058058303, 1.0000000000000000, 10.000000000000000,
6689 4.0000000000000000, 0.10000000000000009 },
6690 { 1.8576958065941214, 1.0000000000000000, 10.000000000000000,
6691 4.0000000000000000, 0.19999999999999996 },
6692 { 2.8759509651764228, 1.0000000000000000, 10.000000000000000,
6693 4.0000000000000000, 0.30000000000000004 },
6694 { 5.1046225531822182, 1.0000000000000000, 10.000000000000000,
6695 4.0000000000000000, 0.39999999999999991 },
6696 { 11.095238095238095, 1.0000000000000000, 10.000000000000000,
6697 4.0000000000000000, 0.50000000000000000 },
6698 { 32.797154017857174, 1.0000000000000000, 10.000000000000000,
6699 4.0000000000000000, 0.60000000000000009 },
6700 { 158.01935680536477, 1.0000000000000000, 10.000000000000000,
6701 4.0000000000000000, 0.69999999999999996 },
6702 { 1815.9523809523814, 1.0000000000000000, 10.000000000000000,
6703 4.0000000000000000, 0.80000000000000004 },
6704 { 163302.14285714156, 1.0000000000000000, 10.000000000000000,
6705 4.0000000000000000, 0.89999999999999991 },
6706 };
6707
6708 // Test function for a=1.0000000000000000, b=10.000000000000000, c=4.0000000000000000.
6709 template <typename Tp>
6710 void test097()
6711 {
6712 const Tp eps = std::numeric_limits<Tp>::epsilon();
6713 Tp max_abs_diff = -Tp(1);
6714 Tp max_abs_frac = -Tp(1);
6715 unsigned int num_datum = sizeof(data097)
6716 / sizeof(testcase_hyperg<double>);
6717 for (unsigned int i = 0; i < num_datum; ++i)
6718 {
6719 const Tp f = std::tr1::hyperg(Tp(data097[i].a), Tp(data097[i].b),
6720 Tp(data097[i].c), Tp(data097[i].x));
6721 const Tp f0 = data097[i].f0;
6722 const Tp diff = f - f0;
6723 if (std::abs(diff) > max_abs_diff)
6724 max_abs_diff = std::abs(diff);
6725 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
6726 {
6727 const Tp frac = diff / f0;
6728 if (std::abs(frac) > max_abs_frac)
6729 max_abs_frac = std::abs(frac);
6730 }
6731 }
6732 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6733 }
6734
6735 // Test data for a=1.0000000000000000, b=10.000000000000000, c=6.0000000000000000.
6736 testcase_hyperg<double> data098[] = {
6737 { 0.39006633302741794, 1.0000000000000000, 10.000000000000000,
6738 6.0000000000000000, -0.90000000000000002 },
6739 { 0.41898885698103294, 1.0000000000000000, 10.000000000000000,
6740 6.0000000000000000, -0.80000000000000004 },
6741 { 0.45245557983812590, 1.0000000000000000, 10.000000000000000,
6742 6.0000000000000000, -0.69999999999999996 },
6743 { 0.49160548618861633, 1.0000000000000000, 10.000000000000000,
6744 6.0000000000000000, -0.59999999999999998 },
6745 { 0.53798419230517980, 1.0000000000000000, 10.000000000000000,
6746 6.0000000000000000, -0.50000000000000000 },
6747 { 0.59373881442067344, 1.0000000000000000, 10.000000000000000,
6748 6.0000000000000000, -0.40000000000000002 },
6749 { 0.66193391357076115, 1.0000000000000000, 10.000000000000000,
6750 6.0000000000000000, -0.30000000000000004 },
6751 { 0.74708402736952129, 1.0000000000000000, 10.000000000000000,
6752 6.0000000000000000, -0.19999999999999996 },
6753 { 0.85609281019430605, 1.0000000000000000, 10.000000000000000,
6754 6.0000000000000000, -0.099999999999999978 },
6755 { 1.0000000000000000, 1.0000000000000000, 10.000000000000000,
6756 6.0000000000000000, 0.0000000000000000 },
6757 { 1.1974451135148187, 1.0000000000000000, 10.000000000000000,
6758 6.0000000000000000, 0.10000000000000009 },
6759 { 1.4820886036706347, 1.0000000000000000, 10.000000000000000,
6760 6.0000000000000000, 0.19999999999999996 },
6761 { 1.9201183180477521, 1.0000000000000000, 10.000000000000000,
6762 6.0000000000000000, 0.30000000000000004 },
6763 { 2.6569338297733336, 1.0000000000000000, 10.000000000000000,
6764 6.0000000000000000, 0.39999999999999991 },
6765 { 4.0634920634920650, 1.0000000000000000, 10.000000000000000,
6766 6.0000000000000000, 0.50000000000000000 },
6767 { 7.3102678571428568, 1.0000000000000000, 10.000000000000000,
6768 6.0000000000000000, 0.60000000000000009 },
6769 { 17.512574302697733, 1.0000000000000000, 10.000000000000000,
6770 6.0000000000000000, 0.69999999999999996 },
6771 { 74.206349206349131, 1.0000000000000000, 10.000000000000000,
6772 6.0000000000000000, 0.80000000000000004 },
6773 { 1342.8571428571363, 1.0000000000000000, 10.000000000000000,
6774 6.0000000000000000, 0.89999999999999991 },
6775 };
6776
6777 // Test function for a=1.0000000000000000, b=10.000000000000000, c=6.0000000000000000.
6778 template <typename Tp>
6779 void test098()
6780 {
6781 const Tp eps = std::numeric_limits<Tp>::epsilon();
6782 Tp max_abs_diff = -Tp(1);
6783 Tp max_abs_frac = -Tp(1);
6784 unsigned int num_datum = sizeof(data098)
6785 / sizeof(testcase_hyperg<double>);
6786 for (unsigned int i = 0; i < num_datum; ++i)
6787 {
6788 const Tp f = std::tr1::hyperg(Tp(data098[i].a), Tp(data098[i].b),
6789 Tp(data098[i].c), Tp(data098[i].x));
6790 const Tp f0 = data098[i].f0;
6791 const Tp diff = f - f0;
6792 if (std::abs(diff) > max_abs_diff)
6793 max_abs_diff = std::abs(diff);
6794 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
6795 {
6796 const Tp frac = diff / f0;
6797 if (std::abs(frac) > max_abs_frac)
6798 max_abs_frac = std::abs(frac);
6799 }
6800 }
6801 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6802 }
6803
6804 // Test data for a=1.0000000000000000, b=10.000000000000000, c=8.0000000000000000.
6805 testcase_hyperg<double> data099[] = {
6806 { 0.46726928123633193, 1.0000000000000000, 10.000000000000000,
6807 8.0000000000000000, -0.90000000000000002 },
6808 { 0.49687547629934464, 1.0000000000000000, 10.000000000000000,
6809 8.0000000000000000, -0.80000000000000004 },
6810 { 0.53045208856322235, 1.0000000000000000, 10.000000000000000,
6811 8.0000000000000000, -0.69999999999999996 },
6812 { 0.56884765624999978, 1.0000000000000000, 10.000000000000000,
6813 8.0000000000000000, -0.59999999999999998 },
6814 { 0.61316872427983526, 1.0000000000000000, 10.000000000000000,
6815 8.0000000000000000, -0.50000000000000000 },
6816 { 0.66488500161969544, 1.0000000000000000, 10.000000000000000,
6817 8.0000000000000000, -0.40000000000000002 },
6818 { 0.72598998634501577, 1.0000000000000000, 10.000000000000000,
6819 8.0000000000000000, -0.30000000000000004 },
6820 { 0.79925411522633782, 1.0000000000000000, 10.000000000000000,
6821 8.0000000000000000, -0.19999999999999996 },
6822 { 0.88863845062192193, 1.0000000000000000, 10.000000000000000,
6823 8.0000000000000000, -0.099999999999999978 },
6824 { 1.0000000000000000, 1.0000000000000000, 10.000000000000000,
6825 8.0000000000000000, 0.0000000000000000 },
6826 { 1.1423563481176653, 1.0000000000000000, 10.000000000000000,
6827 8.0000000000000000, 0.10000000000000009 },
6828 { 1.3302951388888888, 1.0000000000000000, 10.000000000000000,
6829 8.0000000000000000, 0.19999999999999996 },
6830 { 1.5889212827988335, 1.0000000000000000, 10.000000000000000,
6831 8.0000000000000000, 0.30000000000000004 },
6832 { 1.9650205761316870, 1.0000000000000000, 10.000000000000000,
6833 8.0000000000000000, 0.39999999999999991 },
6834 { 2.5555555555555549, 1.0000000000000000, 10.000000000000000,
6835 8.0000000000000000, 0.50000000000000000 },
6836 { 3.5937500000000013, 1.0000000000000000, 10.000000000000000,
6837 8.0000000000000000, 0.60000000000000009 },
6838 { 5.7818930041152203, 1.0000000000000000, 10.000000000000000,
6839 8.0000000000000000, 0.69999999999999996 },
6840 { 12.222222222222220, 1.0000000000000000, 10.000000000000000,
6841 8.0000000000000000, 0.80000000000000004 },
6842 { 54.999999999999780, 1.0000000000000000, 10.000000000000000,
6843 8.0000000000000000, 0.89999999999999991 },
6844 };
6845
6846 // Test function for a=1.0000000000000000, b=10.000000000000000, c=8.0000000000000000.
6847 template <typename Tp>
6848 void test099()
6849 {
6850 const Tp eps = std::numeric_limits<Tp>::epsilon();
6851 Tp max_abs_diff = -Tp(1);
6852 Tp max_abs_frac = -Tp(1);
6853 unsigned int num_datum = sizeof(data099)
6854 / sizeof(testcase_hyperg<double>);
6855 for (unsigned int i = 0; i < num_datum; ++i)
6856 {
6857 const Tp f = std::tr1::hyperg(Tp(data099[i].a), Tp(data099[i].b),
6858 Tp(data099[i].c), Tp(data099[i].x));
6859 const Tp f0 = data099[i].f0;
6860 const Tp diff = f - f0;
6861 if (std::abs(diff) > max_abs_diff)
6862 max_abs_diff = std::abs(diff);
6863 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
6864 {
6865 const Tp frac = diff / f0;
6866 if (std::abs(frac) > max_abs_frac)
6867 max_abs_frac = std::abs(frac);
6868 }
6869 }
6870 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6871 }
6872
6873 // Test data for a=1.0000000000000000, b=10.000000000000000, c=10.000000000000000.
6874 testcase_hyperg<double> data100[] = {
6875 { 0.52631578947368429, 1.0000000000000000, 10.000000000000000,
6876 10.000000000000000, -0.90000000000000002 },
6877 { 0.55555555555555558, 1.0000000000000000, 10.000000000000000,
6878 10.000000000000000, -0.80000000000000004 },
6879 { 0.58823529411764708, 1.0000000000000000, 10.000000000000000,
6880 10.000000000000000, -0.69999999999999996 },
6881 { 0.62500000000000000, 1.0000000000000000, 10.000000000000000,
6882 10.000000000000000, -0.59999999999999998 },
6883 { 0.66666666666666663, 1.0000000000000000, 10.000000000000000,
6884 10.000000000000000, -0.50000000000000000 },
6885 { 0.71428571428571430, 1.0000000000000000, 10.000000000000000,
6886 10.000000000000000, -0.40000000000000002 },
6887 { 0.76923076923076927, 1.0000000000000000, 10.000000000000000,
6888 10.000000000000000, -0.30000000000000004 },
6889 { 0.83333333333333337, 1.0000000000000000, 10.000000000000000,
6890 10.000000000000000, -0.19999999999999996 },
6891 { 0.90909090909090906, 1.0000000000000000, 10.000000000000000,
6892 10.000000000000000, -0.099999999999999978 },
6893 { 1.0000000000000000, 1.0000000000000000, 10.000000000000000,
6894 10.000000000000000, 0.0000000000000000 },
6895 { 1.1111111111111112, 1.0000000000000000, 10.000000000000000,
6896 10.000000000000000, 0.10000000000000009 },
6897 { 1.2500000000000000, 1.0000000000000000, 10.000000000000000,
6898 10.000000000000000, 0.19999999999999996 },
6899 { 1.4285714285714286, 1.0000000000000000, 10.000000000000000,
6900 10.000000000000000, 0.30000000000000004 },
6901 { 1.6666666666666663, 1.0000000000000000, 10.000000000000000,
6902 10.000000000000000, 0.39999999999999991 },
6903 { 2.0000000000000000, 1.0000000000000000, 10.000000000000000,
6904 10.000000000000000, 0.50000000000000000 },
6905 { 2.5000000000000004, 1.0000000000000000, 10.000000000000000,
6906 10.000000000000000, 0.60000000000000009 },
6907 { 3.3333333333333330, 1.0000000000000000, 10.000000000000000,
6908 10.000000000000000, 0.69999999999999996 },
6909 { 5.0000000000000009, 1.0000000000000000, 10.000000000000000,
6910 10.000000000000000, 0.80000000000000004 },
6911 { 9.9999999999999929, 1.0000000000000000, 10.000000000000000,
6912 10.000000000000000, 0.89999999999999991 },
6913 };
6914
6915 // Test function for a=1.0000000000000000, b=10.000000000000000, c=10.000000000000000.
6916 template <typename Tp>
6917 void test100()
6918 {
6919 const Tp eps = std::numeric_limits<Tp>::epsilon();
6920 Tp max_abs_diff = -Tp(1);
6921 Tp max_abs_frac = -Tp(1);
6922 unsigned int num_datum = sizeof(data100)
6923 / sizeof(testcase_hyperg<double>);
6924 for (unsigned int i = 0; i < num_datum; ++i)
6925 {
6926 const Tp f = std::tr1::hyperg(Tp(data100[i].a), Tp(data100[i].b),
6927 Tp(data100[i].c), Tp(data100[i].x));
6928 const Tp f0 = data100[i].f0;
6929 const Tp diff = f - f0;
6930 if (std::abs(diff) > max_abs_diff)
6931 max_abs_diff = std::abs(diff);
6932 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
6933 {
6934 const Tp frac = diff / f0;
6935 if (std::abs(frac) > max_abs_frac)
6936 max_abs_frac = std::abs(frac);
6937 }
6938 }
6939 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6940 }
6941
6942 // Test data for a=1.0000000000000000, b=20.000000000000000, c=2.0000000000000000.
6943 testcase_hyperg<double> data101[] = {
6944 { 0.058479236576646373, 1.0000000000000000, 20.000000000000000,
6945 2.0000000000000000, -0.90000000000000002 },
6946 { 0.065788544763137669, 1.0000000000000000, 20.000000000000000,
6947 2.0000000000000000, -0.80000000000000004 },
6948 { 0.075184824937824662, 1.0000000000000000, 20.000000000000000,
6949 2.0000000000000000, -0.69999999999999996 },
6950 { 0.087707688693157260, 1.0000000000000000, 20.000000000000000,
6951 2.0000000000000000, -0.59999999999999998 },
6952 { 0.10521567442213345, 1.0000000000000000, 20.000000000000000,
6953 2.0000000000000000, -0.50000000000000000 },
6954 { 0.13135877960541525, 1.0000000000000000, 20.000000000000000,
6955 2.0000000000000000, -0.40000000000000002 },
6956 { 0.17423854066297104, 1.0000000000000000, 20.000000000000000,
6957 2.0000000000000000, -0.30000000000000004 },
6958 { 0.25492082527223525, 1.0000000000000000, 20.000000000000000,
6959 2.0000000000000000, -0.19999999999999996 },
6960 { 0.44025895219654843, 1.0000000000000000, 20.000000000000000,
6961 2.0000000000000000, -0.099999999999999978 },
6962 { 1.0000000000000000, 1.0000000000000000, 20.000000000000000,
6963 2.0000000000000000, 0.0000000000000000 },
6964 { 3.3698615820910360, 1.0000000000000000, 20.000000000000000,
6965 2.0000000000000000, 0.10000000000000009 },
6966 { 17.997089220808483, 1.0000000000000000, 20.000000000000000,
6967 2.0000000000000000, 0.19999999999999996 },
6968 { 153.73298291118951, 1.0000000000000000, 20.000000000000000,
6969 2.0000000000000000, 0.30000000000000004 },
6970 { 2159.1667587825627, 1.0000000000000000, 20.000000000000000,
6971 2.0000000000000000, 0.39999999999999991 },
6972 { 55188.105263157879, 1.0000000000000000, 20.000000000000000,
6973 2.0000000000000000, 0.50000000000000000 },
6974 { 3191209.3921857267, 1.0000000000000000, 20.000000000000000,
6975 2.0000000000000000, 0.60000000000000009 },
6976 { 646910975.29152656, 1.0000000000000000, 20.000000000000000,
6977 2.0000000000000000, 0.69999999999999996 },
6978 { 1254834626850.2659, 1.0000000000000000, 20.000000000000000,
6979 2.0000000000000000, 0.80000000000000004 },
6980 { 5.8479532163741414e+17, 1.0000000000000000, 20.000000000000000,
6981 2.0000000000000000, 0.89999999999999991 },
6982 };
6983
6984 // Test function for a=1.0000000000000000, b=20.000000000000000, c=2.0000000000000000.
6985 template <typename Tp>
6986 void test101()
6987 {
6988 const Tp eps = std::numeric_limits<Tp>::epsilon();
6989 Tp max_abs_diff = -Tp(1);
6990 Tp max_abs_frac = -Tp(1);
6991 unsigned int num_datum = sizeof(data101)
6992 / sizeof(testcase_hyperg<double>);
6993 for (unsigned int i = 0; i < num_datum; ++i)
6994 {
6995 const Tp f = std::tr1::hyperg(Tp(data101[i].a), Tp(data101[i].b),
6996 Tp(data101[i].c), Tp(data101[i].x));
6997 const Tp f0 = data101[i].f0;
6998 const Tp diff = f - f0;
6999 if (std::abs(diff) > max_abs_diff)
7000 max_abs_diff = std::abs(diff);
7001 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
7002 {
7003 const Tp frac = diff / f0;
7004 if (std::abs(frac) > max_abs_frac)
7005 max_abs_frac = std::abs(frac);
7006 }
7007 }
7008 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7009 }
7010
7011 // Test data for a=1.0000000000000000, b=20.000000000000000, c=4.0000000000000000.
7012 testcase_hyperg<double> data102[] = {
7013 { 0.15519511120894947, 1.0000000000000000, 20.000000000000000,
7014 4.0000000000000000, -0.90000000000000002 },
7015 { 0.17197165701692899, 1.0000000000000000, 20.000000000000000,
7016 4.0000000000000000, -0.80000000000000004 },
7017 { 0.19276847315207363, 1.0000000000000000, 20.000000000000000,
7018 4.0000000000000000, -0.69999999999999996 },
7019 { 0.21920107206179093, 1.0000000000000000, 20.000000000000000,
7020 4.0000000000000000, -0.59999999999999998 },
7021 { 0.25386158960390581, 1.0000000000000000, 20.000000000000000,
7022 4.0000000000000000, -0.50000000000000000 },
7023 { 0.30115970686600657, 1.0000000000000000, 20.000000000000000,
7024 4.0000000000000000, -0.40000000000000002 },
7025 { 0.36916408142057117, 1.0000000000000000, 20.000000000000000,
7026 4.0000000000000000, -0.30000000000000004 },
7027 { 0.47406175901569558, 1.0000000000000000, 20.000000000000000,
7028 4.0000000000000000, -0.19999999999999996 },
7029 { 0.65237908266239919, 1.0000000000000000, 20.000000000000000,
7030 4.0000000000000000, -0.099999999999999978 },
7031 { 1.0000000000000000, 1.0000000000000000, 20.000000000000000,
7032 4.0000000000000000, 0.0000000000000000 },
7033 { 1.8227213362622299, 1.0000000000000000, 20.000000000000000,
7034 4.0000000000000000, 0.10000000000000009 },
7035 { 4.3716358339791332, 1.0000000000000000, 20.000000000000000,
7036 4.0000000000000000, 0.19999999999999996 },
7037 { 15.670841312959222, 1.0000000000000000, 20.000000000000000,
7038 4.0000000000000000, 0.30000000000000004 },
7039 { 94.742651122760179, 1.0000000000000000, 20.000000000000000,
7040 4.0000000000000000, 0.39999999999999991 },
7041 { 1081.7275541795671, 1.0000000000000000, 20.000000000000000,
7042 4.0000000000000000, 0.50000000000000000 },
7043 { 27809.787731465960, 1.0000000000000000, 20.000000000000000,
7044 4.0000000000000000, 0.60000000000000009 },
7045 { 2329811.1715181042, 1.0000000000000000, 20.000000000000000,
7046 4.0000000000000000, 0.69999999999999996 },
7047 { 1537787532.6780224, 1.0000000000000000, 20.000000000000000,
7048 4.0000000000000000, 0.80000000000000004 },
7049 { 141562653506999.88, 1.0000000000000000, 20.000000000000000,
7050 4.0000000000000000, 0.89999999999999991 },
7051 };
7052
7053 // Test function for a=1.0000000000000000, b=20.000000000000000, c=4.0000000000000000.
7054 template <typename Tp>
7055 void test102()
7056 {
7057 const Tp eps = std::numeric_limits<Tp>::epsilon();
7058 Tp max_abs_diff = -Tp(1);
7059 Tp max_abs_frac = -Tp(1);
7060 unsigned int num_datum = sizeof(data102)
7061 / sizeof(testcase_hyperg<double>);
7062 for (unsigned int i = 0; i < num_datum; ++i)
7063 {
7064 const Tp f = std::tr1::hyperg(Tp(data102[i].a), Tp(data102[i].b),
7065 Tp(data102[i].c), Tp(data102[i].x));
7066 const Tp f0 = data102[i].f0;
7067 const Tp diff = f - f0;
7068 if (std::abs(diff) > max_abs_diff)
7069 max_abs_diff = std::abs(diff);
7070 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
7071 {
7072 const Tp frac = diff / f0;
7073 if (std::abs(frac) > max_abs_frac)
7074 max_abs_frac = std::abs(frac);
7075 }
7076 }
7077 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7078 }
7079
7080 // Test data for a=1.0000000000000000, b=20.000000000000000, c=6.0000000000000000.
7081 testcase_hyperg<double> data103[] = {
7082 { 0.23253645591196570, 1.0000000000000000, 20.000000000000000,
7083 6.0000000000000000, -0.90000000000000002 },
7084 { 0.25484220947068353, 1.0000000000000000, 20.000000000000000,
7085 6.0000000000000000, -0.80000000000000004 },
7086 { 0.28181987881113829, 1.0000000000000000, 20.000000000000000,
7087 6.0000000000000000, -0.69999999999999996 },
7088 { 0.31508211677735765, 1.0000000000000000, 20.000000000000000,
7089 6.0000000000000000, -0.59999999999999998 },
7090 { 0.35706285886959599, 1.0000000000000000, 20.000000000000000,
7091 6.0000000000000000, -0.50000000000000000 },
7092 { 0.41160053409238195, 1.0000000000000000, 20.000000000000000,
7093 6.0000000000000000, -0.40000000000000002 },
7094 { 0.48508083111181949, 1.0000000000000000, 20.000000000000000,
7095 6.0000000000000000, -0.30000000000000004 },
7096 { 0.58885194371375260, 1.0000000000000000, 20.000000000000000,
7097 6.0000000000000000, -0.19999999999999996 },
7098 { 0.74482241684585748, 1.0000000000000000, 20.000000000000000,
7099 6.0000000000000000, -0.099999999999999978 },
7100 { 1.0000000000000000, 1.0000000000000000, 20.000000000000000,
7101 6.0000000000000000, 0.0000000000000000 },
7102 { 1.4700356864367146, 1.0000000000000000, 20.000000000000000,
7103 6.0000000000000000, 0.10000000000000009 },
7104 { 2.4955144453055143, 1.0000000000000000, 20.000000000000000,
7105 6.0000000000000000, 0.19999999999999996 },
7106 { 5.3506594845833471, 1.0000000000000000, 20.000000000000000,
7107 6.0000000000000000, 0.30000000000000004 },
7108 { 16.618413752184221, 1.0000000000000000, 20.000000000000000,
7109 6.0000000000000000, 0.39999999999999991 },
7110 { 89.310629514963878, 1.0000000000000000, 20.000000000000000,
7111 6.0000000000000000, 0.50000000000000000 },
7112 { 1029.3439900542960, 1.0000000000000000, 20.000000000000000,
7113 6.0000000000000000, 0.60000000000000009 },
7114 { 35659.847863372350, 1.0000000000000000, 20.000000000000000,
7115 6.0000000000000000, 0.69999999999999996 },
7116 { 8009309.6233230168, 1.0000000000000000, 20.000000000000000,
7117 6.0000000000000000, 0.80000000000000004 },
7118 { 145640590027.39731, 1.0000000000000000, 20.000000000000000,
7119 6.0000000000000000, 0.89999999999999991 },
7120 };
7121
7122 // Test function for a=1.0000000000000000, b=20.000000000000000, c=6.0000000000000000.
7123 template <typename Tp>
7124 void test103()
7125 {
7126 const Tp eps = std::numeric_limits<Tp>::epsilon();
7127 Tp max_abs_diff = -Tp(1);
7128 Tp max_abs_frac = -Tp(1);
7129 unsigned int num_datum = sizeof(data103)
7130 / sizeof(testcase_hyperg<double>);
7131 for (unsigned int i = 0; i < num_datum; ++i)
7132 {
7133 const Tp f = std::tr1::hyperg(Tp(data103[i].a), Tp(data103[i].b),
7134 Tp(data103[i].c), Tp(data103[i].x));
7135 const Tp f0 = data103[i].f0;
7136 const Tp diff = f - f0;
7137 if (std::abs(diff) > max_abs_diff)
7138 max_abs_diff = std::abs(diff);
7139 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
7140 {
7141 const Tp frac = diff / f0;
7142 if (std::abs(frac) > max_abs_frac)
7143 max_abs_frac = std::abs(frac);
7144 }
7145 }
7146 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7147 }
7148
7149 // Test data for a=1.0000000000000000, b=20.000000000000000, c=8.0000000000000000.
7150 testcase_hyperg<double> data104[] = {
7151 { 0.29614148314592498, 1.0000000000000000, 20.000000000000000,
7152 8.0000000000000000, -0.90000000000000002 },
7153 { 0.32176277356430810, 1.0000000000000000, 20.000000000000000,
7154 8.0000000000000000, -0.80000000000000004 },
7155 { 0.35217870475550522, 1.0000000000000000, 20.000000000000000,
7156 8.0000000000000000, -0.69999999999999996 },
7157 { 0.38885270445515091, 1.0000000000000000, 20.000000000000000,
7158 8.0000000000000000, -0.59999999999999998 },
7159 { 0.43389978380608424, 1.0000000000000000, 20.000000000000000,
7160 8.0000000000000000, -0.50000000000000000 },
7161 { 0.49048612522269436, 1.0000000000000000, 20.000000000000000,
7162 8.0000000000000000, -0.40000000000000002 },
7163 { 0.56355539635634611, 1.0000000000000000, 20.000000000000000,
7164 8.0000000000000000, -0.30000000000000004 },
7165 { 0.66123153239117682, 1.0000000000000000, 20.000000000000000,
7166 8.0000000000000000, -0.19999999999999996 },
7167 { 0.79773363961895427, 1.0000000000000000, 20.000000000000000,
7168 8.0000000000000000, -0.099999999999999978 },
7169 { 1.0000000000000000, 1.0000000000000000, 20.000000000000000,
7170 8.0000000000000000, 0.0000000000000000 },
7171 { 1.3245132157016595, 1.0000000000000000, 20.000000000000000,
7172 8.0000000000000000, 0.10000000000000009 },
7173 { 1.9065148749742076, 1.0000000000000000, 20.000000000000000,
7174 8.0000000000000000, 0.19999999999999996 },
7175 { 3.1328798652457452, 1.0000000000000000, 20.000000000000000,
7176 8.0000000000000000, 0.30000000000000004 },
7177 { 6.4172532944033476, 1.0000000000000000, 20.000000000000000,
7178 8.0000000000000000, 0.39999999999999991 },
7179 { 19.071683734222436, 1.0000000000000000, 20.000000000000000,
7180 8.0000000000000000, 0.50000000000000000 },
7181 { 104.41989641582512, 1.0000000000000000, 20.000000000000000,
7182 8.0000000000000000, 0.60000000000000009 },
7183 { 1510.5743992324240, 1.0000000000000000, 20.000000000000000,
7184 8.0000000000000000, 0.69999999999999996 },
7185 { 115518.14360562043, 1.0000000000000000, 20.000000000000000,
7186 8.0000000000000000, 0.80000000000000004 },
7187 { 414930455.29173034, 1.0000000000000000, 20.000000000000000,
7188 8.0000000000000000, 0.89999999999999991 },
7189 };
7190
7191 // Test function for a=1.0000000000000000, b=20.000000000000000, c=8.0000000000000000.
7192 template <typename Tp>
7193 void test104()
7194 {
7195 const Tp eps = std::numeric_limits<Tp>::epsilon();
7196 Tp max_abs_diff = -Tp(1);
7197 Tp max_abs_frac = -Tp(1);
7198 unsigned int num_datum = sizeof(data104)
7199 / sizeof(testcase_hyperg<double>);
7200 for (unsigned int i = 0; i < num_datum; ++i)
7201 {
7202 const Tp f = std::tr1::hyperg(Tp(data104[i].a), Tp(data104[i].b),
7203 Tp(data104[i].c), Tp(data104[i].x));
7204 const Tp f0 = data104[i].f0;
7205 const Tp diff = f - f0;
7206 if (std::abs(diff) > max_abs_diff)
7207 max_abs_diff = std::abs(diff);
7208 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
7209 {
7210 const Tp frac = diff / f0;
7211 if (std::abs(frac) > max_abs_frac)
7212 max_abs_frac = std::abs(frac);
7213 }
7214 }
7215 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7216 }
7217
7218 // Test data for a=1.0000000000000000, b=20.000000000000000, c=10.000000000000000.
7219 testcase_hyperg<double> data105[] = {
7220 { 0.34954259539177696, 1.0000000000000000, 20.000000000000000,
7221 10.000000000000000, -0.90000000000000002 },
7222 { 0.37714038609235123, 1.0000000000000000, 20.000000000000000,
7223 10.000000000000000, -0.80000000000000004 },
7224 { 0.40942091659748725, 1.0000000000000000, 20.000000000000000,
7225 10.000000000000000, -0.69999999999999996 },
7226 { 0.44767109606846428, 1.0000000000000000, 20.000000000000000,
7227 10.000000000000000, -0.59999999999999998 },
7228 { 0.49368984777532254, 1.0000000000000000, 20.000000000000000,
7229 10.000000000000000, -0.50000000000000000 },
7230 { 0.55006638216982318, 1.0000000000000000, 20.000000000000000,
7231 10.000000000000000, -0.40000000000000002 },
7232 { 0.62065830207408912, 1.0000000000000000, 20.000000000000000,
7233 10.000000000000000, -0.30000000000000004 },
7234 { 0.71145554513583786, 1.0000000000000000, 20.000000000000000,
7235 10.000000000000000, -0.19999999999999996 },
7236 { 0.83223839666914623, 1.0000000000000000, 20.000000000000000,
7237 10.000000000000000, -0.099999999999999978 },
7238 { 1.0000000000000000, 1.0000000000000000, 20.000000000000000,
7239 10.000000000000000, 0.0000000000000000 },
7240 { 1.2466748028187731, 1.0000000000000000, 20.000000000000000,
7241 10.000000000000000, 0.10000000000000009 },
7242 { 1.6386752725021749, 1.0000000000000000, 20.000000000000000,
7243 10.000000000000000, 0.19999999999999996 },
7244 { 2.3340068725479681, 1.0000000000000000, 20.000000000000000,
7245 10.000000000000000, 0.30000000000000004 },
7246 { 3.7848108613132054, 1.0000000000000000, 20.000000000000000,
7247 10.000000000000000, 0.39999999999999991 },
7248 { 7.6754638550304133, 1.0000000000000000, 20.000000000000000,
7249 10.000000000000000, 0.50000000000000000 },
7250 { 23.344217312927277, 1.0000000000000000, 20.000000000000000,
7251 10.000000000000000, 0.60000000000000009 },
7252 { 149.83491198246921, 1.0000000000000000, 20.000000000000000,
7253 10.000000000000000, 0.69999999999999996 },
7254 { 3936.9253501916060, 1.0000000000000000, 20.000000000000000,
7255 10.000000000000000, 0.80000000000000004 },
7256 { 2794143.5036480185, 1.0000000000000000, 20.000000000000000,
7257 10.000000000000000, 0.89999999999999991 },
7258 };
7259
7260 // Test function for a=1.0000000000000000, b=20.000000000000000, c=10.000000000000000.
7261 template <typename Tp>
7262 void test105()
7263 {
7264 const Tp eps = std::numeric_limits<Tp>::epsilon();
7265 Tp max_abs_diff = -Tp(1);
7266 Tp max_abs_frac = -Tp(1);
7267 unsigned int num_datum = sizeof(data105)
7268 / sizeof(testcase_hyperg<double>);
7269 for (unsigned int i = 0; i < num_datum; ++i)
7270 {
7271 const Tp f = std::tr1::hyperg(Tp(data105[i].a), Tp(data105[i].b),
7272 Tp(data105[i].c), Tp(data105[i].x));
7273 const Tp f0 = data105[i].f0;
7274 const Tp diff = f - f0;
7275 if (std::abs(diff) > max_abs_diff)
7276 max_abs_diff = std::abs(diff);
7277 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
7278 {
7279 const Tp frac = diff / f0;
7280 if (std::abs(frac) > max_abs_frac)
7281 max_abs_frac = std::abs(frac);
7282 }
7283 }
7284 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7285 }
7286
7287 // Test data for a=2.0000000000000000, b=0.0000000000000000, c=2.0000000000000000.
7288 testcase_hyperg<double> data106[] = {
7289 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7290 2.0000000000000000, -0.90000000000000002 },
7291 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7292 2.0000000000000000, -0.80000000000000004 },
7293 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7294 2.0000000000000000, -0.69999999999999996 },
7295 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7296 2.0000000000000000, -0.59999999999999998 },
7297 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7298 2.0000000000000000, -0.50000000000000000 },
7299 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7300 2.0000000000000000, -0.40000000000000002 },
7301 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7302 2.0000000000000000, -0.30000000000000004 },
7303 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7304 2.0000000000000000, -0.19999999999999996 },
7305 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7306 2.0000000000000000, -0.099999999999999978 },
7307 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7308 2.0000000000000000, 0.0000000000000000 },
7309 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7310 2.0000000000000000, 0.10000000000000009 },
7311 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7312 2.0000000000000000, 0.19999999999999996 },
7313 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7314 2.0000000000000000, 0.30000000000000004 },
7315 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7316 2.0000000000000000, 0.39999999999999991 },
7317 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7318 2.0000000000000000, 0.50000000000000000 },
7319 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7320 2.0000000000000000, 0.60000000000000009 },
7321 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7322 2.0000000000000000, 0.69999999999999996 },
7323 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7324 2.0000000000000000, 0.80000000000000004 },
7325 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7326 2.0000000000000000, 0.89999999999999991 },
7327 };
7328
7329 // Test function for a=2.0000000000000000, b=0.0000000000000000, c=2.0000000000000000.
7330 template <typename Tp>
7331 void test106()
7332 {
7333 const Tp eps = std::numeric_limits<Tp>::epsilon();
7334 Tp max_abs_diff = -Tp(1);
7335 Tp max_abs_frac = -Tp(1);
7336 unsigned int num_datum = sizeof(data106)
7337 / sizeof(testcase_hyperg<double>);
7338 for (unsigned int i = 0; i < num_datum; ++i)
7339 {
7340 const Tp f = std::tr1::hyperg(Tp(data106[i].a), Tp(data106[i].b),
7341 Tp(data106[i].c), Tp(data106[i].x));
7342 const Tp f0 = data106[i].f0;
7343 const Tp diff = f - f0;
7344 if (std::abs(diff) > max_abs_diff)
7345 max_abs_diff = std::abs(diff);
7346 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
7347 {
7348 const Tp frac = diff / f0;
7349 if (std::abs(frac) > max_abs_frac)
7350 max_abs_frac = std::abs(frac);
7351 }
7352 }
7353 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7354 }
7355
7356 // Test data for a=2.0000000000000000, b=0.0000000000000000, c=4.0000000000000000.
7357 testcase_hyperg<double> data107[] = {
7358 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7359 4.0000000000000000, -0.90000000000000002 },
7360 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7361 4.0000000000000000, -0.80000000000000004 },
7362 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7363 4.0000000000000000, -0.69999999999999996 },
7364 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7365 4.0000000000000000, -0.59999999999999998 },
7366 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7367 4.0000000000000000, -0.50000000000000000 },
7368 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7369 4.0000000000000000, -0.40000000000000002 },
7370 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7371 4.0000000000000000, -0.30000000000000004 },
7372 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7373 4.0000000000000000, -0.19999999999999996 },
7374 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7375 4.0000000000000000, -0.099999999999999978 },
7376 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7377 4.0000000000000000, 0.0000000000000000 },
7378 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7379 4.0000000000000000, 0.10000000000000009 },
7380 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7381 4.0000000000000000, 0.19999999999999996 },
7382 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7383 4.0000000000000000, 0.30000000000000004 },
7384 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7385 4.0000000000000000, 0.39999999999999991 },
7386 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7387 4.0000000000000000, 0.50000000000000000 },
7388 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7389 4.0000000000000000, 0.60000000000000009 },
7390 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7391 4.0000000000000000, 0.69999999999999996 },
7392 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7393 4.0000000000000000, 0.80000000000000004 },
7394 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7395 4.0000000000000000, 0.89999999999999991 },
7396 };
7397
7398 // Test function for a=2.0000000000000000, b=0.0000000000000000, c=4.0000000000000000.
7399 template <typename Tp>
7400 void test107()
7401 {
7402 const Tp eps = std::numeric_limits<Tp>::epsilon();
7403 Tp max_abs_diff = -Tp(1);
7404 Tp max_abs_frac = -Tp(1);
7405 unsigned int num_datum = sizeof(data107)
7406 / sizeof(testcase_hyperg<double>);
7407 for (unsigned int i = 0; i < num_datum; ++i)
7408 {
7409 const Tp f = std::tr1::hyperg(Tp(data107[i].a), Tp(data107[i].b),
7410 Tp(data107[i].c), Tp(data107[i].x));
7411 const Tp f0 = data107[i].f0;
7412 const Tp diff = f - f0;
7413 if (std::abs(diff) > max_abs_diff)
7414 max_abs_diff = std::abs(diff);
7415 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
7416 {
7417 const Tp frac = diff / f0;
7418 if (std::abs(frac) > max_abs_frac)
7419 max_abs_frac = std::abs(frac);
7420 }
7421 }
7422 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7423 }
7424
7425 // Test data for a=2.0000000000000000, b=0.0000000000000000, c=6.0000000000000000.
7426 testcase_hyperg<double> data108[] = {
7427 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7428 6.0000000000000000, -0.90000000000000002 },
7429 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7430 6.0000000000000000, -0.80000000000000004 },
7431 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7432 6.0000000000000000, -0.69999999999999996 },
7433 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7434 6.0000000000000000, -0.59999999999999998 },
7435 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7436 6.0000000000000000, -0.50000000000000000 },
7437 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7438 6.0000000000000000, -0.40000000000000002 },
7439 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7440 6.0000000000000000, -0.30000000000000004 },
7441 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7442 6.0000000000000000, -0.19999999999999996 },
7443 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7444 6.0000000000000000, -0.099999999999999978 },
7445 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7446 6.0000000000000000, 0.0000000000000000 },
7447 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7448 6.0000000000000000, 0.10000000000000009 },
7449 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7450 6.0000000000000000, 0.19999999999999996 },
7451 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7452 6.0000000000000000, 0.30000000000000004 },
7453 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7454 6.0000000000000000, 0.39999999999999991 },
7455 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7456 6.0000000000000000, 0.50000000000000000 },
7457 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7458 6.0000000000000000, 0.60000000000000009 },
7459 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7460 6.0000000000000000, 0.69999999999999996 },
7461 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7462 6.0000000000000000, 0.80000000000000004 },
7463 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7464 6.0000000000000000, 0.89999999999999991 },
7465 };
7466
7467 // Test function for a=2.0000000000000000, b=0.0000000000000000, c=6.0000000000000000.
7468 template <typename Tp>
7469 void test108()
7470 {
7471 const Tp eps = std::numeric_limits<Tp>::epsilon();
7472 Tp max_abs_diff = -Tp(1);
7473 Tp max_abs_frac = -Tp(1);
7474 unsigned int num_datum = sizeof(data108)
7475 / sizeof(testcase_hyperg<double>);
7476 for (unsigned int i = 0; i < num_datum; ++i)
7477 {
7478 const Tp f = std::tr1::hyperg(Tp(data108[i].a), Tp(data108[i].b),
7479 Tp(data108[i].c), Tp(data108[i].x));
7480 const Tp f0 = data108[i].f0;
7481 const Tp diff = f - f0;
7482 if (std::abs(diff) > max_abs_diff)
7483 max_abs_diff = std::abs(diff);
7484 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
7485 {
7486 const Tp frac = diff / f0;
7487 if (std::abs(frac) > max_abs_frac)
7488 max_abs_frac = std::abs(frac);
7489 }
7490 }
7491 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7492 }
7493
7494 // Test data for a=2.0000000000000000, b=0.0000000000000000, c=8.0000000000000000.
7495 testcase_hyperg<double> data109[] = {
7496 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7497 8.0000000000000000, -0.90000000000000002 },
7498 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7499 8.0000000000000000, -0.80000000000000004 },
7500 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7501 8.0000000000000000, -0.69999999999999996 },
7502 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7503 8.0000000000000000, -0.59999999999999998 },
7504 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7505 8.0000000000000000, -0.50000000000000000 },
7506 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7507 8.0000000000000000, -0.40000000000000002 },
7508 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7509 8.0000000000000000, -0.30000000000000004 },
7510 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7511 8.0000000000000000, -0.19999999999999996 },
7512 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7513 8.0000000000000000, -0.099999999999999978 },
7514 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7515 8.0000000000000000, 0.0000000000000000 },
7516 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7517 8.0000000000000000, 0.10000000000000009 },
7518 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7519 8.0000000000000000, 0.19999999999999996 },
7520 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7521 8.0000000000000000, 0.30000000000000004 },
7522 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7523 8.0000000000000000, 0.39999999999999991 },
7524 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7525 8.0000000000000000, 0.50000000000000000 },
7526 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7527 8.0000000000000000, 0.60000000000000009 },
7528 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7529 8.0000000000000000, 0.69999999999999996 },
7530 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7531 8.0000000000000000, 0.80000000000000004 },
7532 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7533 8.0000000000000000, 0.89999999999999991 },
7534 };
7535
7536 // Test function for a=2.0000000000000000, b=0.0000000000000000, c=8.0000000000000000.
7537 template <typename Tp>
7538 void test109()
7539 {
7540 const Tp eps = std::numeric_limits<Tp>::epsilon();
7541 Tp max_abs_diff = -Tp(1);
7542 Tp max_abs_frac = -Tp(1);
7543 unsigned int num_datum = sizeof(data109)
7544 / sizeof(testcase_hyperg<double>);
7545 for (unsigned int i = 0; i < num_datum; ++i)
7546 {
7547 const Tp f = std::tr1::hyperg(Tp(data109[i].a), Tp(data109[i].b),
7548 Tp(data109[i].c), Tp(data109[i].x));
7549 const Tp f0 = data109[i].f0;
7550 const Tp diff = f - f0;
7551 if (std::abs(diff) > max_abs_diff)
7552 max_abs_diff = std::abs(diff);
7553 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
7554 {
7555 const Tp frac = diff / f0;
7556 if (std::abs(frac) > max_abs_frac)
7557 max_abs_frac = std::abs(frac);
7558 }
7559 }
7560 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7561 }
7562
7563 // Test data for a=2.0000000000000000, b=0.0000000000000000, c=10.000000000000000.
7564 testcase_hyperg<double> data110[] = {
7565 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7566 10.000000000000000, -0.90000000000000002 },
7567 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7568 10.000000000000000, -0.80000000000000004 },
7569 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7570 10.000000000000000, -0.69999999999999996 },
7571 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7572 10.000000000000000, -0.59999999999999998 },
7573 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7574 10.000000000000000, -0.50000000000000000 },
7575 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7576 10.000000000000000, -0.40000000000000002 },
7577 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7578 10.000000000000000, -0.30000000000000004 },
7579 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7580 10.000000000000000, -0.19999999999999996 },
7581 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7582 10.000000000000000, -0.099999999999999978 },
7583 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7584 10.000000000000000, 0.0000000000000000 },
7585 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7586 10.000000000000000, 0.10000000000000009 },
7587 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7588 10.000000000000000, 0.19999999999999996 },
7589 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7590 10.000000000000000, 0.30000000000000004 },
7591 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7592 10.000000000000000, 0.39999999999999991 },
7593 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7594 10.000000000000000, 0.50000000000000000 },
7595 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7596 10.000000000000000, 0.60000000000000009 },
7597 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7598 10.000000000000000, 0.69999999999999996 },
7599 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7600 10.000000000000000, 0.80000000000000004 },
7601 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7602 10.000000000000000, 0.89999999999999991 },
7603 };
7604
7605 // Test function for a=2.0000000000000000, b=0.0000000000000000, c=10.000000000000000.
7606 template <typename Tp>
7607 void test110()
7608 {
7609 const Tp eps = std::numeric_limits<Tp>::epsilon();
7610 Tp max_abs_diff = -Tp(1);
7611 Tp max_abs_frac = -Tp(1);
7612 unsigned int num_datum = sizeof(data110)
7613 / sizeof(testcase_hyperg<double>);
7614 for (unsigned int i = 0; i < num_datum; ++i)
7615 {
7616 const Tp f = std::tr1::hyperg(Tp(data110[i].a), Tp(data110[i].b),
7617 Tp(data110[i].c), Tp(data110[i].x));
7618 const Tp f0 = data110[i].f0;
7619 const Tp diff = f - f0;
7620 if (std::abs(diff) > max_abs_diff)
7621 max_abs_diff = std::abs(diff);
7622 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
7623 {
7624 const Tp frac = diff / f0;
7625 if (std::abs(frac) > max_abs_frac)
7626 max_abs_frac = std::abs(frac);
7627 }
7628 }
7629 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7630 }
7631
7632 // Test data for a=2.0000000000000000, b=0.50000000000000000, c=2.0000000000000000.
7633 testcase_hyperg<double> data111[] = {
7634 { 0.72547625011001171, 2.0000000000000000, 0.50000000000000000,
7635 2.0000000000000000, -0.90000000000000002 },
7636 { 0.74535599249992990, 2.0000000000000000, 0.50000000000000000,
7637 2.0000000000000000, -0.80000000000000004 },
7638 { 0.76696498884737041, 2.0000000000000000, 0.50000000000000000,
7639 2.0000000000000000, -0.69999999999999996 },
7640 { 0.79056941504209477, 2.0000000000000000, 0.50000000000000000,
7641 2.0000000000000000, -0.59999999999999998 },
7642 { 0.81649658092772603, 2.0000000000000000, 0.50000000000000000,
7643 2.0000000000000000, -0.50000000000000000 },
7644 { 0.84515425472851657, 2.0000000000000000, 0.50000000000000000,
7645 2.0000000000000000, -0.40000000000000002 },
7646 { 0.87705801930702920, 2.0000000000000000, 0.50000000000000000,
7647 2.0000000000000000, -0.30000000000000004 },
7648 { 0.91287092917527690, 2.0000000000000000, 0.50000000000000000,
7649 2.0000000000000000, -0.19999999999999996 },
7650 { 0.95346258924559224, 2.0000000000000000, 0.50000000000000000,
7651 2.0000000000000000, -0.099999999999999978 },
7652 { 1.0000000000000000, 2.0000000000000000, 0.50000000000000000,
7653 2.0000000000000000, 0.0000000000000000 },
7654 { 1.0540925533894598, 2.0000000000000000, 0.50000000000000000,
7655 2.0000000000000000, 0.10000000000000009 },
7656 { 1.1180339887498949, 2.0000000000000000, 0.50000000000000000,
7657 2.0000000000000000, 0.19999999999999996 },
7658 { 1.1952286093343938, 2.0000000000000000, 0.50000000000000000,
7659 2.0000000000000000, 0.30000000000000004 },
7660 { 1.2909944487358056, 2.0000000000000000, 0.50000000000000000,
7661 2.0000000000000000, 0.39999999999999991 },
7662 { 1.4142135623730949, 2.0000000000000000, 0.50000000000000000,
7663 2.0000000000000000, 0.50000000000000000 },
7664 { 1.5811388300841900, 2.0000000000000000, 0.50000000000000000,
7665 2.0000000000000000, 0.60000000000000009 },
7666 { 1.8257418583505536, 2.0000000000000000, 0.50000000000000000,
7667 2.0000000000000000, 0.69999999999999996 },
7668 { 2.2360679774997898, 2.0000000000000000, 0.50000000000000000,
7669 2.0000000000000000, 0.80000000000000004 },
7670 { 3.1622776601683782, 2.0000000000000000, 0.50000000000000000,
7671 2.0000000000000000, 0.89999999999999991 },
7672 };
7673
7674 // Test function for a=2.0000000000000000, b=0.50000000000000000, c=2.0000000000000000.
7675 template <typename Tp>
7676 void test111()
7677 {
7678 const Tp eps = std::numeric_limits<Tp>::epsilon();
7679 Tp max_abs_diff = -Tp(1);
7680 Tp max_abs_frac = -Tp(1);
7681 unsigned int num_datum = sizeof(data111)
7682 / sizeof(testcase_hyperg<double>);
7683 for (unsigned int i = 0; i < num_datum; ++i)
7684 {
7685 const Tp f = std::tr1::hyperg(Tp(data111[i].a), Tp(data111[i].b),
7686 Tp(data111[i].c), Tp(data111[i].x));
7687 const Tp f0 = data111[i].f0;
7688 const Tp diff = f - f0;
7689 if (std::abs(diff) > max_abs_diff)
7690 max_abs_diff = std::abs(diff);
7691 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
7692 {
7693 const Tp frac = diff / f0;
7694 if (std::abs(frac) > max_abs_frac)
7695 max_abs_frac = std::abs(frac);
7696 }
7697 }
7698 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7699 }
7700
7701 // Test data for a=2.0000000000000000, b=0.50000000000000000, c=4.0000000000000000.
7702 testcase_hyperg<double> data112[] = {
7703 { 0.83664260086443798, 2.0000000000000000, 0.50000000000000000,
7704 4.0000000000000000, -0.90000000000000002 },
7705 { 0.85046584300227146, 2.0000000000000000, 0.50000000000000000,
7706 4.0000000000000000, -0.80000000000000004 },
7707 { 0.86509574979651593, 2.0000000000000000, 0.50000000000000000,
7708 4.0000000000000000, -0.69999999999999996 },
7709 { 0.88062082573041867, 2.0000000000000000, 0.50000000000000000,
7710 4.0000000000000000, -0.59999999999999998 },
7711 { 0.89714464248521586, 2.0000000000000000, 0.50000000000000000,
7712 4.0000000000000000, -0.50000000000000000 },
7713 { 0.91478946588967558, 2.0000000000000000, 0.50000000000000000,
7714 4.0000000000000000, -0.40000000000000002 },
7715 { 0.93370105322348573, 2.0000000000000000, 0.50000000000000000,
7716 4.0000000000000000, -0.30000000000000004 },
7717 { 0.95405511057700887, 2.0000000000000000, 0.50000000000000000,
7718 4.0000000000000000, -0.19999999999999996 },
7719 { 0.97606616007978142, 2.0000000000000000, 0.50000000000000000,
7720 4.0000000000000000, -0.099999999999999978 },
7721 { 1.0000000000000000, 2.0000000000000000, 0.50000000000000000,
7722 4.0000000000000000, 0.0000000000000000 },
7723 { 1.0261916902334731, 2.0000000000000000, 0.50000000000000000,
7724 4.0000000000000000, 0.10000000000000009 },
7725 { 1.0550723519434702, 2.0000000000000000, 0.50000000000000000,
7726 4.0000000000000000, 0.19999999999999996 },
7727 { 1.0872106588188091, 2.0000000000000000, 0.50000000000000000,
7728 4.0000000000000000, 0.30000000000000004 },
7729 { 1.1233801699379020, 2.0000000000000000, 0.50000000000000000,
7730 4.0000000000000000, 0.39999999999999991 },
7731 { 1.1646752981725688, 2.0000000000000000, 0.50000000000000000,
7732 4.0000000000000000, 0.50000000000000000 },
7733 { 1.2127272514219511, 2.0000000000000000, 0.50000000000000000,
7734 4.0000000000000000, 0.60000000000000009 },
7735 { 1.2701518651068637, 2.0000000000000000, 0.50000000000000000,
7736 4.0000000000000000, 0.69999999999999996 },
7737 { 1.3416407864998725, 2.0000000000000000, 0.50000000000000000,
7738 4.0000000000000000, 0.80000000000000004 },
7739 { 1.4374795179111102, 2.0000000000000000, 0.50000000000000000,
7740 4.0000000000000000, 0.89999999999999991 },
7741 };
7742
7743 // Test function for a=2.0000000000000000, b=0.50000000000000000, c=4.0000000000000000.
7744 template <typename Tp>
7745 void test112()
7746 {
7747 const Tp eps = std::numeric_limits<Tp>::epsilon();
7748 Tp max_abs_diff = -Tp(1);
7749 Tp max_abs_frac = -Tp(1);
7750 unsigned int num_datum = sizeof(data112)
7751 / sizeof(testcase_hyperg<double>);
7752 for (unsigned int i = 0; i < num_datum; ++i)
7753 {
7754 const Tp f = std::tr1::hyperg(Tp(data112[i].a), Tp(data112[i].b),
7755 Tp(data112[i].c), Tp(data112[i].x));
7756 const Tp f0 = data112[i].f0;
7757 const Tp diff = f - f0;
7758 if (std::abs(diff) > max_abs_diff)
7759 max_abs_diff = std::abs(diff);
7760 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
7761 {
7762 const Tp frac = diff / f0;
7763 if (std::abs(frac) > max_abs_frac)
7764 max_abs_frac = std::abs(frac);
7765 }
7766 }
7767 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7768 }
7769
7770 // Test data for a=2.0000000000000000, b=0.50000000000000000, c=6.0000000000000000.
7771 testcase_hyperg<double> data113[] = {
7772 { 0.88195381730235833, 2.0000000000000000, 0.50000000000000000,
7773 6.0000000000000000, -0.90000000000000002 },
7774 { 0.89265078469555093, 2.0000000000000000, 0.50000000000000000,
7775 6.0000000000000000, -0.80000000000000004 },
7776 { 0.90382937908303707, 2.0000000000000000, 0.50000000000000000,
7777 6.0000000000000000, -0.69999999999999996 },
7778 { 0.91553161389880577, 2.0000000000000000, 0.50000000000000000,
7779 6.0000000000000000, -0.59999999999999998 },
7780 { 0.92780530349281576, 2.0000000000000000, 0.50000000000000000,
7781 6.0000000000000000, -0.50000000000000000 },
7782 { 0.94070521140346042, 2.0000000000000000, 0.50000000000000000,
7783 6.0000000000000000, -0.40000000000000002 },
7784 { 0.95429450630523349, 2.0000000000000000, 0.50000000000000000,
7785 6.0000000000000000, -0.30000000000000004 },
7786 { 0.96864663325785849, 2.0000000000000000, 0.50000000000000000,
7787 6.0000000000000000, -0.19999999999999996 },
7788 { 0.98384775588541795, 2.0000000000000000, 0.50000000000000000,
7789 6.0000000000000000, -0.099999999999999978 },
7790 { 1.0000000000000000, 2.0000000000000000, 0.50000000000000000,
7791 6.0000000000000000, 0.0000000000000000 },
7792 { 1.0172258496884334, 2.0000000000000000, 0.50000000000000000,
7793 6.0000000000000000, 0.10000000000000009 },
7794 { 1.0356742479163459, 2.0000000000000000, 0.50000000000000000,
7795 6.0000000000000000, 0.19999999999999996 },
7796 { 1.0555293036908924, 2.0000000000000000, 0.50000000000000000,
7797 6.0000000000000000, 0.30000000000000004 },
7798 { 1.0770231491562379, 2.0000000000000000, 0.50000000000000000,
7799 6.0000000000000000, 0.39999999999999991 },
7800 { 1.1004557416484888, 2.0000000000000000, 0.50000000000000000,
7801 6.0000000000000000, 0.50000000000000000 },
7802 { 1.1262270515731978, 2.0000000000000000, 0.50000000000000000,
7803 6.0000000000000000, 0.60000000000000009 },
7804 { 1.1548932919125086, 2.0000000000000000, 0.50000000000000000,
7805 6.0000000000000000, 0.69999999999999996 },
7806 { 1.1872757758134724, 2.0000000000000000, 0.50000000000000000,
7807 6.0000000000000000, 0.80000000000000004 },
7808 { 1.2247091713458949, 2.0000000000000000, 0.50000000000000000,
7809 6.0000000000000000, 0.89999999999999991 },
7810 };
7811
7812 // Test function for a=2.0000000000000000, b=0.50000000000000000, c=6.0000000000000000.
7813 template <typename Tp>
7814 void test113()
7815 {
7816 const Tp eps = std::numeric_limits<Tp>::epsilon();
7817 Tp max_abs_diff = -Tp(1);
7818 Tp max_abs_frac = -Tp(1);
7819 unsigned int num_datum = sizeof(data113)
7820 / sizeof(testcase_hyperg<double>);
7821 for (unsigned int i = 0; i < num_datum; ++i)
7822 {
7823 const Tp f = std::tr1::hyperg(Tp(data113[i].a), Tp(data113[i].b),
7824 Tp(data113[i].c), Tp(data113[i].x));
7825 const Tp f0 = data113[i].f0;
7826 const Tp diff = f - f0;
7827 if (std::abs(diff) > max_abs_diff)
7828 max_abs_diff = std::abs(diff);
7829 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
7830 {
7831 const Tp frac = diff / f0;
7832 if (std::abs(frac) > max_abs_frac)
7833 max_abs_frac = std::abs(frac);
7834 }
7835 }
7836 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7837 }
7838
7839 // Test data for a=2.0000000000000000, b=0.50000000000000000, c=8.0000000000000000.
7840 testcase_hyperg<double> data114[] = {
7841 { 0.90716919697107301, 2.0000000000000000, 0.50000000000000000,
7842 8.0000000000000000, -0.90000000000000002 },
7843 { 0.91592299407142519, 2.0000000000000000, 0.50000000000000000,
7844 8.0000000000000000, -0.80000000000000004 },
7845 { 0.92500027075874236, 2.0000000000000000, 0.50000000000000000,
7846 8.0000000000000000, -0.69999999999999996 },
7847 { 0.93442464185467167, 2.0000000000000000, 0.50000000000000000,
7848 8.0000000000000000, -0.59999999999999998 },
7849 { 0.94422248683737009, 2.0000000000000000, 0.50000000000000000,
7850 8.0000000000000000, -0.50000000000000000 },
7851 { 0.95442341810133347, 2.0000000000000000, 0.50000000000000000,
7852 8.0000000000000000, -0.40000000000000002 },
7853 { 0.96506085725516400, 2.0000000000000000, 0.50000000000000000,
7854 8.0000000000000000, -0.30000000000000004 },
7855 { 0.97617275213704069, 2.0000000000000000, 0.50000000000000000,
7856 8.0000000000000000, -0.19999999999999996 },
7857 { 0.98780247986309799, 2.0000000000000000, 0.50000000000000000,
7858 8.0000000000000000, -0.099999999999999978 },
7859 { 1.0000000000000000, 2.0000000000000000, 0.50000000000000000,
7860 8.0000000000000000, 0.0000000000000000 },
7861 { 1.0128233505813447, 2.0000000000000000, 0.50000000000000000,
7862 8.0000000000000000, 0.10000000000000009 },
7863 { 1.0263406246541855, 2.0000000000000000, 0.50000000000000000,
7864 8.0000000000000000, 0.19999999999999996 },
7865 { 1.0406326381700366, 2.0000000000000000, 0.50000000000000000,
7866 8.0000000000000000, 0.30000000000000004 },
7867 { 1.0557966239802845, 2.0000000000000000, 0.50000000000000000,
7868 8.0000000000000000, 0.39999999999999991 },
7869 { 1.0719515075786321, 2.0000000000000000, 0.50000000000000000,
7870 8.0000000000000000, 0.50000000000000000 },
7871 { 1.0892457392422055, 2.0000000000000000, 0.50000000000000000,
7872 8.0000000000000000, 0.60000000000000009 },
7873 { 1.1078695188000958, 2.0000000000000000, 0.50000000000000000,
7874 8.0000000000000000, 0.69999999999999996 },
7875 { 1.1280752258974340, 2.0000000000000000, 0.50000000000000000,
7876 8.0000000000000000, 0.80000000000000004 },
7877 { 1.1502152002706476, 2.0000000000000000, 0.50000000000000000,
7878 8.0000000000000000, 0.89999999999999991 },
7879 };
7880
7881 // Test function for a=2.0000000000000000, b=0.50000000000000000, c=8.0000000000000000.
7882 template <typename Tp>
7883 void test114()
7884 {
7885 const Tp eps = std::numeric_limits<Tp>::epsilon();
7886 Tp max_abs_diff = -Tp(1);
7887 Tp max_abs_frac = -Tp(1);
7888 unsigned int num_datum = sizeof(data114)
7889 / sizeof(testcase_hyperg<double>);
7890 for (unsigned int i = 0; i < num_datum; ++i)
7891 {
7892 const Tp f = std::tr1::hyperg(Tp(data114[i].a), Tp(data114[i].b),
7893 Tp(data114[i].c), Tp(data114[i].x));
7894 const Tp f0 = data114[i].f0;
7895 const Tp diff = f - f0;
7896 if (std::abs(diff) > max_abs_diff)
7897 max_abs_diff = std::abs(diff);
7898 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
7899 {
7900 const Tp frac = diff / f0;
7901 if (std::abs(frac) > max_abs_frac)
7902 max_abs_frac = std::abs(frac);
7903 }
7904 }
7905 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7906 }
7907
7908 // Test data for a=2.0000000000000000, b=0.50000000000000000, c=10.000000000000000.
7909 testcase_hyperg<double> data115[] = {
7910 { 0.92336416053263093, 2.0000000000000000, 0.50000000000000000,
7911 10.000000000000000, -0.90000000000000002 },
7912 { 0.93078397248364519, 2.0000000000000000, 0.50000000000000000,
7913 10.000000000000000, -0.80000000000000004 },
7914 { 0.93843714333600226, 2.0000000000000000, 0.50000000000000000,
7915 10.000000000000000, -0.69999999999999996 },
7916 { 0.94633837784068076, 2.0000000000000000, 0.50000000000000000,
7917 10.000000000000000, -0.59999999999999998 },
7918 { 0.95450388104967909, 2.0000000000000000, 0.50000000000000000,
7919 10.000000000000000, -0.50000000000000000 },
7920 { 0.96295158125742764, 2.0000000000000000, 0.50000000000000000,
7921 10.000000000000000, -0.40000000000000002 },
7922 { 0.97170139827854296, 2.0000000000000000, 0.50000000000000000,
7923 10.000000000000000, -0.30000000000000004 },
7924 { 0.98077556918512687, 2.0000000000000000, 0.50000000000000000,
7925 10.000000000000000, -0.19999999999999996 },
7926 { 0.99019904777750845, 2.0000000000000000, 0.50000000000000000,
7927 10.000000000000000, -0.099999999999999978 },
7928 { 1.0000000000000000, 2.0000000000000000, 0.50000000000000000,
7929 10.000000000000000, 0.0000000000000000 },
7930 { 1.0102104261941198, 2.0000000000000000, 0.50000000000000000,
7931 10.000000000000000, 0.10000000000000009 },
7932 { 1.0208669540935695, 2.0000000000000000, 0.50000000000000000,
7933 10.000000000000000, 0.19999999999999996 },
7934 { 1.0320118665407505, 2.0000000000000000, 0.50000000000000000,
7935 10.000000000000000, 0.30000000000000004 },
7936 { 1.0436944599504387, 2.0000000000000000, 0.50000000000000000,
7937 10.000000000000000, 0.39999999999999991 },
7938 { 1.0559728828278145, 2.0000000000000000, 0.50000000000000000,
7939 10.000000000000000, 0.50000000000000000 },
7940 { 1.0689166967761712, 2.0000000000000000, 0.50000000000000000,
7941 10.000000000000000, 0.60000000000000009 },
7942 { 1.0826105758119842, 2.0000000000000000, 0.50000000000000000,
7943 10.000000000000000, 0.69999999999999996 },
7944 { 1.0971599106346146, 2.0000000000000000, 0.50000000000000000,
7945 10.000000000000000, 0.80000000000000004 },
7946 { 1.1126998828023964, 2.0000000000000000, 0.50000000000000000,
7947 10.000000000000000, 0.89999999999999991 },
7948 };
7949
7950 // Test function for a=2.0000000000000000, b=0.50000000000000000, c=10.000000000000000.
7951 template <typename Tp>
7952 void test115()
7953 {
7954 const Tp eps = std::numeric_limits<Tp>::epsilon();
7955 Tp max_abs_diff = -Tp(1);
7956 Tp max_abs_frac = -Tp(1);
7957 unsigned int num_datum = sizeof(data115)
7958 / sizeof(testcase_hyperg<double>);
7959 for (unsigned int i = 0; i < num_datum; ++i)
7960 {
7961 const Tp f = std::tr1::hyperg(Tp(data115[i].a), Tp(data115[i].b),
7962 Tp(data115[i].c), Tp(data115[i].x));
7963 const Tp f0 = data115[i].f0;
7964 const Tp diff = f - f0;
7965 if (std::abs(diff) > max_abs_diff)
7966 max_abs_diff = std::abs(diff);
7967 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
7968 {
7969 const Tp frac = diff / f0;
7970 if (std::abs(frac) > max_abs_frac)
7971 max_abs_frac = std::abs(frac);
7972 }
7973 }
7974 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7975 }
7976
7977 // Test data for a=2.0000000000000000, b=1.0000000000000000, c=2.0000000000000000.
7978 testcase_hyperg<double> data116[] = {
7979 { 0.52631578947368429, 2.0000000000000000, 1.0000000000000000,
7980 2.0000000000000000, -0.90000000000000002 },
7981 { 0.55555555555555558, 2.0000000000000000, 1.0000000000000000,
7982 2.0000000000000000, -0.80000000000000004 },
7983 { 0.58823529411764708, 2.0000000000000000, 1.0000000000000000,
7984 2.0000000000000000, -0.69999999999999996 },
7985 { 0.62500000000000000, 2.0000000000000000, 1.0000000000000000,
7986 2.0000000000000000, -0.59999999999999998 },
7987 { 0.66666666666666663, 2.0000000000000000, 1.0000000000000000,
7988 2.0000000000000000, -0.50000000000000000 },
7989 { 0.71428571428571430, 2.0000000000000000, 1.0000000000000000,
7990 2.0000000000000000, -0.40000000000000002 },
7991 { 0.76923076923076927, 2.0000000000000000, 1.0000000000000000,
7992 2.0000000000000000, -0.30000000000000004 },
7993 { 0.83333333333333337, 2.0000000000000000, 1.0000000000000000,
7994 2.0000000000000000, -0.19999999999999996 },
7995 { 0.90909090909090906, 2.0000000000000000, 1.0000000000000000,
7996 2.0000000000000000, -0.099999999999999978 },
7997 { 1.0000000000000000, 2.0000000000000000, 1.0000000000000000,
7998 2.0000000000000000, 0.0000000000000000 },
7999 { 1.1111111111111112, 2.0000000000000000, 1.0000000000000000,
8000 2.0000000000000000, 0.10000000000000009 },
8001 { 1.2500000000000000, 2.0000000000000000, 1.0000000000000000,
8002 2.0000000000000000, 0.19999999999999996 },
8003 { 1.4285714285714286, 2.0000000000000000, 1.0000000000000000,
8004 2.0000000000000000, 0.30000000000000004 },
8005 { 1.6666666666666663, 2.0000000000000000, 1.0000000000000000,
8006 2.0000000000000000, 0.39999999999999991 },
8007 { 2.0000000000000000, 2.0000000000000000, 1.0000000000000000,
8008 2.0000000000000000, 0.50000000000000000 },
8009 { 2.5000000000000004, 2.0000000000000000, 1.0000000000000000,
8010 2.0000000000000000, 0.60000000000000009 },
8011 { 3.3333333333333330, 2.0000000000000000, 1.0000000000000000,
8012 2.0000000000000000, 0.69999999999999996 },
8013 { 5.0000000000000009, 2.0000000000000000, 1.0000000000000000,
8014 2.0000000000000000, 0.80000000000000004 },
8015 { 9.9999999999999929, 2.0000000000000000, 1.0000000000000000,
8016 2.0000000000000000, 0.89999999999999991 },
8017 };
8018
8019 // Test function for a=2.0000000000000000, b=1.0000000000000000, c=2.0000000000000000.
8020 template <typename Tp>
8021 void test116()
8022 {
8023 const Tp eps = std::numeric_limits<Tp>::epsilon();
8024 Tp max_abs_diff = -Tp(1);
8025 Tp max_abs_frac = -Tp(1);
8026 unsigned int num_datum = sizeof(data116)
8027 / sizeof(testcase_hyperg<double>);
8028 for (unsigned int i = 0; i < num_datum; ++i)
8029 {
8030 const Tp f = std::tr1::hyperg(Tp(data116[i].a), Tp(data116[i].b),
8031 Tp(data116[i].c), Tp(data116[i].x));
8032 const Tp f0 = data116[i].f0;
8033 const Tp diff = f - f0;
8034 if (std::abs(diff) > max_abs_diff)
8035 max_abs_diff = std::abs(diff);
8036 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
8037 {
8038 const Tp frac = diff / f0;
8039 if (std::abs(frac) > max_abs_frac)
8040 max_abs_frac = std::abs(frac);
8041 }
8042 }
8043 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8044 }
8045
8046 // Test data for a=2.0000000000000000, b=1.0000000000000000, c=4.0000000000000000.
8047 testcase_hyperg<double> data117[] = {
8048 { 0.70351947549341520, 2.0000000000000000, 1.0000000000000000,
8049 4.0000000000000000, -0.90000000000000002 },
8050 { 0.72637503722092711, 2.0000000000000000, 1.0000000000000000,
8051 4.0000000000000000, -0.80000000000000004 },
8052 { 0.75099661564391251, 2.0000000000000000, 1.0000000000000000,
8053 4.0000000000000000, -0.69999999999999996 },
8054 { 0.77761647796730871, 2.0000000000000000, 1.0000000000000000,
8055 4.0000000000000000, -0.59999999999999998 },
8056 { 0.80651221621216451, 2.0000000000000000, 1.0000000000000000,
8057 4.0000000000000000, -0.50000000000000000 },
8058 { 0.83801894346580275, 2.0000000000000000, 1.0000000000000000,
8059 4.0000000000000000, -0.40000000000000002 },
8060 { 0.87254582050258467, 2.0000000000000000, 1.0000000000000000,
8061 4.0000000000000000, -0.30000000000000004 },
8062 { 0.91059888544083678, 2.0000000000000000, 1.0000000000000000,
8063 4.0000000000000000, -0.19999999999999996 },
8064 { 0.95281329145592386, 2.0000000000000000, 1.0000000000000000,
8065 4.0000000000000000, -0.099999999999999978 },
8066 { 1.0000000000000000, 2.0000000000000000, 1.0000000000000000,
8067 4.0000000000000000, 0.0000000000000000 },
8068 { 1.0532154477379738, 2.0000000000000000, 1.0000000000000000,
8069 4.0000000000000000, 0.10000000000000009 },
8070 { 1.1138692114741471, 2.0000000000000000, 1.0000000000000000,
8071 4.0000000000000000, 0.19999999999999996 },
8072 { 1.1838976095305187, 2.0000000000000000, 1.0000000000000000,
8073 4.0000000000000000, 0.30000000000000004 },
8074 { 1.2660586631630237, 2.0000000000000000, 1.0000000000000000,
8075 4.0000000000000000, 0.39999999999999991 },
8076 { 1.3644676665613118, 2.0000000000000000, 1.0000000000000000,
8077 4.0000000000000000, 0.50000000000000000 },
8078 { 1.4856585347316102, 2.0000000000000000, 1.0000000000000000,
8079 4.0000000000000000, 0.60000000000000009 },
8080 { 1.6409590443536872, 2.0000000000000000, 1.0000000000000000,
8081 4.0000000000000000, 0.69999999999999996 },
8082 { 1.8528798927325769, 2.0000000000000000, 1.0000000000000000,
8083 4.0000000000000000, 0.80000000000000004 },
8084 { 2.1789423102929644, 2.0000000000000000, 1.0000000000000000,
8085 4.0000000000000000, 0.89999999999999991 },
8086 };
8087
8088 // Test function for a=2.0000000000000000, b=1.0000000000000000, c=4.0000000000000000.
8089 template <typename Tp>
8090 void test117()
8091 {
8092 const Tp eps = std::numeric_limits<Tp>::epsilon();
8093 Tp max_abs_diff = -Tp(1);
8094 Tp max_abs_frac = -Tp(1);
8095 unsigned int num_datum = sizeof(data117)
8096 / sizeof(testcase_hyperg<double>);
8097 for (unsigned int i = 0; i < num_datum; ++i)
8098 {
8099 const Tp f = std::tr1::hyperg(Tp(data117[i].a), Tp(data117[i].b),
8100 Tp(data117[i].c), Tp(data117[i].x));
8101 const Tp f0 = data117[i].f0;
8102 const Tp diff = f - f0;
8103 if (std::abs(diff) > max_abs_diff)
8104 max_abs_diff = std::abs(diff);
8105 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
8106 {
8107 const Tp frac = diff / f0;
8108 if (std::abs(frac) > max_abs_frac)
8109 max_abs_frac = std::abs(frac);
8110 }
8111 }
8112 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8113 }
8114
8115 // Test data for a=2.0000000000000000, b=1.0000000000000000, c=6.0000000000000000.
8116 testcase_hyperg<double> data118[] = {
8117 { 0.78068027379106253, 2.0000000000000000, 1.0000000000000000,
8118 6.0000000000000000, -0.90000000000000002 },
8119 { 0.79924541976981278, 2.0000000000000000, 1.0000000000000000,
8120 6.0000000000000000, -0.80000000000000004 },
8121 { 0.81891305585650942, 2.0000000000000000, 1.0000000000000000,
8122 6.0000000000000000, -0.69999999999999996 },
8123 { 0.83979799626213270, 2.0000000000000000, 1.0000000000000000,
8124 6.0000000000000000, -0.59999999999999998 },
8125 { 0.86203315303160166, 2.0000000000000000, 1.0000000000000000,
8126 6.0000000000000000, -0.50000000000000000 },
8127 { 0.88577352485361693, 2.0000000000000000, 1.0000000000000000,
8128 6.0000000000000000, -0.40000000000000002 },
8129 { 0.91120135738402208, 2.0000000000000000, 1.0000000000000000,
8130 6.0000000000000000, -0.30000000000000004 },
8131 { 0.93853291956703588, 2.0000000000000000, 1.0000000000000000,
8132 6.0000000000000000, -0.19999999999999996 },
8133 { 0.96802755388922956, 2.0000000000000000, 1.0000000000000000,
8134 6.0000000000000000, -0.099999999999999978 },
8135 { 1.0000000000000000, 2.0000000000000000, 1.0000000000000000,
8136 6.0000000000000000, 0.0000000000000000 },
8137 { 1.0348375559194773, 2.0000000000000000, 1.0000000000000000,
8138 6.0000000000000000, 0.10000000000000009 },
8139 { 1.0730246119544820, 2.0000000000000000, 1.0000000000000000,
8140 6.0000000000000000, 0.19999999999999996 },
8141 { 1.1151788396279341, 2.0000000000000000, 1.0000000000000000,
8142 6.0000000000000000, 0.30000000000000004 },
8143 { 1.1621066403893472, 2.0000000000000000, 1.0000000000000000,
8144 6.0000000000000000, 0.39999999999999991 },
8145 { 1.2148922218710421, 2.0000000000000000, 1.0000000000000000,
8146 6.0000000000000000, 0.50000000000000000 },
8147 { 1.2750496810838674, 2.0000000000000000, 1.0000000000000000,
8148 6.0000000000000000, 0.60000000000000009 },
8149 { 1.3448048570872917, 2.0000000000000000, 1.0000000000000000,
8150 6.0000000000000000, 0.69999999999999996 },
8151 { 1.4276833109859521, 2.0000000000000000, 1.0000000000000000,
8152 6.0000000000000000, 0.80000000000000004 },
8153 { 1.5299976259379788, 2.0000000000000000, 1.0000000000000000,
8154 6.0000000000000000, 0.89999999999999991 },
8155 };
8156
8157 // Test function for a=2.0000000000000000, b=1.0000000000000000, c=6.0000000000000000.
8158 template <typename Tp>
8159 void test118()
8160 {
8161 const Tp eps = std::numeric_limits<Tp>::epsilon();
8162 Tp max_abs_diff = -Tp(1);
8163 Tp max_abs_frac = -Tp(1);
8164 unsigned int num_datum = sizeof(data118)
8165 / sizeof(testcase_hyperg<double>);
8166 for (unsigned int i = 0; i < num_datum; ++i)
8167 {
8168 const Tp f = std::tr1::hyperg(Tp(data118[i].a), Tp(data118[i].b),
8169 Tp(data118[i].c), Tp(data118[i].x));
8170 const Tp f0 = data118[i].f0;
8171 const Tp diff = f - f0;
8172 if (std::abs(diff) > max_abs_diff)
8173 max_abs_diff = std::abs(diff);
8174 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
8175 {
8176 const Tp frac = diff / f0;
8177 if (std::abs(frac) > max_abs_frac)
8178 max_abs_frac = std::abs(frac);
8179 }
8180 }
8181 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8182 }
8183
8184 // Test data for a=2.0000000000000000, b=1.0000000000000000, c=8.0000000000000000.
8185 testcase_hyperg<double> data119[] = {
8186 { 0.82510759951857582, 2.0000000000000000, 1.0000000000000000,
8187 8.0000000000000000, -0.90000000000000002 },
8188 { 0.84072786892782092, 2.0000000000000000, 1.0000000000000000,
8189 8.0000000000000000, -0.80000000000000004 },
8190 { 0.85710884896562356, 2.0000000000000000, 1.0000000000000000,
8191 8.0000000000000000, -0.69999999999999996 },
8192 { 0.87431674418118333, 2.0000000000000000, 1.0000000000000000,
8193 8.0000000000000000, -0.59999999999999998 },
8194 { 0.89242659229727017, 2.0000000000000000, 1.0000000000000000,
8195 8.0000000000000000, -0.50000000000000000 },
8196 { 0.91152392685930339, 2.0000000000000000, 1.0000000000000000,
8197 8.0000000000000000, -0.40000000000000002 },
8198 { 0.93170685950993570, 2.0000000000000000, 1.0000000000000000,
8199 8.0000000000000000, -0.30000000000000004 },
8200 { 0.95308871926790661, 2.0000000000000000, 1.0000000000000000,
8201 8.0000000000000000, -0.19999999999999996 },
8202 { 0.97580144325325802, 2.0000000000000000, 1.0000000000000000,
8203 8.0000000000000000, -0.099999999999999978 },
8204 { 1.0000000000000000, 2.0000000000000000, 1.0000000000000000,
8205 8.0000000000000000, 0.0000000000000000 },
8206 { 1.0258682619030324, 2.0000000000000000, 1.0000000000000000,
8207 8.0000000000000000, 0.10000000000000009 },
8208 { 1.0536269616706000, 2.0000000000000000, 1.0000000000000000,
8209 8.0000000000000000, 0.19999999999999996 },
8210 { 1.0835447330793833, 2.0000000000000000, 1.0000000000000000,
8211 8.0000000000000000, 0.30000000000000004 },
8212 { 1.1159538758396654, 2.0000000000000000, 1.0000000000000000,
8213 8.0000000000000000, 0.39999999999999991 },
8214 { 1.1512736659291880, 2.0000000000000000, 1.0000000000000000,
8215 8.0000000000000000, 0.50000000000000000 },
8216 { 1.1900463690116090, 2.0000000000000000, 1.0000000000000000,
8217 8.0000000000000000, 0.60000000000000009 },
8218 { 1.2329961591622411, 2.0000000000000000, 1.0000000000000000,
8219 8.0000000000000000, 0.69999999999999996 },
8220 { 1.2811334345669059, 2.0000000000000000, 1.0000000000000000,
8221 8.0000000000000000, 0.80000000000000004 },
8222 { 1.3359629014132051, 2.0000000000000000, 1.0000000000000000,
8223 8.0000000000000000, 0.89999999999999991 },
8224 };
8225
8226 // Test function for a=2.0000000000000000, b=1.0000000000000000, c=8.0000000000000000.
8227 template <typename Tp>
8228 void test119()
8229 {
8230 const Tp eps = std::numeric_limits<Tp>::epsilon();
8231 Tp max_abs_diff = -Tp(1);
8232 Tp max_abs_frac = -Tp(1);
8233 unsigned int num_datum = sizeof(data119)
8234 / sizeof(testcase_hyperg<double>);
8235 for (unsigned int i = 0; i < num_datum; ++i)
8236 {
8237 const Tp f = std::tr1::hyperg(Tp(data119[i].a), Tp(data119[i].b),
8238 Tp(data119[i].c), Tp(data119[i].x));
8239 const Tp f0 = data119[i].f0;
8240 const Tp diff = f - f0;
8241 if (std::abs(diff) > max_abs_diff)
8242 max_abs_diff = std::abs(diff);
8243 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
8244 {
8245 const Tp frac = diff / f0;
8246 if (std::abs(frac) > max_abs_frac)
8247 max_abs_frac = std::abs(frac);
8248 }
8249 }
8250 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8251 }
8252
8253 // Test data for a=2.0000000000000000, b=1.0000000000000000, c=10.000000000000000.
8254 testcase_hyperg<double> data120[] = {
8255 { 0.85426123653345876, 2.0000000000000000, 1.0000000000000000,
8256 10.000000000000000, -0.90000000000000002 },
8257 { 0.86774543390930370, 2.0000000000000000, 1.0000000000000000,
8258 10.000000000000000, -0.80000000000000004 },
8259 { 0.88178859537254239, 2.0000000000000000, 1.0000000000000000,
8260 10.000000000000000, -0.69999999999999996 },
8261 { 0.89643269097060951, 2.0000000000000000, 1.0000000000000000,
8262 10.000000000000000, -0.59999999999999998 },
8263 { 0.91172456687216763, 2.0000000000000000, 1.0000000000000000,
8264 10.000000000000000, -0.50000000000000000 },
8265 { 0.92771674975966134, 2.0000000000000000, 1.0000000000000000,
8266 10.000000000000000, -0.40000000000000002 },
8267 { 0.94446842993888647, 2.0000000000000000, 1.0000000000000000,
8268 10.000000000000000, -0.30000000000000004 },
8269 { 0.96204667481937678, 2.0000000000000000, 1.0000000000000000,
8270 10.000000000000000, -0.19999999999999996 },
8271 { 0.98052794339012128, 2.0000000000000000, 1.0000000000000000,
8272 10.000000000000000, -0.099999999999999978 },
8273 { 1.0000000000000000, 2.0000000000000000, 1.0000000000000000,
8274 10.000000000000000, 0.0000000000000000 },
8275 { 1.0205643671068179, 2.0000000000000000, 1.0000000000000000,
8276 10.000000000000000, 0.10000000000000009 },
8277 { 1.0423395201078882, 2.0000000000000000, 1.0000000000000000,
8278 10.000000000000000, 0.19999999999999996 },
8279 { 1.0654651277885334, 2.0000000000000000, 1.0000000000000000,
8280 10.000000000000000, 0.30000000000000004 },
8281 { 1.0901078068101382, 2.0000000000000000, 1.0000000000000000,
8282 10.000000000000000, 0.39999999999999991 },
8283 { 1.1164691415928940, 2.0000000000000000, 1.0000000000000000,
8284 10.000000000000000, 0.50000000000000000 },
8285 { 1.1447972335326551, 2.0000000000000000, 1.0000000000000000,
8286 10.000000000000000, 0.60000000000000009 },
8287 { 1.1754040384534161, 2.0000000000000000, 1.0000000000000000,
8288 10.000000000000000, 0.69999999999999996 },
8289 { 1.2086928679893112, 2.0000000000000000, 1.0000000000000000,
8290 10.000000000000000, 0.80000000000000004 },
8291 { 1.2452055640510711, 2.0000000000000000, 1.0000000000000000,
8292 10.000000000000000, 0.89999999999999991 },
8293 };
8294
8295 // Test function for a=2.0000000000000000, b=1.0000000000000000, c=10.000000000000000.
8296 template <typename Tp>
8297 void test120()
8298 {
8299 const Tp eps = std::numeric_limits<Tp>::epsilon();
8300 Tp max_abs_diff = -Tp(1);
8301 Tp max_abs_frac = -Tp(1);
8302 unsigned int num_datum = sizeof(data120)
8303 / sizeof(testcase_hyperg<double>);
8304 for (unsigned int i = 0; i < num_datum; ++i)
8305 {
8306 const Tp f = std::tr1::hyperg(Tp(data120[i].a), Tp(data120[i].b),
8307 Tp(data120[i].c), Tp(data120[i].x));
8308 const Tp f0 = data120[i].f0;
8309 const Tp diff = f - f0;
8310 if (std::abs(diff) > max_abs_diff)
8311 max_abs_diff = std::abs(diff);
8312 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
8313 {
8314 const Tp frac = diff / f0;
8315 if (std::abs(frac) > max_abs_frac)
8316 max_abs_frac = std::abs(frac);
8317 }
8318 }
8319 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8320 }
8321
8322 // Test data for a=2.0000000000000000, b=2.0000000000000000, c=2.0000000000000000.
8323 testcase_hyperg<double> data121[] = {
8324 { 0.27700831024930750, 2.0000000000000000, 2.0000000000000000,
8325 2.0000000000000000, -0.90000000000000002 },
8326 { 0.30864197530864196, 2.0000000000000000, 2.0000000000000000,
8327 2.0000000000000000, -0.80000000000000004 },
8328 { 0.34602076124567477, 2.0000000000000000, 2.0000000000000000,
8329 2.0000000000000000, -0.69999999999999996 },
8330 { 0.39062499999999994, 2.0000000000000000, 2.0000000000000000,
8331 2.0000000000000000, -0.59999999999999998 },
8332 { 0.44444444444444442, 2.0000000000000000, 2.0000000000000000,
8333 2.0000000000000000, -0.50000000000000000 },
8334 { 0.51020408163265307, 2.0000000000000000, 2.0000000000000000,
8335 2.0000000000000000, -0.40000000000000002 },
8336 { 0.59171597633136097, 2.0000000000000000, 2.0000000000000000,
8337 2.0000000000000000, -0.30000000000000004 },
8338 { 0.69444444444444453, 2.0000000000000000, 2.0000000000000000,
8339 2.0000000000000000, -0.19999999999999996 },
8340 { 0.82644628099173545, 2.0000000000000000, 2.0000000000000000,
8341 2.0000000000000000, -0.099999999999999978 },
8342 { 1.0000000000000000, 2.0000000000000000, 2.0000000000000000,
8343 2.0000000000000000, 0.0000000000000000 },
8344 { 1.2345679012345681, 2.0000000000000000, 2.0000000000000000,
8345 2.0000000000000000, 0.10000000000000009 },
8346 { 1.5624999999999998, 2.0000000000000000, 2.0000000000000000,
8347 2.0000000000000000, 0.19999999999999996 },
8348 { 2.0408163265306127, 2.0000000000000000, 2.0000000000000000,
8349 2.0000000000000000, 0.30000000000000004 },
8350 { 2.7777777777777768, 2.0000000000000000, 2.0000000000000000,
8351 2.0000000000000000, 0.39999999999999991 },
8352 { 4.0000000000000000, 2.0000000000000000, 2.0000000000000000,
8353 2.0000000000000000, 0.50000000000000000 },
8354 { 6.2500000000000036, 2.0000000000000000, 2.0000000000000000,
8355 2.0000000000000000, 0.60000000000000009 },
8356 { 11.111111111111109, 2.0000000000000000, 2.0000000000000000,
8357 2.0000000000000000, 0.69999999999999996 },
8358 { 25.000000000000007, 2.0000000000000000, 2.0000000000000000,
8359 2.0000000000000000, 0.80000000000000004 },
8360 { 99.999999999999872, 2.0000000000000000, 2.0000000000000000,
8361 2.0000000000000000, 0.89999999999999991 },
8362 };
8363
8364 // Test function for a=2.0000000000000000, b=2.0000000000000000, c=2.0000000000000000.
8365 template <typename Tp>
8366 void test121()
8367 {
8368 const Tp eps = std::numeric_limits<Tp>::epsilon();
8369 Tp max_abs_diff = -Tp(1);
8370 Tp max_abs_frac = -Tp(1);
8371 unsigned int num_datum = sizeof(data121)
8372 / sizeof(testcase_hyperg<double>);
8373 for (unsigned int i = 0; i < num_datum; ++i)
8374 {
8375 const Tp f = std::tr1::hyperg(Tp(data121[i].a), Tp(data121[i].b),
8376 Tp(data121[i].c), Tp(data121[i].x));
8377 const Tp f0 = data121[i].f0;
8378 const Tp diff = f - f0;
8379 if (std::abs(diff) > max_abs_diff)
8380 max_abs_diff = std::abs(diff);
8381 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
8382 {
8383 const Tp frac = diff / f0;
8384 if (std::abs(frac) > max_abs_frac)
8385 max_abs_frac = std::abs(frac);
8386 }
8387 }
8388 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8389 }
8390
8391 // Test data for a=2.0000000000000000, b=2.0000000000000000, c=4.0000000000000000.
8392 testcase_hyperg<double> data122[] = {
8393 { 0.50515448477320868, 2.0000000000000000, 2.0000000000000000,
8394 4.0000000000000000, -0.90000000000000002 },
8395 { 0.53674994210078020, 2.0000000000000000, 2.0000000000000000,
8396 4.0000000000000000, -0.80000000000000004 },
8397 { 0.57194655162437447, 2.0000000000000000, 2.0000000000000000,
8398 4.0000000000000000, -0.69999999999999996 },
8399 { 0.61137322330312327, 2.0000000000000000, 2.0000000000000000,
8400 4.0000000000000000, -0.59999999999999998 },
8401 { 0.65581297297972574, 2.0000000000000000, 2.0000000000000000,
8402 4.0000000000000000, -0.50000000000000000 },
8403 { 0.70625323977290932, 2.0000000000000000, 2.0000000000000000,
8404 4.0000000000000000, -0.40000000000000002 },
8405 { 0.76395739449542643, 2.0000000000000000, 2.0000000000000000,
8406 4.0000000000000000, -0.30000000000000004 },
8407 { 0.83056871002513311, 2.0000000000000000, 2.0000000000000000,
8408 4.0000000000000000, -0.19999999999999996 },
8409 { 0.90826553449323655, 2.0000000000000000, 2.0000000000000000,
8410 4.0000000000000000, -0.099999999999999978 },
8411 { 1.0000000000000000, 2.0000000000000000, 2.0000000000000000,
8412 4.0000000000000000, 0.0000000000000000 },
8413 { 1.1098784992198341, 2.0000000000000000, 2.0000000000000000,
8414 4.0000000000000000, 0.10000000000000009 },
8415 { 1.2437942741831700, 2.0000000000000000, 2.0000000000000000,
8416 4.0000000000000000, 0.19999999999999996 },
8417 { 1.4105343768544543, 2.0000000000000000, 2.0000000000000000,
8418 4.0000000000000000, 0.30000000000000004 },
8419 { 1.6238435648986016, 2.0000000000000000, 2.0000000000000000,
8420 4.0000000000000000, 0.39999999999999991 },
8421 { 1.9065970003160624, 2.0000000000000000, 2.0000000000000000,
8422 4.0000000000000000, 0.50000000000000000 },
8423 { 2.3001951284393627, 2.0000000000000000, 2.0000000000000000,
8424 4.0000000000000000, 0.60000000000000009 },
8425 { 2.8891774744673464, 2.0000000000000000, 2.0000000000000000,
8426 4.0000000000000000, 0.69999999999999996 },
8427 { 3.8827206436045336, 2.0000000000000000, 2.0000000000000000,
8428 4.0000000000000000, 0.80000000000000004 },
8429 { 6.0316345867773542, 2.0000000000000000, 2.0000000000000000,
8430 4.0000000000000000, 0.89999999999999991 },
8431 };
8432
8433 // Test function for a=2.0000000000000000, b=2.0000000000000000, c=4.0000000000000000.
8434 template <typename Tp>
8435 void test122()
8436 {
8437 const Tp eps = std::numeric_limits<Tp>::epsilon();
8438 Tp max_abs_diff = -Tp(1);
8439 Tp max_abs_frac = -Tp(1);
8440 unsigned int num_datum = sizeof(data122)
8441 / sizeof(testcase_hyperg<double>);
8442 for (unsigned int i = 0; i < num_datum; ++i)
8443 {
8444 const Tp f = std::tr1::hyperg(Tp(data122[i].a), Tp(data122[i].b),
8445 Tp(data122[i].c), Tp(data122[i].x));
8446 const Tp f0 = data122[i].f0;
8447 const Tp diff = f - f0;
8448 if (std::abs(diff) > max_abs_diff)
8449 max_abs_diff = std::abs(diff);
8450 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
8451 {
8452 const Tp frac = diff / f0;
8453 if (std::abs(frac) > max_abs_frac)
8454 max_abs_frac = std::abs(frac);
8455 }
8456 }
8457 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8458 }
8459
8460 // Test data for a=2.0000000000000000, b=2.0000000000000000, c=6.0000000000000000.
8461 testcase_hyperg<double> data123[] = {
8462 { 0.61824560969673303, 2.0000000000000000, 2.0000000000000000,
8463 6.0000000000000000, -0.90000000000000002 },
8464 { 0.64645665839161048, 2.0000000000000000, 2.0000000000000000,
8465 6.0000000000000000, -0.80000000000000004 },
8466 { 0.67712272792612083, 2.0000000000000000, 2.0000000000000000,
8467 6.0000000000000000, -0.69999999999999996 },
8468 { 0.71058076074636822, 2.0000000000000000, 2.0000000000000000,
8469 6.0000000000000000, -0.59999999999999998 },
8470 { 0.74723387423852861, 2.0000000000000000, 2.0000000000000000,
8471 6.0000000000000000, -0.50000000000000000 },
8472 { 0.78756892188863126, 2.0000000000000000, 2.0000000000000000,
8473 6.0000000000000000, -0.40000000000000002 },
8474 { 0.83218012557592713, 2.0000000000000000, 2.0000000000000000,
8475 6.0000000000000000, -0.30000000000000004 },
8476 { 0.88180144818204143, 2.0000000000000000, 2.0000000000000000,
8477 6.0000000000000000, -0.19999999999999996 },
8478 { 0.93735184459468934, 2.0000000000000000, 2.0000000000000000,
8479 6.0000000000000000, -0.099999999999999978 },
8480 { 1.0000000000000000, 2.0000000000000000, 2.0000000000000000,
8481 6.0000000000000000, 0.0000000000000000 },
8482 { 1.0712594799044883, 2.0000000000000000, 2.0000000000000000,
8483 6.0000000000000000, 0.10000000000000009 },
8484 { 1.1531330932162096, 2.0000000000000000, 2.0000000000000000,
8485 6.0000000000000000, 0.19999999999999996 },
8486 { 1.2483404191094898, 2.0000000000000000, 2.0000000000000000,
8487 6.0000000000000000, 0.30000000000000004 },
8488 { 1.3606934909972501, 2.0000000000000000, 2.0000000000000000,
8489 6.0000000000000000, 0.39999999999999991 },
8490 { 1.4957544469027071, 2.0000000000000000, 2.0000000000000000,
8491 6.0000000000000000, 0.50000000000000000 },
8492 { 1.6620777107871287, 2.0000000000000000, 2.0000000000000000,
8493 6.0000000000000000, 0.60000000000000009 },
8494 { 1.8738132387064506, 2.0000000000000000, 2.0000000000000000,
8495 6.0000000000000000, 0.69999999999999996 },
8496 { 2.1570670242247409, 2.0000000000000000, 2.0000000000000000,
8497 6.0000000000000000, 0.80000000000000004 },
8498 { 2.5700735959225494, 2.0000000000000000, 2.0000000000000000,
8499 6.0000000000000000, 0.89999999999999991 },
8500 };
8501
8502 // Test function for a=2.0000000000000000, b=2.0000000000000000, c=6.0000000000000000.
8503 template <typename Tp>
8504 void test123()
8505 {
8506 const Tp eps = std::numeric_limits<Tp>::epsilon();
8507 Tp max_abs_diff = -Tp(1);
8508 Tp max_abs_frac = -Tp(1);
8509 unsigned int num_datum = sizeof(data123)
8510 / sizeof(testcase_hyperg<double>);
8511 for (unsigned int i = 0; i < num_datum; ++i)
8512 {
8513 const Tp f = std::tr1::hyperg(Tp(data123[i].a), Tp(data123[i].b),
8514 Tp(data123[i].c), Tp(data123[i].x));
8515 const Tp f0 = data123[i].f0;
8516 const Tp diff = f - f0;
8517 if (std::abs(diff) > max_abs_diff)
8518 max_abs_diff = std::abs(diff);
8519 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
8520 {
8521 const Tp frac = diff / f0;
8522 if (std::abs(frac) > max_abs_frac)
8523 max_abs_frac = std::abs(frac);
8524 }
8525 }
8526 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8527 }
8528
8529 // Test data for a=2.0000000000000000, b=2.0000000000000000, c=8.0000000000000000.
8530 testcase_hyperg<double> data124[] = {
8531 { 0.68776713859043437, 2.0000000000000000, 2.0000000000000000,
8532 8.0000000000000000, -0.90000000000000002 },
8533 { 0.71280582849489826, 2.0000000000000000, 2.0000000000000000,
8534 8.0000000000000000, -0.80000000000000004 },
8535 { 0.73962983054724929, 2.0000000000000000, 2.0000000000000000,
8536 8.0000000000000000, -0.69999999999999996 },
8537 { 0.76844343025262085, 2.0000000000000000, 2.0000000000000000,
8538 8.0000000000000000, -0.59999999999999998 },
8539 { 0.79948476671182911, 2.0000000000000000, 2.0000000000000000,
8540 8.0000000000000000, -0.50000000000000000 },
8541 { 0.83303347721461229, 2.0000000000000000, 2.0000000000000000,
8542 8.0000000000000000, -0.40000000000000002 },
8543 { 0.86942060391338782, 2.0000000000000000, 2.0000000000000000,
8544 8.0000000000000000, -0.30000000000000004 },
8545 { 0.90904161711581655, 2.0000000000000000, 2.0000000000000000,
8546 8.0000000000000000, -0.19999999999999996 },
8547 { 0.95237381468647742, 2.0000000000000000, 2.0000000000000000,
8548 8.0000000000000000, -0.099999999999999978 },
8549 { 1.0000000000000000, 2.0000000000000000, 2.0000000000000000,
8550 8.0000000000000000, 0.0000000000000000 },
8551 { 1.0526413941912305, 2.0000000000000000, 2.0000000000000000,
8552 8.0000000000000000, 0.10000000000000009 },
8553 { 1.1112045278881502, 2.0000000000000000, 2.0000000000000000,
8554 8.0000000000000000, 0.19999999999999996 },
8555 { 1.1768500306393046, 2.0000000000000000, 2.0000000000000000,
8556 8.0000000000000000, 0.30000000000000004 },
8557 { 1.2510971588297888, 2.0000000000000000, 2.0000000000000000,
8558 8.0000000000000000, 0.39999999999999991 },
8559 { 1.3359896747789315, 2.0000000000000000, 2.0000000000000000,
8560 8.0000000000000000, 0.50000000000000000 },
8561 { 1.4343740183432725, 2.0000000000000000, 2.0000000000000000,
8562 8.0000000000000000, 0.60000000000000009 },
8563 { 1.5504011881337365, 2.0000000000000000, 2.0000000000000000,
8564 8.0000000000000000, 0.69999999999999996 },
8565 { 1.6905307012604318, 2.0000000000000000, 2.0000000000000000,
8566 8.0000000000000000, 0.80000000000000004 },
8567 { 1.8658920279264424, 2.0000000000000000, 2.0000000000000000,
8568 8.0000000000000000, 0.89999999999999991 },
8569 };
8570
8571 // Test function for a=2.0000000000000000, b=2.0000000000000000, c=8.0000000000000000.
8572 template <typename Tp>
8573 void test124()
8574 {
8575 const Tp eps = std::numeric_limits<Tp>::epsilon();
8576 Tp max_abs_diff = -Tp(1);
8577 Tp max_abs_frac = -Tp(1);
8578 unsigned int num_datum = sizeof(data124)
8579 / sizeof(testcase_hyperg<double>);
8580 for (unsigned int i = 0; i < num_datum; ++i)
8581 {
8582 const Tp f = std::tr1::hyperg(Tp(data124[i].a), Tp(data124[i].b),
8583 Tp(data124[i].c), Tp(data124[i].x));
8584 const Tp f0 = data124[i].f0;
8585 const Tp diff = f - f0;
8586 if (std::abs(diff) > max_abs_diff)
8587 max_abs_diff = std::abs(diff);
8588 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
8589 {
8590 const Tp frac = diff / f0;
8591 if (std::abs(frac) > max_abs_frac)
8592 max_abs_frac = std::abs(frac);
8593 }
8594 }
8595 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8596 }
8597
8598 // Test data for a=2.0000000000000000, b=2.0000000000000000, c=10.000000000000000.
8599 testcase_hyperg<double> data125[] = {
8600 { 0.73530262886958830, 2.0000000000000000, 2.0000000000000000,
8601 10.000000000000000, -0.90000000000000002 },
8602 { 0.75768898977673638, 2.0000000000000000, 2.0000000000000000,
8603 10.000000000000000, -0.80000000000000004 },
8604 { 0.78143483544640069, 2.0000000000000000, 2.0000000000000000,
8605 10.000000000000000, -0.69999999999999996 },
8606 { 0.80667428603297209, 2.0000000000000000, 2.0000000000000000,
8607 10.000000000000000, -0.59999999999999998 },
8608 { 0.83356078772438325, 2.0000000000000000, 2.0000000000000000,
8609 10.000000000000000, -0.50000000000000000 },
8610 { 0.86227093001346145, 2.0000000000000000, 2.0000000000000000,
8611 10.000000000000000, -0.40000000000000002 },
8612 { 0.89300925500556994, 2.0000000000000000, 2.0000000000000000,
8613 10.000000000000000, -0.30000000000000004 },
8614 { 0.92601438873425990, 2.0000000000000000, 2.0000000000000000,
8615 10.000000000000000, -0.19999999999999996 },
8616 { 0.96156696230910810, 2.0000000000000000, 2.0000000000000000,
8617 10.000000000000000, -0.099999999999999978 },
8618 { 1.0000000000000000, 2.0000000000000000, 2.0000000000000000,
8619 10.000000000000000, 0.0000000000000000 },
8620 { 1.0417127776179342, 2.0000000000000000, 2.0000000000000000,
8621 10.000000000000000, 0.10000000000000009 },
8622 { 1.0871896789480930, 2.0000000000000000, 2.0000000000000000,
8623 10.000000000000000, 0.19999999999999996 },
8624 { 1.1370264514689949, 2.0000000000000000, 2.0000000000000000,
8625 10.000000000000000, 0.30000000000000004 },
8626 { 1.1919677804049154, 2.0000000000000000, 2.0000000000000000,
8627 10.000000000000000, 0.39999999999999991 },
8628 { 1.2529628761065934, 2.0000000000000000, 2.0000000000000000,
8629 10.000000000000000, 0.50000000000000000 },
8630 { 1.3212511796458866, 2.0000000000000000, 2.0000000000000000,
8631 10.000000000000000, 0.60000000000000009 },
8632 { 1.3985017309668506, 2.0000000000000000, 2.0000000000000000,
8633 10.000000000000000, 0.69999999999999996 },
8634 { 1.4870567523847895, 2.0000000000000000, 2.0000000000000000,
8635 10.000000000000000, 0.80000000000000004 },
8636 { 1.5904049523738040, 2.0000000000000000, 2.0000000000000000,
8637 10.000000000000000, 0.89999999999999991 },
8638 };
8639
8640 // Test function for a=2.0000000000000000, b=2.0000000000000000, c=10.000000000000000.
8641 template <typename Tp>
8642 void test125()
8643 {
8644 const Tp eps = std::numeric_limits<Tp>::epsilon();
8645 Tp max_abs_diff = -Tp(1);
8646 Tp max_abs_frac = -Tp(1);
8647 unsigned int num_datum = sizeof(data125)
8648 / sizeof(testcase_hyperg<double>);
8649 for (unsigned int i = 0; i < num_datum; ++i)
8650 {
8651 const Tp f = std::tr1::hyperg(Tp(data125[i].a), Tp(data125[i].b),
8652 Tp(data125[i].c), Tp(data125[i].x));
8653 const Tp f0 = data125[i].f0;
8654 const Tp diff = f - f0;
8655 if (std::abs(diff) > max_abs_diff)
8656 max_abs_diff = std::abs(diff);
8657 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
8658 {
8659 const Tp frac = diff / f0;
8660 if (std::abs(frac) > max_abs_frac)
8661 max_abs_frac = std::abs(frac);
8662 }
8663 }
8664 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8665 }
8666
8667 // Test data for a=2.0000000000000000, b=5.0000000000000000, c=2.0000000000000000.
8668 testcase_hyperg<double> data126[] = {
8669 { 0.040386107340619266, 2.0000000000000000, 5.0000000000000000,
8670 2.0000000000000000, -0.90000000000000002 },
8671 { 0.052922149401344633, 2.0000000000000000, 5.0000000000000000,
8672 2.0000000000000000, -0.80000000000000004 },
8673 { 0.070429627772374270, 2.0000000000000000, 5.0000000000000000,
8674 2.0000000000000000, -0.69999999999999996 },
8675 { 0.095367431640624972, 2.0000000000000000, 5.0000000000000000,
8676 2.0000000000000000, -0.59999999999999998 },
8677 { 0.13168724279835387, 2.0000000000000000, 5.0000000000000000,
8678 2.0000000000000000, -0.50000000000000000 },
8679 { 0.18593443208187066, 2.0000000000000000, 5.0000000000000000,
8680 2.0000000000000000, -0.40000000000000002 },
8681 { 0.26932907434290437, 2.0000000000000000, 5.0000000000000000,
8682 2.0000000000000000, -0.30000000000000004 },
8683 { 0.40187757201646096, 2.0000000000000000, 5.0000000000000000,
8684 2.0000000000000000, -0.19999999999999996 },
8685 { 0.62092132305915493, 2.0000000000000000, 5.0000000000000000,
8686 2.0000000000000000, -0.099999999999999978 },
8687 { 1.0000000000000000, 2.0000000000000000, 5.0000000000000000,
8688 2.0000000000000000, 0.0000000000000000 },
8689 { 1.6935087808430296, 2.0000000000000000, 5.0000000000000000,
8690 2.0000000000000000, 0.10000000000000009 },
8691 { 3.0517578124999991, 2.0000000000000000, 5.0000000000000000,
8692 2.0000000000000000, 0.19999999999999996 },
8693 { 5.9499018266198629, 2.0000000000000000, 5.0000000000000000,
8694 2.0000000000000000, 0.30000000000000004 },
8695 { 12.860082304526737, 2.0000000000000000, 5.0000000000000000,
8696 2.0000000000000000, 0.39999999999999991 },
8697 { 32.000000000000000, 2.0000000000000000, 5.0000000000000000,
8698 2.0000000000000000, 0.50000000000000000 },
8699 { 97.656250000000114, 2.0000000000000000, 5.0000000000000000,
8700 2.0000000000000000, 0.60000000000000009 },
8701 { 411.52263374485580, 2.0000000000000000, 5.0000000000000000,
8702 2.0000000000000000, 0.69999999999999996 },
8703 { 3124.9999999999991, 2.0000000000000000, 5.0000000000000000,
8704 2.0000000000000000, 0.80000000000000004 },
8705 { 99999.999999999665, 2.0000000000000000, 5.0000000000000000,
8706 2.0000000000000000, 0.89999999999999991 },
8707 };
8708
8709 // Test function for a=2.0000000000000000, b=5.0000000000000000, c=2.0000000000000000.
8710 template <typename Tp>
8711 void test126()
8712 {
8713 const Tp eps = std::numeric_limits<Tp>::epsilon();
8714 Tp max_abs_diff = -Tp(1);
8715 Tp max_abs_frac = -Tp(1);
8716 unsigned int num_datum = sizeof(data126)
8717 / sizeof(testcase_hyperg<double>);
8718 for (unsigned int i = 0; i < num_datum; ++i)
8719 {
8720 const Tp f = std::tr1::hyperg(Tp(data126[i].a), Tp(data126[i].b),
8721 Tp(data126[i].c), Tp(data126[i].x));
8722 const Tp f0 = data126[i].f0;
8723 const Tp diff = f - f0;
8724 if (std::abs(diff) > max_abs_diff)
8725 max_abs_diff = std::abs(diff);
8726 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
8727 {
8728 const Tp frac = diff / f0;
8729 if (std::abs(frac) > max_abs_frac)
8730 max_abs_frac = std::abs(frac);
8731 }
8732 }
8733 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8734 }
8735
8736 // Test data for a=2.0000000000000000, b=5.0000000000000000, c=4.0000000000000000.
8737 testcase_hyperg<double> data127[] = {
8738 { 0.21140107887447140, 2.0000000000000000, 5.0000000000000000,
8739 4.0000000000000000, -0.90000000000000002 },
8740 { 0.24005486968449935, 2.0000000000000000, 5.0000000000000000,
8741 4.0000000000000000, -0.80000000000000004 },
8742 { 0.27478119275391821, 2.0000000000000000, 5.0000000000000000,
8743 4.0000000000000000, -0.69999999999999996 },
8744 { 0.31738281249999994, 2.0000000000000000, 5.0000000000000000,
8745 4.0000000000000000, -0.59999999999999998 },
8746 { 0.37037037037037035, 2.0000000000000000, 5.0000000000000000,
8747 4.0000000000000000, -0.50000000000000000 },
8748 { 0.43731778425655982, 2.0000000000000000, 5.0000000000000000,
8749 4.0000000000000000, -0.40000000000000002 },
8750 { 0.52344105598543444, 2.0000000000000000, 5.0000000000000000,
8751 4.0000000000000000, -0.30000000000000004 },
8752 { 0.63657407407407429, 2.0000000000000000, 5.0000000000000000,
8753 4.0000000000000000, -0.19999999999999996 },
8754 { 0.78888054094665638, 2.0000000000000000, 5.0000000000000000,
8755 4.0000000000000000, -0.099999999999999978 },
8756 { 1.0000000000000000, 2.0000000000000000, 5.0000000000000000,
8757 4.0000000000000000, 0.0000000000000000 },
8758 { 1.3031550068587108, 2.0000000000000000, 5.0000000000000000,
8759 4.0000000000000000, 0.10000000000000009 },
8760 { 1.7578125000000002, 2.0000000000000000, 5.0000000000000000,
8761 4.0000000000000000, 0.19999999999999996 },
8762 { 2.4781341107871717, 2.0000000000000000, 5.0000000000000000,
8763 4.0000000000000000, 0.30000000000000004 },
8764 { 3.7037037037037037, 2.0000000000000000, 5.0000000000000000,
8765 4.0000000000000000, 0.39999999999999991 },
8766 { 5.9999999999999982, 2.0000000000000000, 5.0000000000000000,
8767 4.0000000000000000, 0.50000000000000000 },
8768 { 10.937500000000005, 2.0000000000000000, 5.0000000000000000,
8769 4.0000000000000000, 0.60000000000000009 },
8770 { 24.074074074074076, 2.0000000000000000, 5.0000000000000000,
8771 4.0000000000000000, 0.69999999999999996 },
8772 { 74.999999999999957, 2.0000000000000000, 5.0000000000000000,
8773 4.0000000000000000, 0.80000000000000004 },
8774 { 549.99999999999670, 2.0000000000000000, 5.0000000000000000,
8775 4.0000000000000000, 0.89999999999999991 },
8776 };
8777
8778 // Test function for a=2.0000000000000000, b=5.0000000000000000, c=4.0000000000000000.
8779 template <typename Tp>
8780 void test127()
8781 {
8782 const Tp eps = std::numeric_limits<Tp>::epsilon();
8783 Tp max_abs_diff = -Tp(1);
8784 Tp max_abs_frac = -Tp(1);
8785 unsigned int num_datum = sizeof(data127)
8786 / sizeof(testcase_hyperg<double>);
8787 for (unsigned int i = 0; i < num_datum; ++i)
8788 {
8789 const Tp f = std::tr1::hyperg(Tp(data127[i].a), Tp(data127[i].b),
8790 Tp(data127[i].c), Tp(data127[i].x));
8791 const Tp f0 = data127[i].f0;
8792 const Tp diff = f - f0;
8793 if (std::abs(diff) > max_abs_diff)
8794 max_abs_diff = std::abs(diff);
8795 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
8796 {
8797 const Tp frac = diff / f0;
8798 if (std::abs(frac) > max_abs_frac)
8799 max_abs_frac = std::abs(frac);
8800 }
8801 }
8802 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8803 }
8804
8805 // Test data for a=2.0000000000000000, b=5.0000000000000000, c=6.0000000000000000.
8806 testcase_hyperg<double> data128[] = {
8807 { 0.33250915203252107, 2.0000000000000000, 5.0000000000000000,
8808 6.0000000000000000, -0.90000000000000002 },
8809 { 0.36566851047721960, 2.0000000000000000, 5.0000000000000000,
8810 6.0000000000000000, -0.80000000000000004 },
8811 { 0.40414812182437942, 2.0000000000000000, 5.0000000000000000,
8812 6.0000000000000000, -0.69999999999999996 },
8813 { 0.44916943268118470, 2.0000000000000000, 5.0000000000000000,
8814 6.0000000000000000, -0.59999999999999998 },
8815 { 0.50233081077479569, 2.0000000000000000, 5.0000000000000000,
8816 6.0000000000000000, -0.50000000000000000 },
8817 { 0.56575808728873322, 2.0000000000000000, 5.0000000000000000,
8818 6.0000000000000000, -0.40000000000000002 },
8819 { 0.64233106844971422, 2.0000000000000000, 5.0000000000000000,
8820 6.0000000000000000, -0.30000000000000004 },
8821 { 0.73603371116919514, 2.0000000000000000, 5.0000000000000000,
8822 6.0000000000000000, -0.19999999999999996 },
8823 { 0.85251256240112439, 2.0000000000000000, 5.0000000000000000,
8824 6.0000000000000000, -0.099999999999999978 },
8825 { 1.0000000000000000, 2.0000000000000000, 5.0000000000000000,
8826 6.0000000000000000, 0.0000000000000000 },
8827 { 1.1909065696197674, 2.0000000000000000, 5.0000000000000000,
8828 6.0000000000000000, 0.10000000000000009 },
8829 { 1.4447095285569311, 2.0000000000000000, 5.0000000000000000,
8830 6.0000000000000000, 0.19999999999999996 },
8831 { 1.7935243137840653, 2.0000000000000000, 5.0000000000000000,
8832 6.0000000000000000, 0.30000000000000004 },
8833 { 2.2937035820494454, 2.0000000000000000, 5.0000000000000000,
8834 6.0000000000000000, 0.39999999999999991 },
8835 { 3.0524711083016687, 2.0000000000000000, 5.0000000000000000,
8836 6.0000000000000000, 0.50000000000000000 },
8837 { 4.2976512669354259, 2.0000000000000000, 5.0000000000000000,
8838 6.0000000000000000, 0.60000000000000009 },
8839 { 6.5977107563194677, 2.0000000000000000, 5.0000000000000000,
8840 6.0000000000000000, 0.69999999999999996 },
8841 { 11.793747206577530, 2.0000000000000000, 5.0000000000000000,
8842 6.0000000000000000, 0.80000000000000004 },
8843 { 29.997625937982058, 2.0000000000000000, 5.0000000000000000,
8844 6.0000000000000000, 0.89999999999999991 },
8845 };
8846
8847 // Test function for a=2.0000000000000000, b=5.0000000000000000, c=6.0000000000000000.
8848 template <typename Tp>
8849 void test128()
8850 {
8851 const Tp eps = std::numeric_limits<Tp>::epsilon();
8852 Tp max_abs_diff = -Tp(1);
8853 Tp max_abs_frac = -Tp(1);
8854 unsigned int num_datum = sizeof(data128)
8855 / sizeof(testcase_hyperg<double>);
8856 for (unsigned int i = 0; i < num_datum; ++i)
8857 {
8858 const Tp f = std::tr1::hyperg(Tp(data128[i].a), Tp(data128[i].b),
8859 Tp(data128[i].c), Tp(data128[i].x));
8860 const Tp f0 = data128[i].f0;
8861 const Tp diff = f - f0;
8862 if (std::abs(diff) > max_abs_diff)
8863 max_abs_diff = std::abs(diff);
8864 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
8865 {
8866 const Tp frac = diff / f0;
8867 if (std::abs(frac) > max_abs_frac)
8868 max_abs_frac = std::abs(frac);
8869 }
8870 }
8871 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8872 }
8873
8874 // Test data for a=2.0000000000000000, b=5.0000000000000000, c=8.0000000000000000.
8875 testcase_hyperg<double> data129[] = {
8876 { 0.42108197362250305, 2.0000000000000000, 5.0000000000000000,
8877 8.0000000000000000, -0.90000000000000002 },
8878 { 0.45503172013983051, 2.0000000000000000, 5.0000000000000000,
8879 8.0000000000000000, -0.80000000000000004 },
8880 { 0.49345609813624303, 2.0000000000000000, 5.0000000000000000,
8881 8.0000000000000000, -0.69999999999999996 },
8882 { 0.53720880551221295, 2.0000000000000000, 5.0000000000000000,
8883 8.0000000000000000, -0.59999999999999998 },
8884 { 0.58736431524847466, 2.0000000000000000, 5.0000000000000000,
8885 8.0000000000000000, -0.50000000000000000 },
8886 { 0.64529222467897962, 2.0000000000000000, 5.0000000000000000,
8887 8.0000000000000000, -0.40000000000000002 },
8888 { 0.71276337354393904, 2.0000000000000000, 5.0000000000000000,
8889 8.0000000000000000, -0.30000000000000004 },
8890 { 0.79210466220795306, 2.0000000000000000, 5.0000000000000000,
8891 8.0000000000000000, -0.19999999999999996 },
8892 { 0.88643063455510596, 2.0000000000000000, 5.0000000000000000,
8893 8.0000000000000000, -0.099999999999999978 },
8894 { 1.0000000000000000, 2.0000000000000000, 5.0000000000000000,
8895 8.0000000000000000, 0.0000000000000000 },
8896 { 1.1387832139040652, 2.0000000000000000, 5.0000000000000000,
8897 8.0000000000000000, 0.10000000000000009 },
8898 { 1.3114025920844752, 2.0000000000000000, 5.0000000000000000,
8899 8.0000000000000000, 0.19999999999999996 },
8900 { 1.5307655016768162, 2.0000000000000000, 5.0000000000000000,
8901 8.0000000000000000, 0.30000000000000004 },
8902 { 1.8170727950333345, 2.0000000000000000, 5.0000000000000000,
8903 8.0000000000000000, 0.39999999999999991 },
8904 { 2.2037865486700836, 2.0000000000000000, 5.0000000000000000,
8905 8.0000000000000000, 0.50000000000000000 },
8906 { 2.7506766056439380, 2.0000000000000000, 5.0000000000000000,
8907 8.0000000000000000, 0.60000000000000009 },
8908 { 3.5764534935716972, 2.0000000000000000, 5.0000000000000000,
8909 8.0000000000000000, 0.69999999999999996 },
8910 { 4.9587762302155403, 2.0000000000000000, 5.0000000000000000,
8911 8.0000000000000000, 0.80000000000000004 },
8912 { 7.7740847924166800, 2.0000000000000000, 5.0000000000000000,
8913 8.0000000000000000, 0.89999999999999991 },
8914 };
8915
8916 // Test function for a=2.0000000000000000, b=5.0000000000000000, c=8.0000000000000000.
8917 template <typename Tp>
8918 void test129()
8919 {
8920 const Tp eps = std::numeric_limits<Tp>::epsilon();
8921 Tp max_abs_diff = -Tp(1);
8922 Tp max_abs_frac = -Tp(1);
8923 unsigned int num_datum = sizeof(data129)
8924 / sizeof(testcase_hyperg<double>);
8925 for (unsigned int i = 0; i < num_datum; ++i)
8926 {
8927 const Tp f = std::tr1::hyperg(Tp(data129[i].a), Tp(data129[i].b),
8928 Tp(data129[i].c), Tp(data129[i].x));
8929 const Tp f0 = data129[i].f0;
8930 const Tp diff = f - f0;
8931 if (std::abs(diff) > max_abs_diff)
8932 max_abs_diff = std::abs(diff);
8933 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
8934 {
8935 const Tp frac = diff / f0;
8936 if (std::abs(frac) > max_abs_frac)
8937 max_abs_frac = std::abs(frac);
8938 }
8939 }
8940 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8941 }
8942
8943 // Test data for a=2.0000000000000000, b=5.0000000000000000, c=10.000000000000000.
8944 testcase_hyperg<double> data130[] = {
8945 { 0.48860241312958425, 2.0000000000000000, 5.0000000000000000,
8946 10.000000000000000, -0.90000000000000002 },
8947 { 0.52193382517068487, 2.0000000000000000, 5.0000000000000000,
8948 10.000000000000000, -0.80000000000000004 },
8949 { 0.55902375003954219, 2.0000000000000000, 5.0000000000000000,
8950 10.000000000000000, -0.69999999999999996 },
8951 { 0.60049055150230346, 2.0000000000000000, 5.0000000000000000,
8952 10.000000000000000, -0.59999999999999998 },
8953 { 0.64709127927203480, 2.0000000000000000, 5.0000000000000000,
8954 10.000000000000000, -0.50000000000000000 },
8955 { 0.69976233335368998, 2.0000000000000000, 5.0000000000000000,
8956 10.000000000000000, -0.40000000000000002 },
8957 { 0.75967529501081055, 2.0000000000000000, 5.0000000000000000,
8958 10.000000000000000, -0.30000000000000004 },
8959 { 0.82831498895254407, 2.0000000000000000, 5.0000000000000000,
8960 10.000000000000000, -0.19999999999999996 },
8961 { 0.90759090169653933, 2.0000000000000000, 5.0000000000000000,
8962 10.000000000000000, -0.099999999999999978 },
8963 { 1.0000000000000000, 2.0000000000000000, 5.0000000000000000,
8964 10.000000000000000, 0.0000000000000000 },
8965 { 1.1088712278667465, 2.0000000000000000, 5.0000000000000000,
8966 10.000000000000000, 0.10000000000000009 },
8967 { 1.2387445478440853, 2.0000000000000000, 5.0000000000000000,
8968 10.000000000000000, 0.19999999999999996 },
8969 { 1.3959812720437546, 2.0000000000000000, 5.0000000000000000,
8970 10.000000000000000, 0.30000000000000004 },
8971 { 1.5897930661091164, 2.0000000000000000, 5.0000000000000000,
8972 10.000000000000000, 0.39999999999999991 },
8973 { 1.8340789380307454, 2.0000000000000000, 5.0000000000000000,
8974 10.000000000000000, 0.50000000000000000 },
8975 { 2.1509548085970764, 2.0000000000000000, 5.0000000000000000,
8976 10.000000000000000, 0.60000000000000009 },
8977 { 2.5782406951207504, 2.0000000000000000, 5.0000000000000000,
8978 10.000000000000000, 0.69999999999999996 },
8979 { 3.1877847194242737, 2.0000000000000000, 5.0000000000000000,
8980 10.000000000000000, 0.80000000000000004 },
8981 { 4.1421596631676900, 2.0000000000000000, 5.0000000000000000,
8982 10.000000000000000, 0.89999999999999991 },
8983 };
8984
8985 // Test function for a=2.0000000000000000, b=5.0000000000000000, c=10.000000000000000.
8986 template <typename Tp>
8987 void test130()
8988 {
8989 const Tp eps = std::numeric_limits<Tp>::epsilon();
8990 Tp max_abs_diff = -Tp(1);
8991 Tp max_abs_frac = -Tp(1);
8992 unsigned int num_datum = sizeof(data130)
8993 / sizeof(testcase_hyperg<double>);
8994 for (unsigned int i = 0; i < num_datum; ++i)
8995 {
8996 const Tp f = std::tr1::hyperg(Tp(data130[i].a), Tp(data130[i].b),
8997 Tp(data130[i].c), Tp(data130[i].x));
8998 const Tp f0 = data130[i].f0;
8999 const Tp diff = f - f0;
9000 if (std::abs(diff) > max_abs_diff)
9001 max_abs_diff = std::abs(diff);
9002 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
9003 {
9004 const Tp frac = diff / f0;
9005 if (std::abs(frac) > max_abs_frac)
9006 max_abs_frac = std::abs(frac);
9007 }
9008 }
9009 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9010 }
9011
9012 // Test data for a=2.0000000000000000, b=10.000000000000000, c=2.0000000000000000.
9013 testcase_hyperg<double> data131[] = {
9014 { 0.0016310376661280216, 2.0000000000000000, 10.000000000000000,
9015 2.0000000000000000, -0.90000000000000002 },
9016 { 0.0028007538972582421, 2.0000000000000000, 10.000000000000000,
9017 2.0000000000000000, -0.80000000000000004 },
9018 { 0.0049603324681551939, 2.0000000000000000, 10.000000000000000,
9019 2.0000000000000000, -0.69999999999999996 },
9020 { 0.0090949470177292789, 2.0000000000000000, 10.000000000000000,
9021 2.0000000000000000, -0.59999999999999998 },
9022 { 0.017341529915832606, 2.0000000000000000, 10.000000000000000,
9023 2.0000000000000000, -0.50000000000000000 },
9024 { 0.034571613033607777, 2.0000000000000000, 10.000000000000000,
9025 2.0000000000000000, -0.40000000000000002 },
9026 { 0.072538150286405714, 2.0000000000000000, 10.000000000000000,
9027 2.0000000000000000, -0.30000000000000004 },
9028 { 0.16150558288984579, 2.0000000000000000, 10.000000000000000,
9029 2.0000000000000000, -0.19999999999999996 },
9030 { 0.38554328942953148, 2.0000000000000000, 10.000000000000000,
9031 2.0000000000000000, -0.099999999999999978 },
9032 { 1.0000000000000000, 2.0000000000000000, 10.000000000000000,
9033 2.0000000000000000, 0.0000000000000000 },
9034 { 2.8679719907924444, 2.0000000000000000, 10.000000000000000,
9035 2.0000000000000000, 0.10000000000000009 },
9036 { 9.3132257461547816, 2.0000000000000000, 10.000000000000000,
9037 2.0000000000000000, 0.19999999999999996 },
9038 { 35.401331746414378, 2.0000000000000000, 10.000000000000000,
9039 2.0000000000000000, 0.30000000000000004 },
9040 { 165.38171687920172, 2.0000000000000000, 10.000000000000000,
9041 2.0000000000000000, 0.39999999999999991 },
9042 { 1024.0000000000000, 2.0000000000000000, 10.000000000000000,
9043 2.0000000000000000, 0.50000000000000000 },
9044 { 9536.7431640625200, 2.0000000000000000, 10.000000000000000,
9045 2.0000000000000000, 0.60000000000000009 },
9046 { 169350.87808430271, 2.0000000000000000, 10.000000000000000,
9047 2.0000000000000000, 0.69999999999999996 },
9048 { 9765624.9999999944, 2.0000000000000000, 10.000000000000000,
9049 2.0000000000000000, 0.80000000000000004 },
9050 { 9999999999.9999332, 2.0000000000000000, 10.000000000000000,
9051 2.0000000000000000, 0.89999999999999991 },
9052 };
9053
9054 // Test function for a=2.0000000000000000, b=10.000000000000000, c=2.0000000000000000.
9055 template <typename Tp>
9056 void test131()
9057 {
9058 const Tp eps = std::numeric_limits<Tp>::epsilon();
9059 Tp max_abs_diff = -Tp(1);
9060 Tp max_abs_frac = -Tp(1);
9061 unsigned int num_datum = sizeof(data131)
9062 / sizeof(testcase_hyperg<double>);
9063 for (unsigned int i = 0; i < num_datum; ++i)
9064 {
9065 const Tp f = std::tr1::hyperg(Tp(data131[i].a), Tp(data131[i].b),
9066 Tp(data131[i].c), Tp(data131[i].x));
9067 const Tp f0 = data131[i].f0;
9068 const Tp diff = f - f0;
9069 if (std::abs(diff) > max_abs_diff)
9070 max_abs_diff = std::abs(diff);
9071 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
9072 {
9073 const Tp frac = diff / f0;
9074 if (std::abs(frac) > max_abs_frac)
9075 max_abs_frac = std::abs(frac);
9076 }
9077 }
9078 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9079 }
9080
9081 // Test data for a=2.0000000000000000, b=10.000000000000000, c=4.0000000000000000.
9082 testcase_hyperg<double> data132[] = {
9083 { 0.071191280690193509, 2.0000000000000000, 10.000000000000000,
9084 4.0000000000000000, -0.90000000000000002 },
9085 { 0.085646504654238079, 2.0000000000000000, 10.000000000000000,
9086 4.0000000000000000, -0.80000000000000004 },
9087 { 0.10478215656371073, 2.0000000000000000, 10.000000000000000,
9088 4.0000000000000000, -0.69999999999999996 },
9089 { 0.13074816337653575, 2.0000000000000000, 10.000000000000000,
9090 4.0000000000000000, -0.59999999999999998 },
9091 { 0.16701141666848116, 2.0000000000000000, 10.000000000000000,
9092 4.0000000000000000, -0.50000000000000000 },
9093 { 0.21939323375313971, 2.0000000000000000, 10.000000000000000,
9094 4.0000000000000000, -0.40000000000000002 },
9095 { 0.29813515331786627, 2.0000000000000000, 10.000000000000000,
9096 4.0000000000000000, -0.30000000000000004 },
9097 { 0.42225974638874386, 2.0000000000000000, 10.000000000000000,
9098 4.0000000000000000, -0.19999999999999996 },
9099 { 0.62942145962174867, 2.0000000000000000, 10.000000000000000,
9100 4.0000000000000000, -0.099999999999999978 },
9101 { 1.0000000000000000, 2.0000000000000000, 10.000000000000000,
9102 4.0000000000000000, 0.0000000000000000 },
9103 { 1.7218685262373197, 2.0000000000000000, 10.000000000000000,
9104 4.0000000000000000, 0.10000000000000009 },
9105 { 3.2855760483514689, 2.0000000000000000, 10.000000000000000,
9106 4.0000000000000000, 0.19999999999999996 },
9107 { 7.1616652508907093, 2.0000000000000000, 10.000000000000000,
9108 4.0000000000000000, 0.30000000000000004 },
9109 { 18.612326808485907, 2.0000000000000000, 10.000000000000000,
9110 4.0000000000000000, 0.39999999999999991 },
9111 { 61.476190476190474, 2.0000000000000000, 10.000000000000000,
9112 4.0000000000000000, 0.50000000000000000 },
9113 { 286.27580915178623, 2.0000000000000000, 10.000000000000000,
9114 4.0000000000000000, 0.60000000000000009 },
9115 { 2274.9441142102296, 2.0000000000000000, 10.000000000000000,
9116 4.0000000000000000, 0.69999999999999996 },
9117 { 47229.761904761865, 2.0000000000000000, 10.000000000000000,
9118 4.0000000000000000, 0.80000000000000004 },
9119 { 9961460.7142856438, 2.0000000000000000, 10.000000000000000,
9120 4.0000000000000000, 0.89999999999999991 },
9121 };
9122
9123 // Test function for a=2.0000000000000000, b=10.000000000000000, c=4.0000000000000000.
9124 template <typename Tp>
9125 void test132()
9126 {
9127 const Tp eps = std::numeric_limits<Tp>::epsilon();
9128 Tp max_abs_diff = -Tp(1);
9129 Tp max_abs_frac = -Tp(1);
9130 unsigned int num_datum = sizeof(data132)
9131 / sizeof(testcase_hyperg<double>);
9132 for (unsigned int i = 0; i < num_datum; ++i)
9133 {
9134 const Tp f = std::tr1::hyperg(Tp(data132[i].a), Tp(data132[i].b),
9135 Tp(data132[i].c), Tp(data132[i].x));
9136 const Tp f0 = data132[i].f0;
9137 const Tp diff = f - f0;
9138 if (std::abs(diff) > max_abs_diff)
9139 max_abs_diff = std::abs(diff);
9140 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
9141 {
9142 const Tp frac = diff / f0;
9143 if (std::abs(frac) > max_abs_frac)
9144 max_abs_frac = std::abs(frac);
9145 }
9146 }
9147 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9148 }
9149
9150 // Test data for a=2.0000000000000000, b=10.000000000000000, c=6.0000000000000000.
9151 testcase_hyperg<double> data133[] = {
9152 { 0.14747230019381052, 2.0000000000000000, 10.000000000000000,
9153 6.0000000000000000, -0.90000000000000002 },
9154 { 0.17073600100690603, 2.0000000000000000, 10.000000000000000,
9155 6.0000000000000000, -0.80000000000000004 },
9156 { 0.19982795745135354, 2.0000000000000000, 10.000000000000000,
9157 6.0000000000000000, -0.69999999999999996 },
9158 { 0.23681776864188067, 2.0000000000000000, 10.000000000000000,
9159 6.0000000000000000, -0.59999999999999998 },
9160 { 0.28475624360398022, 2.0000000000000000, 10.000000000000000,
9161 6.0000000000000000, -0.50000000000000000 },
9162 { 0.34827500743063144, 2.0000000000000000, 10.000000000000000,
9163 6.0000000000000000, -0.40000000000000002 },
9164 { 0.43464829159684681, 2.0000000000000000, 10.000000000000000,
9165 6.0000000000000000, -0.30000000000000004 },
9166 { 0.55576053438064787, 2.0000000000000000, 10.000000000000000,
9167 6.0000000000000000, -0.19999999999999996 },
9168 { 0.73195020913445485, 2.0000000000000000, 10.000000000000000,
9169 6.0000000000000000, -0.099999999999999978 },
9170 { 1.0000000000000000, 2.0000000000000000, 10.000000000000000,
9171 6.0000000000000000, 0.0000000000000000 },
9172 { 1.4310223867822929, 2.0000000000000000, 10.000000000000000,
9173 6.0000000000000000, 0.10000000000000009 },
9174 { 2.1742563399057540, 2.0000000000000000, 10.000000000000000,
9175 6.0000000000000000, 0.19999999999999996 },
9176 { 3.5769231236256043, 2.0000000000000000, 10.000000000000000,
9177 6.0000000000000000, 0.30000000000000004 },
9178 { 6.5620441134844363, 2.0000000000000000, 10.000000000000000,
9179 6.0000000000000000, 0.39999999999999991 },
9180 { 14.063492063492063, 2.0000000000000000, 10.000000000000000,
9181 6.0000000000000000, 0.50000000000000000 },
9182 { 38.085937500000036, 2.0000000000000000, 10.000000000000000,
9183 6.0000000000000000, 0.60000000000000009 },
9184 { 150.92973632068282, 2.0000000000000000, 10.000000000000000,
9185 6.0000000000000000, 0.69999999999999996 },
9186 { 1212.3015873015852, 2.0000000000000000, 10.000000000000000,
9187 6.0000000000000000, 0.80000000000000004 },
9188 { 55107.142857142389, 2.0000000000000000, 10.000000000000000,
9189 6.0000000000000000, 0.89999999999999991 },
9190 };
9191
9192 // Test function for a=2.0000000000000000, b=10.000000000000000, c=6.0000000000000000.
9193 template <typename Tp>
9194 void test133()
9195 {
9196 const Tp eps = std::numeric_limits<Tp>::epsilon();
9197 Tp max_abs_diff = -Tp(1);
9198 Tp max_abs_frac = -Tp(1);
9199 unsigned int num_datum = sizeof(data133)
9200 / sizeof(testcase_hyperg<double>);
9201 for (unsigned int i = 0; i < num_datum; ++i)
9202 {
9203 const Tp f = std::tr1::hyperg(Tp(data133[i].a), Tp(data133[i].b),
9204 Tp(data133[i].c), Tp(data133[i].x));
9205 const Tp f0 = data133[i].f0;
9206 const Tp diff = f - f0;
9207 if (std::abs(diff) > max_abs_diff)
9208 max_abs_diff = std::abs(diff);
9209 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
9210 {
9211 const Tp frac = diff / f0;
9212 if (std::abs(frac) > max_abs_frac)
9213 max_abs_frac = std::abs(frac);
9214 }
9215 }
9216 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9217 }
9218
9219 // Test data for a=2.0000000000000000, b=10.000000000000000, c=8.0000000000000000.
9220 testcase_hyperg<double> data134[] = {
9221 { 0.21658059714090588, 2.0000000000000000, 10.000000000000000,
9222 8.0000000000000000, -0.90000000000000002 },
9223 { 0.24513539602702844, 2.0000000000000000, 10.000000000000000,
9224 8.0000000000000000, -0.80000000000000004 },
9225 { 0.27967018274845046, 2.0000000000000000, 10.000000000000000,
9226 8.0000000000000000, -0.69999999999999996 },
9227 { 0.32196044921874994, 2.0000000000000000, 10.000000000000000,
9228 8.0000000000000000, -0.59999999999999998 },
9229 { 0.37448559670781900, 2.0000000000000000, 10.000000000000000,
9230 8.0000000000000000, -0.50000000000000000 },
9231 { 0.44078856032208796, 2.0000000000000000, 10.000000000000000,
9232 8.0000000000000000, -0.40000000000000002 },
9233 { 0.52606701446027815, 2.0000000000000000, 10.000000000000000,
9234 8.0000000000000000, -0.30000000000000004 },
9235 { 0.63818158436214001, 2.0000000000000000, 10.000000000000000,
9236 8.0000000000000000, -0.19999999999999996 },
9237 { 0.78944971882612769, 2.0000000000000000, 10.000000000000000,
9238 8.0000000000000000, -0.099999999999999978 },
9239 { 1.0000000000000000, 2.0000000000000000, 10.000000000000000,
9240 8.0000000000000000, 0.0000000000000000 },
9241 { 1.3044251384443430, 2.0000000000000000, 10.000000000000000,
9242 8.0000000000000000, 0.10000000000000009 },
9243 { 1.7659505208333335, 2.0000000000000000, 10.000000000000000,
9244 8.0000000000000000, 0.19999999999999996 },
9245 { 2.5093710953769270, 2.0000000000000000, 10.000000000000000,
9246 8.0000000000000000, 0.30000000000000004 },
9247 { 3.8065843621399158, 2.0000000000000000, 10.000000000000000,
9248 8.0000000000000000, 0.39999999999999991 },
9249 { 6.3333333333333313, 2.0000000000000000, 10.000000000000000,
9250 8.0000000000000000, 0.50000000000000000 },
9251 { 12.109375000000004, 2.0000000000000000, 10.000000000000000,
9252 8.0000000000000000, 0.60000000000000009 },
9253 { 29.115226337448540, 2.0000000000000000, 10.000000000000000,
9254 8.0000000000000000, 0.69999999999999996 },
9255 { 108.33333333333330, 2.0000000000000000, 10.000000000000000,
9256 8.0000000000000000, 0.80000000000000004 },
9257 { 1224.9999999999923, 2.0000000000000000, 10.000000000000000,
9258 8.0000000000000000, 0.89999999999999991 },
9259 };
9260
9261 // Test function for a=2.0000000000000000, b=10.000000000000000, c=8.0000000000000000.
9262 template <typename Tp>
9263 void test134()
9264 {
9265 const Tp eps = std::numeric_limits<Tp>::epsilon();
9266 Tp max_abs_diff = -Tp(1);
9267 Tp max_abs_frac = -Tp(1);
9268 unsigned int num_datum = sizeof(data134)
9269 / sizeof(testcase_hyperg<double>);
9270 for (unsigned int i = 0; i < num_datum; ++i)
9271 {
9272 const Tp f = std::tr1::hyperg(Tp(data134[i].a), Tp(data134[i].b),
9273 Tp(data134[i].c), Tp(data134[i].x));
9274 const Tp f0 = data134[i].f0;
9275 const Tp diff = f - f0;
9276 if (std::abs(diff) > max_abs_diff)
9277 max_abs_diff = std::abs(diff);
9278 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
9279 {
9280 const Tp frac = diff / f0;
9281 if (std::abs(frac) > max_abs_frac)
9282 max_abs_frac = std::abs(frac);
9283 }
9284 }
9285 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9286 }
9287
9288 // Test data for a=2.0000000000000000, b=10.000000000000000, c=10.000000000000000.
9289 testcase_hyperg<double> data135[] = {
9290 { 0.27700831024930750, 2.0000000000000000, 10.000000000000000,
9291 10.000000000000000, -0.90000000000000002 },
9292 { 0.30864197530864196, 2.0000000000000000, 10.000000000000000,
9293 10.000000000000000, -0.80000000000000004 },
9294 { 0.34602076124567477, 2.0000000000000000, 10.000000000000000,
9295 10.000000000000000, -0.69999999999999996 },
9296 { 0.39062499999999994, 2.0000000000000000, 10.000000000000000,
9297 10.000000000000000, -0.59999999999999998 },
9298 { 0.44444444444444442, 2.0000000000000000, 10.000000000000000,
9299 10.000000000000000, -0.50000000000000000 },
9300 { 0.51020408163265307, 2.0000000000000000, 10.000000000000000,
9301 10.000000000000000, -0.40000000000000002 },
9302 { 0.59171597633136097, 2.0000000000000000, 10.000000000000000,
9303 10.000000000000000, -0.30000000000000004 },
9304 { 0.69444444444444453, 2.0000000000000000, 10.000000000000000,
9305 10.000000000000000, -0.19999999999999996 },
9306 { 0.82644628099173545, 2.0000000000000000, 10.000000000000000,
9307 10.000000000000000, -0.099999999999999978 },
9308 { 1.0000000000000000, 2.0000000000000000, 10.000000000000000,
9309 10.000000000000000, 0.0000000000000000 },
9310 { 1.2345679012345681, 2.0000000000000000, 10.000000000000000,
9311 10.000000000000000, 0.10000000000000009 },
9312 { 1.5624999999999998, 2.0000000000000000, 10.000000000000000,
9313 10.000000000000000, 0.19999999999999996 },
9314 { 2.0408163265306127, 2.0000000000000000, 10.000000000000000,
9315 10.000000000000000, 0.30000000000000004 },
9316 { 2.7777777777777768, 2.0000000000000000, 10.000000000000000,
9317 10.000000000000000, 0.39999999999999991 },
9318 { 4.0000000000000000, 2.0000000000000000, 10.000000000000000,
9319 10.000000000000000, 0.50000000000000000 },
9320 { 6.2500000000000036, 2.0000000000000000, 10.000000000000000,
9321 10.000000000000000, 0.60000000000000009 },
9322 { 11.111111111111109, 2.0000000000000000, 10.000000000000000,
9323 10.000000000000000, 0.69999999999999996 },
9324 { 25.000000000000007, 2.0000000000000000, 10.000000000000000,
9325 10.000000000000000, 0.80000000000000004 },
9326 { 99.999999999999872, 2.0000000000000000, 10.000000000000000,
9327 10.000000000000000, 0.89999999999999991 },
9328 };
9329
9330 // Test function for a=2.0000000000000000, b=10.000000000000000, c=10.000000000000000.
9331 template <typename Tp>
9332 void test135()
9333 {
9334 const Tp eps = std::numeric_limits<Tp>::epsilon();
9335 Tp max_abs_diff = -Tp(1);
9336 Tp max_abs_frac = -Tp(1);
9337 unsigned int num_datum = sizeof(data135)
9338 / sizeof(testcase_hyperg<double>);
9339 for (unsigned int i = 0; i < num_datum; ++i)
9340 {
9341 const Tp f = std::tr1::hyperg(Tp(data135[i].a), Tp(data135[i].b),
9342 Tp(data135[i].c), Tp(data135[i].x));
9343 const Tp f0 = data135[i].f0;
9344 const Tp diff = f - f0;
9345 if (std::abs(diff) > max_abs_diff)
9346 max_abs_diff = std::abs(diff);
9347 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
9348 {
9349 const Tp frac = diff / f0;
9350 if (std::abs(frac) > max_abs_frac)
9351 max_abs_frac = std::abs(frac);
9352 }
9353 }
9354 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9355 }
9356
9357 // Test data for a=2.0000000000000000, b=20.000000000000000, c=2.0000000000000000.
9358 testcase_hyperg<double> data136[] = {
9359 { 2.6602838683283435e-06, 2.0000000000000000, 20.000000000000000,
9360 2.0000000000000000, -0.90000000000000002 },
9361 { 7.8442223930072316e-06, 2.0000000000000000, 20.000000000000000,
9362 2.0000000000000000, -0.80000000000000004 },
9363 { 2.4604898194634598e-05, 2.0000000000000000, 20.000000000000000,
9364 2.0000000000000000, -0.69999999999999996 },
9365 { 8.2718061255302686e-05, 2.0000000000000000, 20.000000000000000,
9366 2.0000000000000000, -0.59999999999999998 },
9367 { 0.00030072865982171723, 2.0000000000000000, 20.000000000000000,
9368 2.0000000000000000, -0.50000000000000000 },
9369 { 0.0011951964277455193, 2.0000000000000000, 20.000000000000000,
9370 2.0000000000000000, -0.40000000000000002 },
9371 { 0.0052617832469731814, 2.0000000000000000, 20.000000000000000,
9372 2.0000000000000000, -0.30000000000000004 },
9373 { 0.026084053304588847, 2.0000000000000000, 20.000000000000000,
9374 2.0000000000000000, -0.19999999999999996 },
9375 { 0.14864362802414346, 2.0000000000000000, 20.000000000000000,
9376 2.0000000000000000, -0.099999999999999978 },
9377 { 1.0000000000000000, 2.0000000000000000, 20.000000000000000,
9378 2.0000000000000000, 0.0000000000000000 },
9379 { 8.2252633399699757, 2.0000000000000000, 20.000000000000000,
9380 2.0000000000000000, 0.10000000000000009 },
9381 { 86.736173798840269, 2.0000000000000000, 20.000000000000000,
9382 2.0000000000000000, 0.19999999999999996 },
9383 { 1253.2542894196865, 2.0000000000000000, 20.000000000000000,
9384 2.0000000000000000, 0.30000000000000004 },
9385 { 27351.112277912434, 2.0000000000000000, 20.000000000000000,
9386 2.0000000000000000, 0.39999999999999991 },
9387 { 1048576.0000000000, 2.0000000000000000, 20.000000000000000,
9388 2.0000000000000000, 0.50000000000000000 },
9389 { 90949470.177293226, 2.0000000000000000, 20.000000000000000,
9390 2.0000000000000000, 0.60000000000000009 },
9391 { 28679719907.924358, 2.0000000000000000, 20.000000000000000,
9392 2.0000000000000000, 0.69999999999999996 },
9393 { 95367431640624.906, 2.0000000000000000, 20.000000000000000,
9394 2.0000000000000000, 0.80000000000000004 },
9395 { 9.9999999999998657e+19, 2.0000000000000000, 20.000000000000000,
9396 2.0000000000000000, 0.89999999999999991 },
9397 };
9398
9399 // Test function for a=2.0000000000000000, b=20.000000000000000, c=2.0000000000000000.
9400 template <typename Tp>
9401 void test136()
9402 {
9403 const Tp eps = std::numeric_limits<Tp>::epsilon();
9404 Tp max_abs_diff = -Tp(1);
9405 Tp max_abs_frac = -Tp(1);
9406 unsigned int num_datum = sizeof(data136)
9407 / sizeof(testcase_hyperg<double>);
9408 for (unsigned int i = 0; i < num_datum; ++i)
9409 {
9410 const Tp f = std::tr1::hyperg(Tp(data136[i].a), Tp(data136[i].b),
9411 Tp(data136[i].c), Tp(data136[i].x));
9412 const Tp f0 = data136[i].f0;
9413 const Tp diff = f - f0;
9414 if (std::abs(diff) > max_abs_diff)
9415 max_abs_diff = std::abs(diff);
9416 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
9417 {
9418 const Tp frac = diff / f0;
9419 if (std::abs(frac) > max_abs_frac)
9420 max_abs_frac = std::abs(frac);
9421 }
9422 }
9423 VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
9424 }
9425
9426 // Test data for a=2.0000000000000000, b=20.000000000000000, c=4.0000000000000000.
9427 testcase_hyperg<double> data137[] = {
9428 { 0.018828092583720951, 2.0000000000000000, 20.000000000000000,
9429 4.0000000000000000, -0.90000000000000002 },
9430 { 0.023381944060455316, 2.0000000000000000, 20.000000000000000,
9431 4.0000000000000000, -0.80000000000000004 },
9432 { 0.029789623984280793, 2.0000000000000000, 20.000000000000000,
9433 4.0000000000000000, -0.69999999999999996 },
9434 { 0.039191021482500497, 2.0000000000000000, 20.000000000000000,
9435 4.0000000000000000, -0.59999999999999998 },
9436 { 0.053727813036721514, 2.0000000000000000, 20.000000000000000,
9437 4.0000000000000000, -0.50000000000000000 },
9438 { 0.077762010061669024, 2.0000000000000000, 20.000000000000000,
9439 4.0000000000000000, -0.40000000000000002 },
9440 { 0.12110505620123302, 2.0000000000000000, 20.000000000000000,
9441 4.0000000000000000, -0.30000000000000004 },
9442 { 0.20870149809080590, 2.0000000000000000, 20.000000000000000,
9443 4.0000000000000000, -0.19999999999999996 },
9444 { 0.41429234328785769, 2.0000000000000000, 20.000000000000000,
9445 4.0000000000000000, -0.099999999999999978 },
9446 { 1.0000000000000000, 2.0000000000000000, 20.000000000000000,
9447 4.0000000000000000, 0.0000000000000000 },
9448 { 3.1308087404153113, 2.0000000000000000, 20.000000000000000,
9449 4.0000000000000000, 0.10000000000000009 },
9450 { 13.586180626453050, 2.0000000000000000, 20.000000000000000,
9451 4.0000000000000000, 0.19999999999999996 },
9452 { 87.117304082784415, 2.0000000000000000, 20.000000000000000,
9453 4.0000000000000000, 0.30000000000000004 },
9454 { 889.26474381242826, 2.0000000000000000, 20.000000000000000,
9455 4.0000000000000000, 0.39999999999999991 },
9456 { 16231.913312693494, 2.0000000000000000, 20.000000000000000,
9457 4.0000000000000000, 0.50000000000000000 },
9458 { 653537.51168945129, 2.0000000000000000, 20.000000000000000,
9459 4.0000000000000000, 0.60000000000000009 },
9460 { 87756230.793848589, 2.0000000000000000, 20.000000000000000,
9461 4.0000000000000000, 0.69999999999999996 },
9462 { 101493977171.74945, 2.0000000000000000, 20.000000000000000,
9463 4.0000000000000000, 0.80000000000000004 },
9464 { 21375960679556916., 2.0000000000000000, 20.000000000000000,
9465 4.0000000000000000, 0.89999999999999991 },
9466 };
9467
9468 // Test function for a=2.0000000000000000, b=20.000000000000000, c=4.0000000000000000.
9469 template <typename Tp>
9470 void test137()
9471 {
9472 const Tp eps = std::numeric_limits<Tp>::epsilon();
9473 Tp max_abs_diff = -Tp(1);
9474 Tp max_abs_frac = -Tp(1);
9475 unsigned int num_datum = sizeof(data137)
9476 / sizeof(testcase_hyperg<double>);
9477 for (unsigned int i = 0; i < num_datum; ++i)
9478 {
9479 const Tp f = std::tr1::hyperg(Tp(data137[i].a), Tp(data137[i].b),
9480 Tp(data137[i].c), Tp(data137[i].x));
9481 const Tp f0 = data137[i].f0;
9482 const Tp diff = f - f0;
9483 if (std::abs(diff) > max_abs_diff)
9484 max_abs_diff = std::abs(diff);
9485 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
9486 {
9487 const Tp frac = diff / f0;
9488 if (std::abs(frac) > max_abs_frac)
9489 max_abs_frac = std::abs(frac);
9490 }
9491 }
9492 VERIFY(max_abs_frac < Tp(1.0000000000000008e-12));
9493 }
9494
9495 // Test data for a=2.0000000000000000, b=20.000000000000000, c=6.0000000000000000.
9496 testcase_hyperg<double> data138[] = {
9497 { 0.049200410661854252, 2.0000000000000000, 20.000000000000000,
9498 6.0000000000000000, -0.90000000000000002 },
9499 { 0.059460876757152226, 2.0000000000000000, 20.000000000000000,
9500 6.0000000000000000, -0.80000000000000004 },
9501 { 0.073244762686653350, 2.0000000000000000, 20.000000000000000,
9502 6.0000000000000000, -0.69999999999999996 },
9503 { 0.092334626017932922, 2.0000000000000000, 20.000000000000000,
9504 6.0000000000000000, -0.59999999999999998 },
9505 { 0.11976760350696837, 2.0000000000000000, 20.000000000000000,
9506 6.0000000000000000, -0.50000000000000000 },
9507 { 0.16102414609169383, 2.0000000000000000, 20.000000000000000,
9508 6.0000000000000000, -0.40000000000000002 },
9509 { 0.22670456785796222, 2.0000000000000000, 20.000000000000000,
9510 6.0000000000000000, -0.30000000000000004 },
9511 { 0.33912903252727361, 2.0000000000000000, 20.000000000000000,
9512 6.0000000000000000, -0.19999999999999996 },
9513 { 0.55049794600858060, 2.0000000000000000, 20.000000000000000,
9514 6.0000000000000000, -0.099999999999999978 },
9515 { 1.0000000000000000, 2.0000000000000000, 20.000000000000000,
9516 6.0000000000000000, 0.0000000000000000 },
9517 { 2.1254722872032232, 2.0000000000000000, 20.000000000000000,
9518 6.0000000000000000, 0.10000000000000009 },
9519 { 5.6261213886736172, 2.0000000000000000, 20.000000000000000,
9520 6.0000000000000000, 0.19999999999999996 },
9521 { 20.137315891130996, 2.0000000000000000, 20.000000000000000,
9522 6.0000000000000000, 0.30000000000000004 },
9523 { 108.04381584643853, 2.0000000000000000, 20.000000000000000,
9524 6.0000000000000000, 0.39999999999999991 },
9525 { 992.41692466460245, 2.0000000000000000, 20.000000000000000,
9526 6.0000000000000000, 0.50000000000000000 },
9527 { 19055.363816004465, 2.0000000000000000, 20.000000000000000,
9528 6.0000000000000000, 0.60000000000000009 },
9529 { 1105471.9504312086, 2.0000000000000000, 20.000000000000000,
9530 6.0000000000000000, 0.69999999999999996 },
9531 { 448521363.90608919, 2.0000000000000000, 20.000000000000000,
9532 6.0000000000000000, 0.80000000000000004 },
9533 { 19078917293639.004, 2.0000000000000000, 20.000000000000000,
9534 6.0000000000000000, 0.89999999999999991 },
9535 };
9536
9537 // Test function for a=2.0000000000000000, b=20.000000000000000, c=6.0000000000000000.
9538 template <typename Tp>
9539 void test138()
9540 {
9541 const Tp eps = std::numeric_limits<Tp>::epsilon();
9542 Tp max_abs_diff = -Tp(1);
9543 Tp max_abs_frac = -Tp(1);
9544 unsigned int num_datum = sizeof(data138)
9545 / sizeof(testcase_hyperg<double>);
9546 for (unsigned int i = 0; i < num_datum; ++i)
9547 {
9548 const Tp f = std::tr1::hyperg(Tp(data138[i].a), Tp(data138[i].b),
9549 Tp(data138[i].c), Tp(data138[i].x));
9550 const Tp f0 = data138[i].f0;
9551 const Tp diff = f - f0;
9552 if (std::abs(diff) > max_abs_diff)
9553 max_abs_diff = std::abs(diff);
9554 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
9555 {
9556 const Tp frac = diff / f0;
9557 if (std::abs(frac) > max_abs_frac)
9558 max_abs_frac = std::abs(frac);
9559 }
9560 }
9561 VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
9562 }
9563
9564 // Test data for a=2.0000000000000000, b=20.000000000000000, c=8.0000000000000000.
9565 testcase_hyperg<double> data139[] = {
9566 { 0.083753547015334745, 2.0000000000000000, 20.000000000000000,
9567 8.0000000000000000, -0.90000000000000002 },
9568 { 0.099238444687035701, 2.0000000000000000, 20.000000000000000,
9569 8.0000000000000000, -0.80000000000000004 },
9570 { 0.11938294012867758, 2.0000000000000000, 20.000000000000000,
9571 8.0000000000000000, -0.69999999999999996 },
9572 { 0.14622683905023326, 2.0000000000000000, 20.000000000000000,
9573 8.0000000000000000, -0.59999999999999998 },
9574 { 0.18303556733713025, 2.0000000000000000, 20.000000000000000,
9575 8.0000000000000000, -0.50000000000000000 },
9576 { 0.23527764069382409, 2.0000000000000000, 20.000000000000000,
9577 8.0000000000000000, -0.40000000000000002 },
9578 { 0.31261681740827085, 2.0000000000000000, 20.000000000000000,
9579 8.0000000000000000, -0.30000000000000004 },
9580 { 0.43327581880538862, 2.0000000000000000, 20.000000000000000,
9581 8.0000000000000000, -0.19999999999999996 },
9582 { 0.63445840637296658, 2.0000000000000000, 20.000000000000000,
9583 8.0000000000000000, -0.099999999999999978 },
9584 { 1.0000000000000000, 2.0000000000000000, 20.000000000000000,
9585 8.0000000000000000, 0.0000000000000000 },
9586 { 1.7438842395813297, 2.0000000000000000, 20.000000000000000,
9587 8.0000000000000000, 0.10000000000000009 },
9588 { 3.5070840938209269, 2.0000000000000000, 20.000000000000000,
9589 8.0000000000000000, 0.19999999999999996 },
9590 { 8.6573372006089713, 2.0000000000000000, 20.000000000000000,
9591 8.0000000000000000, 0.30000000000000004 },
9592 { 28.779342118408906, 2.0000000000000000, 20.000000000000000,
9593 8.0000000000000000, 0.39999999999999991 },
9594 { 147.50178613955714, 2.0000000000000000, 20.000000000000000,
9595 8.0000000000000000, 0.50000000000000000 },
9596 { 1427.1686016136398, 2.0000000000000000, 20.000000000000000,
9597 8.0000000000000000, 0.60000000000000009 },
9598 { 36780.643714655642, 2.0000000000000000, 20.000000000000000,
9599 8.0000000000000000, 0.69999999999999996 },
9600 { 5313869.6058585485, 2.0000000000000000, 20.000000000000000,
9601 8.0000000000000000, 0.80000000000000004 },
9602 { 46057280607.381966, 2.0000000000000000, 20.000000000000000,
9603 8.0000000000000000, 0.89999999999999991 },
9604 };
9605
9606 // Test function for a=2.0000000000000000, b=20.000000000000000, c=8.0000000000000000.
9607 template <typename Tp>
9608 void test139()
9609 {
9610 const Tp eps = std::numeric_limits<Tp>::epsilon();
9611 Tp max_abs_diff = -Tp(1);
9612 Tp max_abs_frac = -Tp(1);
9613 unsigned int num_datum = sizeof(data139)
9614 / sizeof(testcase_hyperg<double>);
9615 for (unsigned int i = 0; i < num_datum; ++i)
9616 {
9617 const Tp f = std::tr1::hyperg(Tp(data139[i].a), Tp(data139[i].b),
9618 Tp(data139[i].c), Tp(data139[i].x));
9619 const Tp f0 = data139[i].f0;
9620 const Tp diff = f - f0;
9621 if (std::abs(diff) > max_abs_diff)
9622 max_abs_diff = std::abs(diff);
9623 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
9624 {
9625 const Tp frac = diff / f0;
9626 if (std::abs(frac) > max_abs_frac)
9627 max_abs_frac = std::abs(frac);
9628 }
9629 }
9630 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9631 }
9632
9633 // Test data for a=2.0000000000000000, b=20.000000000000000, c=10.000000000000000.
9634 testcase_hyperg<double> data140[] = {
9635 { 0.11920045035073683, 2.0000000000000000, 20.000000000000000,
9636 10.000000000000000, -0.90000000000000002 },
9637 { 0.13907946814302774, 2.0000000000000000, 20.000000000000000,
9638 10.000000000000000, -0.80000000000000004 },
9639 { 0.16431439792559688, 2.0000000000000000, 20.000000000000000,
9640 10.000000000000000, -0.69999999999999996 },
9641 { 0.19698796016987008, 2.0000000000000000, 20.000000000000000,
9642 10.000000000000000, -0.59999999999999998 },
9643 { 0.24028510928790570, 2.0000000000000000, 20.000000000000000,
9644 10.000000000000000, -0.50000000000000000 },
9645 { 0.29926031296483119, 2.0000000000000000, 20.000000000000000,
9646 10.000000000000000, -0.40000000000000002 },
9647 { 0.38229327814229169, 2.0000000000000000, 20.000000000000000,
9648 10.000000000000000, -0.30000000000000004 },
9649 { 0.50402047283093110, 2.0000000000000000, 20.000000000000000,
9650 10.000000000000000, -0.19999999999999996 },
9651 { 0.69167261179586503, 2.0000000000000000, 20.000000000000000,
9652 10.000000000000000, -0.099999999999999978 },
9653 { 1.0000000000000000, 2.0000000000000000, 20.000000000000000,
9654 10.000000000000000, 0.0000000000000000 },
9655 { 1.5503152253394308, 2.0000000000000000, 20.000000000000000,
9656 10.000000000000000, 0.10000000000000009 },
9657 { 2.6469548193635797, 2.0000000000000000, 20.000000000000000,
9658 10.000000000000000, 0.19999999999999996 },
9659 { 5.1882631330566813, 2.0000000000000000, 20.000000000000000,
9660 10.000000000000000, 0.30000000000000004 },
9661 { 12.476792759124516, 2.0000000000000000, 20.000000000000000,
9662 10.000000000000000, 0.39999999999999991 },
9663 { 41.026391565091259, 2.0000000000000000, 20.000000000000000,
9664 10.000000000000000, 0.50000000000000000 },
9665 { 220.92584715988204, 2.0000000000000000, 20.000000000000000,
9666 10.000000000000000, 0.60000000000000009 },
9667 { 2677.0834450236207, 2.0000000000000000, 20.000000000000000,
9668 10.000000000000000, 0.69999999999999996 },
9669 { 141774.31260689779, 2.0000000000000000, 20.000000000000000,
9670 10.000000000000000, 0.80000000000000004 },
9671 { 254267148.83196995, 2.0000000000000000, 20.000000000000000,
9672 10.000000000000000, 0.89999999999999991 },
9673 };
9674
9675 // Test function for a=2.0000000000000000, b=20.000000000000000, c=10.000000000000000.
9676 template <typename Tp>
9677 void test140()
9678 {
9679 const Tp eps = std::numeric_limits<Tp>::epsilon();
9680 Tp max_abs_diff = -Tp(1);
9681 Tp max_abs_frac = -Tp(1);
9682 unsigned int num_datum = sizeof(data140)
9683 / sizeof(testcase_hyperg<double>);
9684 for (unsigned int i = 0; i < num_datum; ++i)
9685 {
9686 const Tp f = std::tr1::hyperg(Tp(data140[i].a), Tp(data140[i].b),
9687 Tp(data140[i].c), Tp(data140[i].x));
9688 const Tp f0 = data140[i].f0;
9689 const Tp diff = f - f0;
9690 if (std::abs(diff) > max_abs_diff)
9691 max_abs_diff = std::abs(diff);
9692 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
9693 {
9694 const Tp frac = diff / f0;
9695 if (std::abs(frac) > max_abs_frac)
9696 max_abs_frac = std::abs(frac);
9697 }
9698 }
9699 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9700 }
9701
9702 // Test data for a=5.0000000000000000, b=0.0000000000000000, c=2.0000000000000000.
9703 testcase_hyperg<double> data141[] = {
9704 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9705 2.0000000000000000, -0.90000000000000002 },
9706 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9707 2.0000000000000000, -0.80000000000000004 },
9708 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9709 2.0000000000000000, -0.69999999999999996 },
9710 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9711 2.0000000000000000, -0.59999999999999998 },
9712 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9713 2.0000000000000000, -0.50000000000000000 },
9714 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9715 2.0000000000000000, -0.40000000000000002 },
9716 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9717 2.0000000000000000, -0.30000000000000004 },
9718 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9719 2.0000000000000000, -0.19999999999999996 },
9720 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9721 2.0000000000000000, -0.099999999999999978 },
9722 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9723 2.0000000000000000, 0.0000000000000000 },
9724 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9725 2.0000000000000000, 0.10000000000000009 },
9726 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9727 2.0000000000000000, 0.19999999999999996 },
9728 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9729 2.0000000000000000, 0.30000000000000004 },
9730 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9731 2.0000000000000000, 0.39999999999999991 },
9732 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9733 2.0000000000000000, 0.50000000000000000 },
9734 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9735 2.0000000000000000, 0.60000000000000009 },
9736 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9737 2.0000000000000000, 0.69999999999999996 },
9738 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9739 2.0000000000000000, 0.80000000000000004 },
9740 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9741 2.0000000000000000, 0.89999999999999991 },
9742 };
9743
9744 // Test function for a=5.0000000000000000, b=0.0000000000000000, c=2.0000000000000000.
9745 template <typename Tp>
9746 void test141()
9747 {
9748 const Tp eps = std::numeric_limits<Tp>::epsilon();
9749 Tp max_abs_diff = -Tp(1);
9750 Tp max_abs_frac = -Tp(1);
9751 unsigned int num_datum = sizeof(data141)
9752 / sizeof(testcase_hyperg<double>);
9753 for (unsigned int i = 0; i < num_datum; ++i)
9754 {
9755 const Tp f = std::tr1::hyperg(Tp(data141[i].a), Tp(data141[i].b),
9756 Tp(data141[i].c), Tp(data141[i].x));
9757 const Tp f0 = data141[i].f0;
9758 const Tp diff = f - f0;
9759 if (std::abs(diff) > max_abs_diff)
9760 max_abs_diff = std::abs(diff);
9761 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
9762 {
9763 const Tp frac = diff / f0;
9764 if (std::abs(frac) > max_abs_frac)
9765 max_abs_frac = std::abs(frac);
9766 }
9767 }
9768 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9769 }
9770
9771 // Test data for a=5.0000000000000000, b=0.0000000000000000, c=4.0000000000000000.
9772 testcase_hyperg<double> data142[] = {
9773 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9774 4.0000000000000000, -0.90000000000000002 },
9775 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9776 4.0000000000000000, -0.80000000000000004 },
9777 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9778 4.0000000000000000, -0.69999999999999996 },
9779 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9780 4.0000000000000000, -0.59999999999999998 },
9781 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9782 4.0000000000000000, -0.50000000000000000 },
9783 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9784 4.0000000000000000, -0.40000000000000002 },
9785 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9786 4.0000000000000000, -0.30000000000000004 },
9787 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9788 4.0000000000000000, -0.19999999999999996 },
9789 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9790 4.0000000000000000, -0.099999999999999978 },
9791 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9792 4.0000000000000000, 0.0000000000000000 },
9793 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9794 4.0000000000000000, 0.10000000000000009 },
9795 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9796 4.0000000000000000, 0.19999999999999996 },
9797 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9798 4.0000000000000000, 0.30000000000000004 },
9799 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9800 4.0000000000000000, 0.39999999999999991 },
9801 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9802 4.0000000000000000, 0.50000000000000000 },
9803 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9804 4.0000000000000000, 0.60000000000000009 },
9805 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9806 4.0000000000000000, 0.69999999999999996 },
9807 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9808 4.0000000000000000, 0.80000000000000004 },
9809 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9810 4.0000000000000000, 0.89999999999999991 },
9811 };
9812
9813 // Test function for a=5.0000000000000000, b=0.0000000000000000, c=4.0000000000000000.
9814 template <typename Tp>
9815 void test142()
9816 {
9817 const Tp eps = std::numeric_limits<Tp>::epsilon();
9818 Tp max_abs_diff = -Tp(1);
9819 Tp max_abs_frac = -Tp(1);
9820 unsigned int num_datum = sizeof(data142)
9821 / sizeof(testcase_hyperg<double>);
9822 for (unsigned int i = 0; i < num_datum; ++i)
9823 {
9824 const Tp f = std::tr1::hyperg(Tp(data142[i].a), Tp(data142[i].b),
9825 Tp(data142[i].c), Tp(data142[i].x));
9826 const Tp f0 = data142[i].f0;
9827 const Tp diff = f - f0;
9828 if (std::abs(diff) > max_abs_diff)
9829 max_abs_diff = std::abs(diff);
9830 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
9831 {
9832 const Tp frac = diff / f0;
9833 if (std::abs(frac) > max_abs_frac)
9834 max_abs_frac = std::abs(frac);
9835 }
9836 }
9837 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9838 }
9839
9840 // Test data for a=5.0000000000000000, b=0.0000000000000000, c=6.0000000000000000.
9841 testcase_hyperg<double> data143[] = {
9842 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9843 6.0000000000000000, -0.90000000000000002 },
9844 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9845 6.0000000000000000, -0.80000000000000004 },
9846 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9847 6.0000000000000000, -0.69999999999999996 },
9848 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9849 6.0000000000000000, -0.59999999999999998 },
9850 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9851 6.0000000000000000, -0.50000000000000000 },
9852 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9853 6.0000000000000000, -0.40000000000000002 },
9854 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9855 6.0000000000000000, -0.30000000000000004 },
9856 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9857 6.0000000000000000, -0.19999999999999996 },
9858 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9859 6.0000000000000000, -0.099999999999999978 },
9860 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9861 6.0000000000000000, 0.0000000000000000 },
9862 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9863 6.0000000000000000, 0.10000000000000009 },
9864 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9865 6.0000000000000000, 0.19999999999999996 },
9866 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9867 6.0000000000000000, 0.30000000000000004 },
9868 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9869 6.0000000000000000, 0.39999999999999991 },
9870 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9871 6.0000000000000000, 0.50000000000000000 },
9872 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9873 6.0000000000000000, 0.60000000000000009 },
9874 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9875 6.0000000000000000, 0.69999999999999996 },
9876 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9877 6.0000000000000000, 0.80000000000000004 },
9878 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9879 6.0000000000000000, 0.89999999999999991 },
9880 };
9881
9882 // Test function for a=5.0000000000000000, b=0.0000000000000000, c=6.0000000000000000.
9883 template <typename Tp>
9884 void test143()
9885 {
9886 const Tp eps = std::numeric_limits<Tp>::epsilon();
9887 Tp max_abs_diff = -Tp(1);
9888 Tp max_abs_frac = -Tp(1);
9889 unsigned int num_datum = sizeof(data143)
9890 / sizeof(testcase_hyperg<double>);
9891 for (unsigned int i = 0; i < num_datum; ++i)
9892 {
9893 const Tp f = std::tr1::hyperg(Tp(data143[i].a), Tp(data143[i].b),
9894 Tp(data143[i].c), Tp(data143[i].x));
9895 const Tp f0 = data143[i].f0;
9896 const Tp diff = f - f0;
9897 if (std::abs(diff) > max_abs_diff)
9898 max_abs_diff = std::abs(diff);
9899 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
9900 {
9901 const Tp frac = diff / f0;
9902 if (std::abs(frac) > max_abs_frac)
9903 max_abs_frac = std::abs(frac);
9904 }
9905 }
9906 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9907 }
9908
9909 // Test data for a=5.0000000000000000, b=0.0000000000000000, c=8.0000000000000000.
9910 testcase_hyperg<double> data144[] = {
9911 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9912 8.0000000000000000, -0.90000000000000002 },
9913 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9914 8.0000000000000000, -0.80000000000000004 },
9915 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9916 8.0000000000000000, -0.69999999999999996 },
9917 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9918 8.0000000000000000, -0.59999999999999998 },
9919 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9920 8.0000000000000000, -0.50000000000000000 },
9921 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9922 8.0000000000000000, -0.40000000000000002 },
9923 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9924 8.0000000000000000, -0.30000000000000004 },
9925 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9926 8.0000000000000000, -0.19999999999999996 },
9927 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9928 8.0000000000000000, -0.099999999999999978 },
9929 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9930 8.0000000000000000, 0.0000000000000000 },
9931 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9932 8.0000000000000000, 0.10000000000000009 },
9933 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9934 8.0000000000000000, 0.19999999999999996 },
9935 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9936 8.0000000000000000, 0.30000000000000004 },
9937 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9938 8.0000000000000000, 0.39999999999999991 },
9939 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9940 8.0000000000000000, 0.50000000000000000 },
9941 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9942 8.0000000000000000, 0.60000000000000009 },
9943 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9944 8.0000000000000000, 0.69999999999999996 },
9945 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9946 8.0000000000000000, 0.80000000000000004 },
9947 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9948 8.0000000000000000, 0.89999999999999991 },
9949 };
9950
9951 // Test function for a=5.0000000000000000, b=0.0000000000000000, c=8.0000000000000000.
9952 template <typename Tp>
9953 void test144()
9954 {
9955 const Tp eps = std::numeric_limits<Tp>::epsilon();
9956 Tp max_abs_diff = -Tp(1);
9957 Tp max_abs_frac = -Tp(1);
9958 unsigned int num_datum = sizeof(data144)
9959 / sizeof(testcase_hyperg<double>);
9960 for (unsigned int i = 0; i < num_datum; ++i)
9961 {
9962 const Tp f = std::tr1::hyperg(Tp(data144[i].a), Tp(data144[i].b),
9963 Tp(data144[i].c), Tp(data144[i].x));
9964 const Tp f0 = data144[i].f0;
9965 const Tp diff = f - f0;
9966 if (std::abs(diff) > max_abs_diff)
9967 max_abs_diff = std::abs(diff);
9968 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
9969 {
9970 const Tp frac = diff / f0;
9971 if (std::abs(frac) > max_abs_frac)
9972 max_abs_frac = std::abs(frac);
9973 }
9974 }
9975 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9976 }
9977
9978 // Test data for a=5.0000000000000000, b=0.0000000000000000, c=10.000000000000000.
9979 testcase_hyperg<double> data145[] = {
9980 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9981 10.000000000000000, -0.90000000000000002 },
9982 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9983 10.000000000000000, -0.80000000000000004 },
9984 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9985 10.000000000000000, -0.69999999999999996 },
9986 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9987 10.000000000000000, -0.59999999999999998 },
9988 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9989 10.000000000000000, -0.50000000000000000 },
9990 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9991 10.000000000000000, -0.40000000000000002 },
9992 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9993 10.000000000000000, -0.30000000000000004 },
9994 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9995 10.000000000000000, -0.19999999999999996 },
9996 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9997 10.000000000000000, -0.099999999999999978 },
9998 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
9999 10.000000000000000, 0.0000000000000000 },
10000 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
10001 10.000000000000000, 0.10000000000000009 },
10002 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
10003 10.000000000000000, 0.19999999999999996 },
10004 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
10005 10.000000000000000, 0.30000000000000004 },
10006 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
10007 10.000000000000000, 0.39999999999999991 },
10008 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
10009 10.000000000000000, 0.50000000000000000 },
10010 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
10011 10.000000000000000, 0.60000000000000009 },
10012 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
10013 10.000000000000000, 0.69999999999999996 },
10014 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
10015 10.000000000000000, 0.80000000000000004 },
10016 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
10017 10.000000000000000, 0.89999999999999991 },
10018 };
10019
10020 // Test function for a=5.0000000000000000, b=0.0000000000000000, c=10.000000000000000.
10021 template <typename Tp>
10022 void test145()
10023 {
10024 const Tp eps = std::numeric_limits<Tp>::epsilon();
10025 Tp max_abs_diff = -Tp(1);
10026 Tp max_abs_frac = -Tp(1);
10027 unsigned int num_datum = sizeof(data145)
10028 / sizeof(testcase_hyperg<double>);
10029 for (unsigned int i = 0; i < num_datum; ++i)
10030 {
10031 const Tp f = std::tr1::hyperg(Tp(data145[i].a), Tp(data145[i].b),
10032 Tp(data145[i].c), Tp(data145[i].x));
10033 const Tp f0 = data145[i].f0;
10034 const Tp diff = f - f0;
10035 if (std::abs(diff) > max_abs_diff)
10036 max_abs_diff = std::abs(diff);
10037 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
10038 {
10039 const Tp frac = diff / f0;
10040 if (std::abs(frac) > max_abs_frac)
10041 max_abs_frac = std::abs(frac);
10042 }
10043 }
10044 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
10045 }
10046
10047 // Test data for a=5.0000000000000000, b=0.50000000000000000, c=2.0000000000000000.
10048 testcase_hyperg<double> data146[] = {
10049 { 0.52275983209457511, 5.0000000000000000, 0.50000000000000000,
10050 2.0000000000000000, -0.90000000000000002 },
10051 { 0.54700336898142965, 5.0000000000000000, 0.50000000000000000,
10052 2.0000000000000000, -0.80000000000000004 },
10053 { 0.57468955512601971, 5.0000000000000000, 0.50000000000000000,
10054 2.0000000000000000, -0.69999999999999996 },
10055 { 0.60665490543315015, 5.0000000000000000, 0.50000000000000000,
10056 2.0000000000000000, -0.59999999999999998 },
10057 { 0.64403057859056123, 5.0000000000000000, 0.50000000000000000,
10058 2.0000000000000000, -0.50000000000000000 },
10059 { 0.68838183648623719, 5.0000000000000000, 0.50000000000000000,
10060 2.0000000000000000, -0.40000000000000002 },
10061 { 0.74193265039311085, 5.0000000000000000, 0.50000000000000000,
10062 2.0000000000000000, -0.30000000000000004 },
10063 { 0.80794095908995300, 5.0000000000000000, 0.50000000000000000,
10064 2.0000000000000000, -0.19999999999999996 },
10065 { 0.89135275749639320, 5.0000000000000000, 0.50000000000000000,
10066 2.0000000000000000, -0.099999999999999978 },
10067 { 1.0000000000000000, 5.0000000000000000, 0.50000000000000000,
10068 2.0000000000000000, 0.0000000000000000 },
10069 { 1.1469266219310688, 5.0000000000000000, 0.50000000000000000,
10070 2.0000000000000000, 0.10000000000000009 },
10071 { 1.3552340708357489, 5.0000000000000000, 0.50000000000000000,
10072 2.0000000000000000, 0.19999999999999996 },
10073 { 1.6690840478838305, 5.0000000000000000, 0.50000000000000000,
10074 2.0000000000000000, 0.30000000000000004 },
10075 { 2.1815415453174483, 5.0000000000000000, 0.50000000000000000,
10076 2.0000000000000000, 0.39999999999999991 },
10077 { 3.1156892546032235, 5.0000000000000000, 0.50000000000000000,
10078 2.0000000000000000, 0.50000000000000000 },
10079 { 5.1109077417760416, 5.0000000000000000, 0.50000000000000000,
10080 2.0000000000000000, 0.60000000000000009 },
10081 { 10.560352936466296, 5.0000000000000000, 0.50000000000000000,
10082 2.0000000000000000, 0.69999999999999996 },
10083 { 33.541019662496815, 5.0000000000000000, 0.50000000000000000,
10084 2.0000000000000000, 0.80000000000000004 },
10085 { 300.66343065819501, 5.0000000000000000, 0.50000000000000000,
10086 2.0000000000000000, 0.89999999999999991 },
10087 };
10088
10089 // Test function for a=5.0000000000000000, b=0.50000000000000000, c=2.0000000000000000.
10090 template <typename Tp>
10091 void test146()
10092 {
10093 const Tp eps = std::numeric_limits<Tp>::epsilon();
10094 Tp max_abs_diff = -Tp(1);
10095 Tp max_abs_frac = -Tp(1);
10096 unsigned int num_datum = sizeof(data146)
10097 / sizeof(testcase_hyperg<double>);
10098 for (unsigned int i = 0; i < num_datum; ++i)
10099 {
10100 const Tp f = std::tr1::hyperg(Tp(data146[i].a), Tp(data146[i].b),
10101 Tp(data146[i].c), Tp(data146[i].x));
10102 const Tp f0 = data146[i].f0;
10103 const Tp diff = f - f0;
10104 if (std::abs(diff) > max_abs_diff)
10105 max_abs_diff = std::abs(diff);
10106 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
10107 {
10108 const Tp frac = diff / f0;
10109 if (std::abs(frac) > max_abs_frac)
10110 max_abs_frac = std::abs(frac);
10111 }
10112 }
10113 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
10114 }
10115
10116 // Test data for a=5.0000000000000000, b=0.50000000000000000, c=4.0000000000000000.
10117 testcase_hyperg<double> data147[] = {
10118 { 0.68252041951139264, 5.0000000000000000, 0.50000000000000000,
10119 4.0000000000000000, -0.90000000000000002 },
10120 { 0.70394732624993395, 5.0000000000000000, 0.50000000000000000,
10121 4.0000000000000000, -0.80000000000000004 },
10122 { 0.72748884971552041, 5.0000000000000000, 0.50000000000000000,
10123 4.0000000000000000, -0.69999999999999996 },
10124 { 0.75351147371199689, 5.0000000000000000, 0.50000000000000000,
10125 4.0000000000000000, -0.59999999999999998 },
10126 { 0.78247589005573748, 5.0000000000000000, 0.50000000000000000,
10127 4.0000000000000000, -0.50000000000000000 },
10128 { 0.81497017420249818, 5.0000000000000000, 0.50000000000000000,
10129 4.0000000000000000, -0.40000000000000002 },
10130 { 0.85175826875009564, 5.0000000000000000, 0.50000000000000000,
10131 4.0000000000000000, -0.30000000000000004 },
10132 { 0.89385278481745867, 5.0000000000000000, 0.50000000000000000,
10133 4.0000000000000000, -0.19999999999999996 },
10134 { 0.94262778709507411, 5.0000000000000000, 0.50000000000000000,
10135 4.0000000000000000, -0.099999999999999978 },
10136 { 1.0000000000000000, 5.0000000000000000, 0.50000000000000000,
10137 4.0000000000000000, 0.0000000000000000 },
10138 { 1.0687327277420910, 5.0000000000000000, 0.50000000000000000,
10139 4.0000000000000000, 0.10000000000000009 },
10140 { 1.1529725508983291, 5.0000000000000000, 0.50000000000000000,
10141 4.0000000000000000, 0.19999999999999996 },
10142 { 1.2592587134058799, 5.0000000000000000, 0.50000000000000000,
10143 4.0000000000000000, 0.30000000000000004 },
10144 { 1.3985773194637892, 5.0000000000000000, 0.50000000000000000,
10145 4.0000000000000000, 0.39999999999999991 },
10146 { 1.5909902576697317, 5.0000000000000000, 0.50000000000000000,
10147 4.0000000000000000, 0.50000000000000000 },
10148 { 1.8776023607249752, 5.0000000000000000, 0.50000000000000000,
10149 4.0000000000000000, 0.60000000000000009 },
10150 { 2.3582499003694646, 5.0000000000000000, 0.50000000000000000,
10151 4.0000000000000000, 0.69999999999999996 },
10152 { 3.3541019662496838, 5.0000000000000000, 0.50000000000000000,
10153 4.0000000000000000, 0.80000000000000004 },
10154 { 6.7198400278577859, 5.0000000000000000, 0.50000000000000000,
10155 4.0000000000000000, 0.89999999999999991 },
10156 };
10157
10158 // Test function for a=5.0000000000000000, b=0.50000000000000000, c=4.0000000000000000.
10159 template <typename Tp>
10160 void test147()
10161 {
10162 const Tp eps = std::numeric_limits<Tp>::epsilon();
10163 Tp max_abs_diff = -Tp(1);
10164 Tp max_abs_frac = -Tp(1);
10165 unsigned int num_datum = sizeof(data147)
10166 / sizeof(testcase_hyperg<double>);
10167 for (unsigned int i = 0; i < num_datum; ++i)
10168 {
10169 const Tp f = std::tr1::hyperg(Tp(data147[i].a), Tp(data147[i].b),
10170 Tp(data147[i].c), Tp(data147[i].x));
10171 const Tp f0 = data147[i].f0;
10172 const Tp diff = f - f0;
10173 if (std::abs(diff) > max_abs_diff)
10174 max_abs_diff = std::abs(diff);
10175 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
10176 {
10177 const Tp frac = diff / f0;
10178 if (std::abs(frac) > max_abs_frac)
10179 max_abs_frac = std::abs(frac);
10180 }
10181 }
10182 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
10183 }
10184
10185 // Test data for a=5.0000000000000000, b=0.50000000000000000, c=6.0000000000000000.
10186 testcase_hyperg<double> data148[] = {
10187 { 0.75755211927082589, 5.0000000000000000, 0.50000000000000000,
10188 6.0000000000000000, -0.90000000000000002 },
10189 { 0.77603550233010998, 5.0000000000000000, 0.50000000000000000,
10190 6.0000000000000000, -0.80000000000000004 },
10191 { 0.79596241913438492, 5.0000000000000000, 0.50000000000000000,
10192 6.0000000000000000, -0.69999999999999996 },
10193 { 0.81753360792105201, 5.0000000000000000, 0.50000000000000000,
10194 6.0000000000000000, -0.59999999999999998 },
10195 { 0.84099165409805521, 5.0000000000000000, 0.50000000000000000,
10196 6.0000000000000000, -0.50000000000000000 },
10197 { 0.86663303852180873, 5.0000000000000000, 0.50000000000000000,
10198 6.0000000000000000, -0.40000000000000002 },
10199 { 0.89482475828629970, 5.0000000000000000, 0.50000000000000000,
10200 6.0000000000000000, -0.30000000000000004 },
10201 { 0.92602774279590350, 5.0000000000000000, 0.50000000000000000,
10202 6.0000000000000000, -0.19999999999999996 },
10203 { 0.96083064727087386, 5.0000000000000000, 0.50000000000000000,
10204 6.0000000000000000, -0.099999999999999978 },
10205 { 1.0000000000000000, 5.0000000000000000, 0.50000000000000000,
10206 6.0000000000000000, 0.0000000000000000 },
10207 { 1.0445570841313008, 5.0000000000000000, 0.50000000000000000,
10208 6.0000000000000000, 0.10000000000000009 },
10209 { 1.0959004638926031, 5.0000000000000000, 0.50000000000000000,
10210 6.0000000000000000, 0.19999999999999996 },
10211 { 1.1560106261370562, 5.0000000000000000, 0.50000000000000000,
10212 6.0000000000000000, 0.30000000000000004 },
10213 { 1.2278121770678145, 5.0000000000000000, 0.50000000000000000,
10214 6.0000000000000000, 0.39999999999999991 },
10215 { 1.3158640214709998, 5.0000000000000000, 0.50000000000000000,
10216 6.0000000000000000, 0.50000000000000000 },
10217 { 1.4278095344155000, 5.0000000000000000, 0.50000000000000000,
10218 6.0000000000000000, 0.60000000000000009 },
10219 { 1.5778700502946612, 5.0000000000000000, 0.50000000000000000,
10220 6.0000000000000000, 0.69999999999999996 },
10221 { 1.7972173289196469, 5.0000000000000000, 0.50000000000000000,
10222 6.0000000000000000, 0.80000000000000004 },
10223 { 2.1789970569269732, 5.0000000000000000, 0.50000000000000000,
10224 6.0000000000000000, 0.89999999999999991 },
10225 };
10226
10227 // Test function for a=5.0000000000000000, b=0.50000000000000000, c=6.0000000000000000.
10228 template <typename Tp>
10229 void test148()
10230 {
10231 const Tp eps = std::numeric_limits<Tp>::epsilon();
10232 Tp max_abs_diff = -Tp(1);
10233 Tp max_abs_frac = -Tp(1);
10234 unsigned int num_datum = sizeof(data148)
10235 / sizeof(testcase_hyperg<double>);
10236 for (unsigned int i = 0; i < num_datum; ++i)
10237 {
10238 const Tp f = std::tr1::hyperg(Tp(data148[i].a), Tp(data148[i].b),
10239 Tp(data148[i].c), Tp(data148[i].x));
10240 const Tp f0 = data148[i].f0;
10241 const Tp diff = f - f0;
10242 if (std::abs(diff) > max_abs_diff)
10243 max_abs_diff = std::abs(diff);
10244 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
10245 {
10246 const Tp frac = diff / f0;
10247 if (std::abs(frac) > max_abs_frac)
10248 max_abs_frac = std::abs(frac);
10249 }
10250 }
10251 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
10252 }
10253
10254 // Test data for a=5.0000000000000000, b=0.50000000000000000, c=8.0000000000000000.
10255 testcase_hyperg<double> data149[] = {
10256 { 0.80270093579329471, 5.0000000000000000, 0.50000000000000000,
10257 8.0000000000000000, -0.90000000000000002 },
10258 { 0.81884974572462788, 5.0000000000000000, 0.50000000000000000,
10259 8.0000000000000000, -0.80000000000000004 },
10260 { 0.83605266330015271, 5.0000000000000000, 0.50000000000000000,
10261 8.0000000000000000, -0.69999999999999996 },
10262 { 0.85443340762795972, 5.0000000000000000, 0.50000000000000000,
10263 8.0000000000000000, -0.59999999999999998 },
10264 { 0.87413762182790655, 5.0000000000000000, 0.50000000000000000,
10265 8.0000000000000000, -0.50000000000000000 },
10266 { 0.89533826626907331, 5.0000000000000000, 0.50000000000000000,
10267 8.0000000000000000, -0.40000000000000002 },
10268 { 0.91824276674115268, 5.0000000000000000, 0.50000000000000000,
10269 8.0000000000000000, -0.30000000000000004 },
10270 { 0.94310265050720576, 5.0000000000000000, 0.50000000000000000,
10271 8.0000000000000000, -0.19999999999999996 },
10272 { 0.97022678857609712, 5.0000000000000000, 0.50000000000000000,
10273 8.0000000000000000, -0.099999999999999978 },
10274 { 1.0000000000000000, 5.0000000000000000, 0.50000000000000000,
10275 8.0000000000000000, 0.0000000000000000 },
10276 { 1.0329098673199812, 5.0000000000000000, 0.50000000000000000,
10277 8.0000000000000000, 0.10000000000000009 },
10278 { 1.0695865684573389, 5.0000000000000000, 0.50000000000000000,
10279 8.0000000000000000, 0.19999999999999996 },
10280 { 1.1108642103944570, 5.0000000000000000, 0.50000000000000000,
10281 8.0000000000000000, 0.30000000000000004 },
10282 { 1.1578795055970506, 5.0000000000000000, 0.50000000000000000,
10283 8.0000000000000000, 0.39999999999999991 },
10284 { 1.2122394794169442, 5.0000000000000000, 0.50000000000000000,
10285 8.0000000000000000, 0.50000000000000000 },
10286 { 1.2763274721556934, 5.0000000000000000, 0.50000000000000000,
10287 8.0000000000000000, 0.60000000000000009 },
10288 { 1.3539179650251021, 5.0000000000000000, 0.50000000000000000,
10289 8.0000000000000000, 0.69999999999999996 },
10290 { 1.4515986118197148, 5.0000000000000000, 0.50000000000000000,
10291 8.0000000000000000, 0.80000000000000004 },
10292 { 1.5829284571614219, 5.0000000000000000, 0.50000000000000000,
10293 8.0000000000000000, 0.89999999999999991 },
10294 };
10295
10296 // Test function for a=5.0000000000000000, b=0.50000000000000000, c=8.0000000000000000.
10297 template <typename Tp>
10298 void test149()
10299 {
10300 const Tp eps = std::numeric_limits<Tp>::epsilon();
10301 Tp max_abs_diff = -Tp(1);
10302 Tp max_abs_frac = -Tp(1);
10303 unsigned int num_datum = sizeof(data149)
10304 / sizeof(testcase_hyperg<double>);
10305 for (unsigned int i = 0; i < num_datum; ++i)
10306 {
10307 const Tp f = std::tr1::hyperg(Tp(data149[i].a), Tp(data149[i].b),
10308 Tp(data149[i].c), Tp(data149[i].x));
10309 const Tp f0 = data149[i].f0;
10310 const Tp diff = f - f0;
10311 if (std::abs(diff) > max_abs_diff)
10312 max_abs_diff = std::abs(diff);
10313 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
10314 {
10315 const Tp frac = diff / f0;
10316 if (std::abs(frac) > max_abs_frac)
10317 max_abs_frac = std::abs(frac);
10318 }
10319 }
10320 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
10321 }
10322
10323 // Test data for a=5.0000000000000000, b=0.50000000000000000, c=10.000000000000000.
10324 testcase_hyperg<double> data150[] = {
10325 { 0.83322694172301959, 5.0000000000000000, 0.50000000000000000,
10326 10.000000000000000, -0.90000000000000002 },
10327 { 0.84753931604765664, 5.0000000000000000, 0.50000000000000000,
10328 10.000000000000000, -0.80000000000000004 },
10329 { 0.86265784532195022, 5.0000000000000000, 0.50000000000000000,
10330 10.000000000000000, -0.69999999999999996 },
10331 { 0.87866479300707079, 5.0000000000000000, 0.50000000000000000,
10332 10.000000000000000, -0.59999999999999998 },
10333 { 0.89565516540263501, 5.0000000000000000, 0.50000000000000000,
10334 10.000000000000000, -0.50000000000000000 },
10335 { 0.91373946207610557, 5.0000000000000000, 0.50000000000000000,
10336 10.000000000000000, -0.40000000000000002 },
10337 { 0.93304721345881891, 5.0000000000000000, 0.50000000000000000,
10338 10.000000000000000, -0.30000000000000004 },
10339 { 0.95373159512905148, 5.0000000000000000, 0.50000000000000000,
10340 10.000000000000000, -0.19999999999999996 },
10341 { 0.97597554238828121, 5.0000000000000000, 0.50000000000000000,
10342 10.000000000000000, -0.099999999999999978 },
10343 { 1.0000000000000000, 5.0000000000000000, 0.50000000000000000,
10344 10.000000000000000, 0.0000000000000000 },
10345 { 1.0260752851887982, 5.0000000000000000, 0.50000000000000000,
10346 10.000000000000000, 0.10000000000000009 },
10347 { 1.0545371197996178, 5.0000000000000000, 0.50000000000000000,
10348 10.000000000000000, 0.19999999999999996 },
10349 { 1.0858099017045830, 5.0000000000000000, 0.50000000000000000,
10350 10.000000000000000, 0.30000000000000004 },
10351 { 1.1204416568688709, 5.0000000000000000, 0.50000000000000000,
10352 10.000000000000000, 0.39999999999999991 },
10353 { 1.1591587835964847, 5.0000000000000000, 0.50000000000000000,
10354 10.000000000000000, 0.50000000000000000 },
10355 { 1.2029564720303347, 5.0000000000000000, 0.50000000000000000,
10356 10.000000000000000, 0.60000000000000009 },
10357 { 1.2532588722007874, 5.0000000000000000, 0.50000000000000000,
10358 10.000000000000000, 0.69999999999999996 },
10359 { 1.3122319926925459, 5.0000000000000000, 0.50000000000000000,
10360 10.000000000000000, 0.80000000000000004 },
10361 { 1.3834948587364100, 5.0000000000000000, 0.50000000000000000,
10362 10.000000000000000, 0.89999999999999991 },
10363 };
10364
10365 // Test function for a=5.0000000000000000, b=0.50000000000000000, c=10.000000000000000.
10366 template <typename Tp>
10367 void test150()
10368 {
10369 const Tp eps = std::numeric_limits<Tp>::epsilon();
10370 Tp max_abs_diff = -Tp(1);
10371 Tp max_abs_frac = -Tp(1);
10372 unsigned int num_datum = sizeof(data150)
10373 / sizeof(testcase_hyperg<double>);
10374 for (unsigned int i = 0; i < num_datum; ++i)
10375 {
10376 const Tp f = std::tr1::hyperg(Tp(data150[i].a), Tp(data150[i].b),
10377 Tp(data150[i].c), Tp(data150[i].x));
10378 const Tp f0 = data150[i].f0;
10379 const Tp diff = f - f0;
10380 if (std::abs(diff) > max_abs_diff)
10381 max_abs_diff = std::abs(diff);
10382 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
10383 {
10384 const Tp frac = diff / f0;
10385 if (std::abs(frac) > max_abs_frac)
10386 max_abs_frac = std::abs(frac);
10387 }
10388 }
10389 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
10390 }
10391
10392 // Test data for a=5.0000000000000000, b=1.0000000000000000, c=2.0000000000000000.
10393 testcase_hyperg<double> data151[] = {
10394 { 0.25646288779245091, 5.0000000000000000, 1.0000000000000000,
10395 2.0000000000000000, -0.90000000000000002 },
10396 { 0.28273129096174382, 5.0000000000000000, 1.0000000000000000,
10397 2.0000000000000000, -0.80000000000000004 },
10398 { 0.31438201170962976, 5.0000000000000000, 1.0000000000000000,
10399 2.0000000000000000, -0.69999999999999996 },
10400 { 0.35308837890625017, 5.0000000000000000, 1.0000000000000000,
10401 2.0000000000000000, -0.59999999999999998 },
10402 { 0.40123456790123463, 5.0000000000000000, 1.0000000000000000,
10403 2.0000000000000000, -0.50000000000000000 },
10404 { 0.46230737192836319, 5.0000000000000000, 1.0000000000000000,
10405 2.0000000000000000, -0.40000000000000002 },
10406 { 0.54156016946185359, 5.0000000000000000, 1.0000000000000000,
10407 2.0000000000000000, -0.30000000000000004 },
10408 { 0.64718364197530875, 5.0000000000000000, 1.0000000000000000,
10409 2.0000000000000000, -0.19999999999999996 },
10410 { 0.79246636158732342, 5.0000000000000000, 1.0000000000000000,
10411 2.0000000000000000, -0.099999999999999978 },
10412 { 1.0000000000000000, 5.0000000000000000, 1.0000000000000000,
10413 2.0000000000000000, 0.0000000000000000 },
10414 { 1.3103947568968148, 5.0000000000000000, 1.0000000000000000,
10415 2.0000000000000000, 0.10000000000000009 },
10416 { 1.8017578125000004, 5.0000000000000000, 1.0000000000000000,
10417 2.0000000000000000, 0.19999999999999996 },
10418 { 2.6374427321949185, 5.0000000000000000, 1.0000000000000000,
10419 2.0000000000000000, 0.30000000000000004 },
10420 { 4.1975308641975282, 5.0000000000000000, 1.0000000000000000,
10421 2.0000000000000000, 0.39999999999999991 },
10422 { 7.4999999999999964, 5.0000000000000000, 1.0000000000000000,
10423 2.0000000000000000, 0.50000000000000000 },
10424 { 15.859375000000012, 5.0000000000000000, 1.0000000000000000,
10425 2.0000000000000000, 0.60000000000000009 },
10426 { 43.734567901234513, 5.0000000000000000, 1.0000000000000000,
10427 2.0000000000000000, 0.69999999999999996 },
10428 { 194.99999999999994, 5.0000000000000000, 1.0000000000000000,
10429 2.0000000000000000, 0.80000000000000004 },
10430 { 2777.4999999999832, 5.0000000000000000, 1.0000000000000000,
10431 2.0000000000000000, 0.89999999999999991 },
10432 };
10433
10434 // Test function for a=5.0000000000000000, b=1.0000000000000000, c=2.0000000000000000.
10435 template <typename Tp>
10436 void test151()
10437 {
10438 const Tp eps = std::numeric_limits<Tp>::epsilon();
10439 Tp max_abs_diff = -Tp(1);
10440 Tp max_abs_frac = -Tp(1);
10441 unsigned int num_datum = sizeof(data151)
10442 / sizeof(testcase_hyperg<double>);
10443 for (unsigned int i = 0; i < num_datum; ++i)
10444 {
10445 const Tp f = std::tr1::hyperg(Tp(data151[i].a), Tp(data151[i].b),
10446 Tp(data151[i].c), Tp(data151[i].x));
10447 const Tp f0 = data151[i].f0;
10448 const Tp diff = f - f0;
10449 if (std::abs(diff) > max_abs_diff)
10450 max_abs_diff = std::abs(diff);
10451 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
10452 {
10453 const Tp frac = diff / f0;
10454 if (std::abs(frac) > max_abs_frac)
10455 max_abs_frac = std::abs(frac);
10456 }
10457 }
10458 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
10459 }
10460
10461 // Test data for a=5.0000000000000000, b=1.0000000000000000, c=4.0000000000000000.
10462 testcase_hyperg<double> data152[] = {
10463 { 0.46398891966759004, 5.0000000000000000, 1.0000000000000000,
10464 4.0000000000000000, -0.90000000000000002 },
10465 { 0.49382716049382713, 5.0000000000000000, 1.0000000000000000,
10466 4.0000000000000000, -0.80000000000000004 },
10467 { 0.52768166089965396, 5.0000000000000000, 1.0000000000000000,
10468 4.0000000000000000, -0.69999999999999996 },
10469 { 0.56640624999999978, 5.0000000000000000, 1.0000000000000000,
10470 4.0000000000000000, -0.59999999999999998 },
10471 { 0.61111111111111116, 5.0000000000000000, 1.0000000000000000,
10472 4.0000000000000000, -0.50000000000000000 },
10473 { 0.66326530612244894, 5.0000000000000000, 1.0000000000000000,
10474 4.0000000000000000, -0.40000000000000002 },
10475 { 0.72485207100591698, 5.0000000000000000, 1.0000000000000000,
10476 4.0000000000000000, -0.30000000000000004 },
10477 { 0.79861111111111094, 5.0000000000000000, 1.0000000000000000,
10478 4.0000000000000000, -0.19999999999999996 },
10479 { 0.88842975206611552, 5.0000000000000000, 1.0000000000000000,
10480 4.0000000000000000, -0.099999999999999978 },
10481 { 1.0000000000000000, 5.0000000000000000, 1.0000000000000000,
10482 4.0000000000000000, 0.0000000000000000 },
10483 { 1.1419753086419753, 5.0000000000000000, 1.0000000000000000,
10484 4.0000000000000000, 0.10000000000000009 },
10485 { 1.3281249999999998, 5.0000000000000000, 1.0000000000000000,
10486 4.0000000000000000, 0.19999999999999996 },
10487 { 1.5816326530612239, 5.0000000000000000, 1.0000000000000000,
10488 4.0000000000000000, 0.30000000000000004 },
10489 { 1.9444444444444444, 5.0000000000000000, 1.0000000000000000,
10490 4.0000000000000000, 0.39999999999999991 },
10491 { 2.5000000000000000, 5.0000000000000000, 1.0000000000000000,
10492 4.0000000000000000, 0.50000000000000000 },
10493 { 3.4374999999999996, 5.0000000000000000, 1.0000000000000000,
10494 4.0000000000000000, 0.60000000000000009 },
10495 { 5.2777777777777715, 5.0000000000000000, 1.0000000000000000,
10496 4.0000000000000000, 0.69999999999999996 },
10497 { 9.9999999999999947, 5.0000000000000000, 1.0000000000000000,
10498 4.0000000000000000, 0.80000000000000004 },
10499 { 32.499999999999837, 5.0000000000000000, 1.0000000000000000,
10500 4.0000000000000000, 0.89999999999999991 },
10501 };
10502
10503 // Test function for a=5.0000000000000000, b=1.0000000000000000, c=4.0000000000000000.
10504 template <typename Tp>
10505 void test152()
10506 {
10507 const Tp eps = std::numeric_limits<Tp>::epsilon();
10508 Tp max_abs_diff = -Tp(1);
10509 Tp max_abs_frac = -Tp(1);
10510 unsigned int num_datum = sizeof(data152)
10511 / sizeof(testcase_hyperg<double>);
10512 for (unsigned int i = 0; i < num_datum; ++i)
10513 {
10514 const Tp f = std::tr1::hyperg(Tp(data152[i].a), Tp(data152[i].b),
10515 Tp(data152[i].c), Tp(data152[i].x));
10516 const Tp f0 = data152[i].f0;
10517 const Tp diff = f - f0;
10518 if (std::abs(diff) > max_abs_diff)
10519 max_abs_diff = std::abs(diff);
10520 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
10521 {
10522 const Tp frac = diff / f0;
10523 if (std::abs(frac) > max_abs_frac)
10524 max_abs_frac = std::abs(frac);
10525 }
10526 }
10527 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
10528 }
10529
10530 // Test data for a=5.0000000000000000, b=1.0000000000000000, c=6.0000000000000000.
10531 testcase_hyperg<double> data153[] = {
10532 { 0.57476744883397501, 5.0000000000000000, 1.0000000000000000,
10533 6.0000000000000000, -0.90000000000000002 },
10534 { 0.60302731682513933, 5.0000000000000000, 1.0000000000000000,
10535 6.0000000000000000, -0.80000000000000004 },
10536 { 0.63425708719096396, 5.0000000000000000, 1.0000000000000000,
10537 6.0000000000000000, -0.69999999999999996 },
10538 { 0.66895764182970419, 5.0000000000000000, 1.0000000000000000,
10539 6.0000000000000000, -0.59999999999999998 },
10540 { 0.70775063063963428, 5.0000000000000000, 1.0000000000000000,
10541 6.0000000000000000, -0.50000000000000000 },
10542 { 0.75141762103495924, 5.0000000000000000, 1.0000000000000000,
10543 6.0000000000000000, -0.40000000000000002 },
10544 { 0.80095569442603298, 5.0000000000000000, 1.0000000000000000,
10545 6.0000000000000000, -0.30000000000000004 },
10546 { 0.85765823887436754, 5.0000000000000000, 1.0000000000000000,
10547 6.0000000000000000, -0.19999999999999996 },
10548 { 0.92323549576335540, 5.0000000000000000, 1.0000000000000000,
10549 6.0000000000000000, -0.099999999999999978 },
10550 { 1.0000000000000000, 5.0000000000000000, 1.0000000000000000,
10551 6.0000000000000000, 0.0000000000000000 },
10552 { 1.0911622464839472, 5.0000000000000000, 1.0000000000000000,
10553 6.0000000000000000, 0.10000000000000009 },
10554 { 1.2013226178607666, 5.0000000000000000, 1.0000000000000000,
10555 6.0000000000000000, 0.19999999999999996 },
10556 { 1.3373332072682687, 5.0000000000000000, 1.0000000000000000,
10557 6.0000000000000000, 0.30000000000000004 },
10558 { 1.5099074378209716, 5.0000000000000000, 1.0000000000000000,
10559 6.0000000000000000, 0.39999999999999991 },
10560 { 1.7368822229245819, 5.0000000000000000, 1.0000000000000000,
10561 6.0000000000000000, 0.50000000000000000 },
10562 { 2.0505871832661429, 5.0000000000000000, 1.0000000000000000,
10563 6.0000000000000000, 0.60000000000000009 },
10564 { 2.5172389775867967, 5.0000000000000000, 1.0000000000000000,
10565 6.0000000000000000, 0.69999999999999996 },
10566 { 3.3015631983556144, 5.0000000000000000, 1.0000000000000000,
10567 6.0000000000000000, 0.80000000000000004 },
10568 { 5.0005935155044519, 5.0000000000000000, 1.0000000000000000,
10569 6.0000000000000000, 0.89999999999999991 },
10570 };
10571
10572 // Test function for a=5.0000000000000000, b=1.0000000000000000, c=6.0000000000000000.
10573 template <typename Tp>
10574 void test153()
10575 {
10576 const Tp eps = std::numeric_limits<Tp>::epsilon();
10577 Tp max_abs_diff = -Tp(1);
10578 Tp max_abs_frac = -Tp(1);
10579 unsigned int num_datum = sizeof(data153)
10580 / sizeof(testcase_hyperg<double>);
10581 for (unsigned int i = 0; i < num_datum; ++i)
10582 {
10583 const Tp f = std::tr1::hyperg(Tp(data153[i].a), Tp(data153[i].b),
10584 Tp(data153[i].c), Tp(data153[i].x));
10585 const Tp f0 = data153[i].f0;
10586 const Tp diff = f - f0;
10587 if (std::abs(diff) > max_abs_diff)
10588 max_abs_diff = std::abs(diff);
10589 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
10590 {
10591 const Tp frac = diff / f0;
10592 if (std::abs(frac) > max_abs_frac)
10593 max_abs_frac = std::abs(frac);
10594 }
10595 }
10596 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
10597 }
10598
10599 // Test data for a=5.0000000000000000, b=1.0000000000000000, c=8.0000000000000000.
10600 testcase_hyperg<double> data154[] = {
10601 { 0.64582752605387961, 5.0000000000000000, 1.0000000000000000,
10602 8.0000000000000000, -0.90000000000000002 },
10603 { 0.67184161997264169, 5.0000000000000000, 1.0000000000000000,
10604 8.0000000000000000, -0.80000000000000004 },
10605 { 0.70012779922368040, 5.0000000000000000, 1.0000000000000000,
10606 8.0000000000000000, -0.69999999999999996 },
10607 { 0.73100784656910256, 5.0000000000000000, 1.0000000000000000,
10608 8.0000000000000000, -0.59999999999999998 },
10609 { 0.76486919089091077, 5.0000000000000000, 1.0000000000000000,
10610 8.0000000000000000, -0.50000000000000000 },
10611 { 0.80218301124334579, 5.0000000000000000, 1.0000000000000000,
10612 8.0000000000000000, -0.40000000000000002 },
10613 { 0.84352883533234446, 5.0000000000000000, 1.0000000000000000,
10614 8.0000000000000000, -0.30000000000000004 },
10615 { 0.88962858902212572, 5.0000000000000000, 1.0000000000000000,
10616 8.0000000000000000, -0.19999999999999996 },
10617 { 0.94139473468584123, 5.0000000000000000, 1.0000000000000000,
10618 8.0000000000000000, -0.099999999999999978 },
10619 { 1.0000000000000000, 5.0000000000000000, 1.0000000000000000,
10620 8.0000000000000000, 0.0000000000000000 },
10621 { 1.0669812691939897, 5.0000000000000000, 1.0000000000000000,
10622 8.0000000000000000, 0.10000000000000009 },
10623 { 1.1443996012177726, 5.0000000000000000, 1.0000000000000000,
10624 8.0000000000000000, 0.19999999999999996 },
10625 { 1.2350966976721314, 5.0000000000000000, 1.0000000000000000,
10626 8.0000000000000000, 0.30000000000000004 },
10627 { 1.3431264370409088, 5.0000000000000000, 1.0000000000000000,
10628 8.0000000000000000, 0.39999999999999991 },
10629 { 1.4745266814162399, 5.0000000000000000, 1.0000000000000000,
10630 8.0000000000000000, 0.50000000000000000 },
10631 { 1.6388137104840066, 5.0000000000000000, 1.0000000000000000,
10632 8.0000000000000000, 0.60000000000000009 },
10633 { 1.8522074849776518, 5.0000000000000000, 1.0000000000000000,
10634 8.0000000000000000, 0.69999999999999996 },
10635 { 2.1458016978417458, 5.0000000000000000, 1.0000000000000000,
10636 8.0000000000000000, 0.80000000000000004 },
10637 { 2.5927464669826339, 5.0000000000000000, 1.0000000000000000,
10638 8.0000000000000000, 0.89999999999999991 },
10639 };
10640
10641 // Test function for a=5.0000000000000000, b=1.0000000000000000, c=8.0000000000000000.
10642 template <typename Tp>
10643 void test154()
10644 {
10645 const Tp eps = std::numeric_limits<Tp>::epsilon();
10646 Tp max_abs_diff = -Tp(1);
10647 Tp max_abs_frac = -Tp(1);
10648 unsigned int num_datum = sizeof(data154)
10649 / sizeof(testcase_hyperg<double>);
10650 for (unsigned int i = 0; i < num_datum; ++i)
10651 {
10652 const Tp f = std::tr1::hyperg(Tp(data154[i].a), Tp(data154[i].b),
10653 Tp(data154[i].c), Tp(data154[i].x));
10654 const Tp f0 = data154[i].f0;
10655 const Tp diff = f - f0;
10656 if (std::abs(diff) > max_abs_diff)
10657 max_abs_diff = std::abs(diff);
10658 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
10659 {
10660 const Tp frac = diff / f0;
10661 if (std::abs(frac) > max_abs_frac)
10662 max_abs_frac = std::abs(frac);
10663 }
10664 }
10665 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
10666 }
10667
10668 // Test data for a=5.0000000000000000, b=1.0000000000000000, c=10.000000000000000.
10669 testcase_hyperg<double> data155[] = {
10670 { 0.69583236336670629, 5.0000000000000000, 1.0000000000000000,
10671 10.000000000000000, -0.90000000000000002 },
10672 { 0.71968920666899694, 5.0000000000000000, 1.0000000000000000,
10673 10.000000000000000, -0.80000000000000004 },
10674 { 0.74533885416044232, 5.0000000000000000, 1.0000000000000000,
10675 10.000000000000000, -0.69999999999999996 },
10676 { 0.77300145361503014, 5.0000000000000000, 1.0000000000000000,
10677 10.000000000000000, -0.59999999999999998 },
10678 { 0.80293630810919514, 5.0000000000000000, 1.0000000000000000,
10679 10.000000000000000, -0.50000000000000000 },
10680 { 0.83545132638592035, 5.0000000000000000, 1.0000000000000000,
10681 10.000000000000000, -0.40000000000000002 },
10682 { 0.87091544744412508, 5.0000000000000000, 1.0000000000000000,
10683 10.000000000000000, -0.30000000000000004 },
10684 { 0.90977522877919847, 5.0000000000000000, 1.0000000000000000,
10685 10.000000000000000, -0.19999999999999996 },
10686 { 0.95257738192069130, 5.0000000000000000, 1.0000000000000000,
10687 10.000000000000000, -0.099999999999999978 },
10688 { 1.0000000000000000, 5.0000000000000000, 1.0000000000000000,
10689 10.000000000000000, 0.0000000000000000 },
10690 { 1.0528968282789379, 5.0000000000000000, 1.0000000000000000,
10691 10.000000000000000, 0.10000000000000009 },
10692 { 1.1123617169062123, 5.0000000000000000, 1.0000000000000000,
10693 10.000000000000000, 0.19999999999999996 },
10694 { 1.1798254572896132, 5.0000000000000000, 1.0000000000000000,
10695 10.000000000000000, 0.30000000000000004 },
10696 { 1.2572069000522696, 5.0000000000000000, 1.0000000000000000,
10697 10.000000000000000, 0.39999999999999991 },
10698 { 1.3471600884974377, 5.0000000000000000, 1.0000000000000000,
10699 10.000000000000000, 0.50000000000000000 },
10700 { 1.4535032279573519, 5.0000000000000000, 1.0000000000000000,
10701 10.000000000000000, 0.60000000000000009 },
10702 { 1.5820245752814948, 5.0000000000000000, 1.0000000000000000,
10703 10.000000000000000, 0.69999999999999996 },
10704 { 1.7421756366906538, 5.0000000000000000, 1.0000000000000000,
10705 10.000000000000000, 0.80000000000000004 },
10706 { 1.9513145531098233, 5.0000000000000000, 1.0000000000000000,
10707 10.000000000000000, 0.89999999999999991 },
10708 };
10709
10710 // Test function for a=5.0000000000000000, b=1.0000000000000000, c=10.000000000000000.
10711 template <typename Tp>
10712 void test155()
10713 {
10714 const Tp eps = std::numeric_limits<Tp>::epsilon();
10715 Tp max_abs_diff = -Tp(1);
10716 Tp max_abs_frac = -Tp(1);
10717 unsigned int num_datum = sizeof(data155)
10718 / sizeof(testcase_hyperg<double>);
10719 for (unsigned int i = 0; i < num_datum; ++i)
10720 {
10721 const Tp f = std::tr1::hyperg(Tp(data155[i].a), Tp(data155[i].b),
10722 Tp(data155[i].c), Tp(data155[i].x));
10723 const Tp f0 = data155[i].f0;
10724 const Tp diff = f - f0;
10725 if (std::abs(diff) > max_abs_diff)
10726 max_abs_diff = std::abs(diff);
10727 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
10728 {
10729 const Tp frac = diff / f0;
10730 if (std::abs(frac) > max_abs_frac)
10731 max_abs_frac = std::abs(frac);
10732 }
10733 }
10734 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
10735 }
10736
10737 // Test data for a=5.0000000000000000, b=2.0000000000000000, c=2.0000000000000000.
10738 testcase_hyperg<double> data156[] = {
10739 { 0.040386107340619266, 5.0000000000000000, 2.0000000000000000,
10740 2.0000000000000000, -0.90000000000000002 },
10741 { 0.052922149401344633, 5.0000000000000000, 2.0000000000000000,
10742 2.0000000000000000, -0.80000000000000004 },
10743 { 0.070429627772374270, 5.0000000000000000, 2.0000000000000000,
10744 2.0000000000000000, -0.69999999999999996 },
10745 { 0.095367431640624972, 5.0000000000000000, 2.0000000000000000,
10746 2.0000000000000000, -0.59999999999999998 },
10747 { 0.13168724279835387, 5.0000000000000000, 2.0000000000000000,
10748 2.0000000000000000, -0.50000000000000000 },
10749 { 0.18593443208187066, 5.0000000000000000, 2.0000000000000000,
10750 2.0000000000000000, -0.40000000000000002 },
10751 { 0.26932907434290437, 5.0000000000000000, 2.0000000000000000,
10752 2.0000000000000000, -0.30000000000000004 },
10753 { 0.40187757201646096, 5.0000000000000000, 2.0000000000000000,
10754 2.0000000000000000, -0.19999999999999996 },
10755 { 0.62092132305915493, 5.0000000000000000, 2.0000000000000000,
10756 2.0000000000000000, -0.099999999999999978 },
10757 { 1.0000000000000000, 5.0000000000000000, 2.0000000000000000,
10758 2.0000000000000000, 0.0000000000000000 },
10759 { 1.6935087808430296, 5.0000000000000000, 2.0000000000000000,
10760 2.0000000000000000, 0.10000000000000009 },
10761 { 3.0517578124999991, 5.0000000000000000, 2.0000000000000000,
10762 2.0000000000000000, 0.19999999999999996 },
10763 { 5.9499018266198629, 5.0000000000000000, 2.0000000000000000,
10764 2.0000000000000000, 0.30000000000000004 },
10765 { 12.860082304526737, 5.0000000000000000, 2.0000000000000000,
10766 2.0000000000000000, 0.39999999999999991 },
10767 { 32.000000000000000, 5.0000000000000000, 2.0000000000000000,
10768 2.0000000000000000, 0.50000000000000000 },
10769 { 97.656250000000114, 5.0000000000000000, 2.0000000000000000,
10770 2.0000000000000000, 0.60000000000000009 },
10771 { 411.52263374485580, 5.0000000000000000, 2.0000000000000000,
10772 2.0000000000000000, 0.69999999999999996 },
10773 { 3124.9999999999991, 5.0000000000000000, 2.0000000000000000,
10774 2.0000000000000000, 0.80000000000000004 },
10775 { 99999.999999999665, 5.0000000000000000, 2.0000000000000000,
10776 2.0000000000000000, 0.89999999999999991 },
10777 };
10778
10779 // Test function for a=5.0000000000000000, b=2.0000000000000000, c=2.0000000000000000.
10780 template <typename Tp>
10781 void test156()
10782 {
10783 const Tp eps = std::numeric_limits<Tp>::epsilon();
10784 Tp max_abs_diff = -Tp(1);
10785 Tp max_abs_frac = -Tp(1);
10786 unsigned int num_datum = sizeof(data156)
10787 / sizeof(testcase_hyperg<double>);
10788 for (unsigned int i = 0; i < num_datum; ++i)
10789 {
10790 const Tp f = std::tr1::hyperg(Tp(data156[i].a), Tp(data156[i].b),
10791 Tp(data156[i].c), Tp(data156[i].x));
10792 const Tp f0 = data156[i].f0;
10793 const Tp diff = f - f0;
10794 if (std::abs(diff) > max_abs_diff)
10795 max_abs_diff = std::abs(diff);
10796 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
10797 {
10798 const Tp frac = diff / f0;
10799 if (std::abs(frac) > max_abs_frac)
10800 max_abs_frac = std::abs(frac);
10801 }
10802 }
10803 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
10804 }
10805
10806 // Test data for a=5.0000000000000000, b=2.0000000000000000, c=4.0000000000000000.
10807 testcase_hyperg<double> data157[] = {
10808 { 0.21140107887447140, 5.0000000000000000, 2.0000000000000000,
10809 4.0000000000000000, -0.90000000000000002 },
10810 { 0.24005486968449935, 5.0000000000000000, 2.0000000000000000,
10811 4.0000000000000000, -0.80000000000000004 },
10812 { 0.27478119275391821, 5.0000000000000000, 2.0000000000000000,
10813 4.0000000000000000, -0.69999999999999996 },
10814 { 0.31738281249999994, 5.0000000000000000, 2.0000000000000000,
10815 4.0000000000000000, -0.59999999999999998 },
10816 { 0.37037037037037035, 5.0000000000000000, 2.0000000000000000,
10817 4.0000000000000000, -0.50000000000000000 },
10818 { 0.43731778425655982, 5.0000000000000000, 2.0000000000000000,
10819 4.0000000000000000, -0.40000000000000002 },
10820 { 0.52344105598543444, 5.0000000000000000, 2.0000000000000000,
10821 4.0000000000000000, -0.30000000000000004 },
10822 { 0.63657407407407429, 5.0000000000000000, 2.0000000000000000,
10823 4.0000000000000000, -0.19999999999999996 },
10824 { 0.78888054094665638, 5.0000000000000000, 2.0000000000000000,
10825 4.0000000000000000, -0.099999999999999978 },
10826 { 1.0000000000000000, 5.0000000000000000, 2.0000000000000000,
10827 4.0000000000000000, 0.0000000000000000 },
10828 { 1.3031550068587108, 5.0000000000000000, 2.0000000000000000,
10829 4.0000000000000000, 0.10000000000000009 },
10830 { 1.7578125000000002, 5.0000000000000000, 2.0000000000000000,
10831 4.0000000000000000, 0.19999999999999996 },
10832 { 2.4781341107871717, 5.0000000000000000, 2.0000000000000000,
10833 4.0000000000000000, 0.30000000000000004 },
10834 { 3.7037037037037037, 5.0000000000000000, 2.0000000000000000,
10835 4.0000000000000000, 0.39999999999999991 },
10836 { 5.9999999999999982, 5.0000000000000000, 2.0000000000000000,
10837 4.0000000000000000, 0.50000000000000000 },
10838 { 10.937500000000005, 5.0000000000000000, 2.0000000000000000,
10839 4.0000000000000000, 0.60000000000000009 },
10840 { 24.074074074074076, 5.0000000000000000, 2.0000000000000000,
10841 4.0000000000000000, 0.69999999999999996 },
10842 { 74.999999999999957, 5.0000000000000000, 2.0000000000000000,
10843 4.0000000000000000, 0.80000000000000004 },
10844 { 549.99999999999670, 5.0000000000000000, 2.0000000000000000,
10845 4.0000000000000000, 0.89999999999999991 },
10846 };
10847
10848 // Test function for a=5.0000000000000000, b=2.0000000000000000, c=4.0000000000000000.
10849 template <typename Tp>
10850 void test157()
10851 {
10852 const Tp eps = std::numeric_limits<Tp>::epsilon();
10853 Tp max_abs_diff = -Tp(1);
10854 Tp max_abs_frac = -Tp(1);
10855 unsigned int num_datum = sizeof(data157)
10856 / sizeof(testcase_hyperg<double>);
10857 for (unsigned int i = 0; i < num_datum; ++i)
10858 {
10859 const Tp f = std::tr1::hyperg(Tp(data157[i].a), Tp(data157[i].b),
10860 Tp(data157[i].c), Tp(data157[i].x));
10861 const Tp f0 = data157[i].f0;
10862 const Tp diff = f - f0;
10863 if (std::abs(diff) > max_abs_diff)
10864 max_abs_diff = std::abs(diff);
10865 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
10866 {
10867 const Tp frac = diff / f0;
10868 if (std::abs(frac) > max_abs_frac)
10869 max_abs_frac = std::abs(frac);
10870 }
10871 }
10872 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
10873 }
10874
10875 // Test data for a=5.0000000000000000, b=2.0000000000000000, c=6.0000000000000000.
10876 testcase_hyperg<double> data158[] = {
10877 { 0.33250915203252107, 5.0000000000000000, 2.0000000000000000,
10878 6.0000000000000000, -0.90000000000000002 },
10879 { 0.36566851047721960, 5.0000000000000000, 2.0000000000000000,
10880 6.0000000000000000, -0.80000000000000004 },
10881 { 0.40414812182437942, 5.0000000000000000, 2.0000000000000000,
10882 6.0000000000000000, -0.69999999999999996 },
10883 { 0.44916943268118470, 5.0000000000000000, 2.0000000000000000,
10884 6.0000000000000000, -0.59999999999999998 },
10885 { 0.50233081077479569, 5.0000000000000000, 2.0000000000000000,
10886 6.0000000000000000, -0.50000000000000000 },
10887 { 0.56575808728873322, 5.0000000000000000, 2.0000000000000000,
10888 6.0000000000000000, -0.40000000000000002 },
10889 { 0.64233106844971422, 5.0000000000000000, 2.0000000000000000,
10890 6.0000000000000000, -0.30000000000000004 },
10891 { 0.73603371116919514, 5.0000000000000000, 2.0000000000000000,
10892 6.0000000000000000, -0.19999999999999996 },
10893 { 0.85251256240112439, 5.0000000000000000, 2.0000000000000000,
10894 6.0000000000000000, -0.099999999999999978 },
10895 { 1.0000000000000000, 5.0000000000000000, 2.0000000000000000,
10896 6.0000000000000000, 0.0000000000000000 },
10897 { 1.1909065696197674, 5.0000000000000000, 2.0000000000000000,
10898 6.0000000000000000, 0.10000000000000009 },
10899 { 1.4447095285569311, 5.0000000000000000, 2.0000000000000000,
10900 6.0000000000000000, 0.19999999999999996 },
10901 { 1.7935243137840653, 5.0000000000000000, 2.0000000000000000,
10902 6.0000000000000000, 0.30000000000000004 },
10903 { 2.2937035820494454, 5.0000000000000000, 2.0000000000000000,
10904 6.0000000000000000, 0.39999999999999991 },
10905 { 3.0524711083016687, 5.0000000000000000, 2.0000000000000000,
10906 6.0000000000000000, 0.50000000000000000 },
10907 { 4.2976512669354259, 5.0000000000000000, 2.0000000000000000,
10908 6.0000000000000000, 0.60000000000000009 },
10909 { 6.5977107563194677, 5.0000000000000000, 2.0000000000000000,
10910 6.0000000000000000, 0.69999999999999996 },
10911 { 11.793747206577530, 5.0000000000000000, 2.0000000000000000,
10912 6.0000000000000000, 0.80000000000000004 },
10913 { 29.997625937982058, 5.0000000000000000, 2.0000000000000000,
10914 6.0000000000000000, 0.89999999999999991 },
10915 };
10916
10917 // Test function for a=5.0000000000000000, b=2.0000000000000000, c=6.0000000000000000.
10918 template <typename Tp>
10919 void test158()
10920 {
10921 const Tp eps = std::numeric_limits<Tp>::epsilon();
10922 Tp max_abs_diff = -Tp(1);
10923 Tp max_abs_frac = -Tp(1);
10924 unsigned int num_datum = sizeof(data158)
10925 / sizeof(testcase_hyperg<double>);
10926 for (unsigned int i = 0; i < num_datum; ++i)
10927 {
10928 const Tp f = std::tr1::hyperg(Tp(data158[i].a), Tp(data158[i].b),
10929 Tp(data158[i].c), Tp(data158[i].x));
10930 const Tp f0 = data158[i].f0;
10931 const Tp diff = f - f0;
10932 if (std::abs(diff) > max_abs_diff)
10933 max_abs_diff = std::abs(diff);
10934 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
10935 {
10936 const Tp frac = diff / f0;
10937 if (std::abs(frac) > max_abs_frac)
10938 max_abs_frac = std::abs(frac);
10939 }
10940 }
10941 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
10942 }
10943
10944 // Test data for a=5.0000000000000000, b=2.0000000000000000, c=8.0000000000000000.
10945 testcase_hyperg<double> data159[] = {
10946 { 0.42108197362250305, 5.0000000000000000, 2.0000000000000000,
10947 8.0000000000000000, -0.90000000000000002 },
10948 { 0.45503172013983051, 5.0000000000000000, 2.0000000000000000,
10949 8.0000000000000000, -0.80000000000000004 },
10950 { 0.49345609813624303, 5.0000000000000000, 2.0000000000000000,
10951 8.0000000000000000, -0.69999999999999996 },
10952 { 0.53720880551221295, 5.0000000000000000, 2.0000000000000000,
10953 8.0000000000000000, -0.59999999999999998 },
10954 { 0.58736431524847466, 5.0000000000000000, 2.0000000000000000,
10955 8.0000000000000000, -0.50000000000000000 },
10956 { 0.64529222467897962, 5.0000000000000000, 2.0000000000000000,
10957 8.0000000000000000, -0.40000000000000002 },
10958 { 0.71276337354393904, 5.0000000000000000, 2.0000000000000000,
10959 8.0000000000000000, -0.30000000000000004 },
10960 { 0.79210466220795306, 5.0000000000000000, 2.0000000000000000,
10961 8.0000000000000000, -0.19999999999999996 },
10962 { 0.88643063455510596, 5.0000000000000000, 2.0000000000000000,
10963 8.0000000000000000, -0.099999999999999978 },
10964 { 1.0000000000000000, 5.0000000000000000, 2.0000000000000000,
10965 8.0000000000000000, 0.0000000000000000 },
10966 { 1.1387832139040652, 5.0000000000000000, 2.0000000000000000,
10967 8.0000000000000000, 0.10000000000000009 },
10968 { 1.3114025920844752, 5.0000000000000000, 2.0000000000000000,
10969 8.0000000000000000, 0.19999999999999996 },
10970 { 1.5307655016768162, 5.0000000000000000, 2.0000000000000000,
10971 8.0000000000000000, 0.30000000000000004 },
10972 { 1.8170727950333345, 5.0000000000000000, 2.0000000000000000,
10973 8.0000000000000000, 0.39999999999999991 },
10974 { 2.2037865486700836, 5.0000000000000000, 2.0000000000000000,
10975 8.0000000000000000, 0.50000000000000000 },
10976 { 2.7506766056439380, 5.0000000000000000, 2.0000000000000000,
10977 8.0000000000000000, 0.60000000000000009 },
10978 { 3.5764534935716972, 5.0000000000000000, 2.0000000000000000,
10979 8.0000000000000000, 0.69999999999999996 },
10980 { 4.9587762302155403, 5.0000000000000000, 2.0000000000000000,
10981 8.0000000000000000, 0.80000000000000004 },
10982 { 7.7740847924166800, 5.0000000000000000, 2.0000000000000000,
10983 8.0000000000000000, 0.89999999999999991 },
10984 };
10985
10986 // Test function for a=5.0000000000000000, b=2.0000000000000000, c=8.0000000000000000.
10987 template <typename Tp>
10988 void test159()
10989 {
10990 const Tp eps = std::numeric_limits<Tp>::epsilon();
10991 Tp max_abs_diff = -Tp(1);
10992 Tp max_abs_frac = -Tp(1);
10993 unsigned int num_datum = sizeof(data159)
10994 / sizeof(testcase_hyperg<double>);
10995 for (unsigned int i = 0; i < num_datum; ++i)
10996 {
10997 const Tp f = std::tr1::hyperg(Tp(data159[i].a), Tp(data159[i].b),
10998 Tp(data159[i].c), Tp(data159[i].x));
10999 const Tp f0 = data159[i].f0;
11000 const Tp diff = f - f0;
11001 if (std::abs(diff) > max_abs_diff)
11002 max_abs_diff = std::abs(diff);
11003 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
11004 {
11005 const Tp frac = diff / f0;
11006 if (std::abs(frac) > max_abs_frac)
11007 max_abs_frac = std::abs(frac);
11008 }
11009 }
11010 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
11011 }
11012
11013 // Test data for a=5.0000000000000000, b=2.0000000000000000, c=10.000000000000000.
11014 testcase_hyperg<double> data160[] = {
11015 { 0.48860241312958425, 5.0000000000000000, 2.0000000000000000,
11016 10.000000000000000, -0.90000000000000002 },
11017 { 0.52193382517068487, 5.0000000000000000, 2.0000000000000000,
11018 10.000000000000000, -0.80000000000000004 },
11019 { 0.55902375003954219, 5.0000000000000000, 2.0000000000000000,
11020 10.000000000000000, -0.69999999999999996 },
11021 { 0.60049055150230346, 5.0000000000000000, 2.0000000000000000,
11022 10.000000000000000, -0.59999999999999998 },
11023 { 0.64709127927203480, 5.0000000000000000, 2.0000000000000000,
11024 10.000000000000000, -0.50000000000000000 },
11025 { 0.69976233335368998, 5.0000000000000000, 2.0000000000000000,
11026 10.000000000000000, -0.40000000000000002 },
11027 { 0.75967529501081055, 5.0000000000000000, 2.0000000000000000,
11028 10.000000000000000, -0.30000000000000004 },
11029 { 0.82831498895254407, 5.0000000000000000, 2.0000000000000000,
11030 10.000000000000000, -0.19999999999999996 },
11031 { 0.90759090169653933, 5.0000000000000000, 2.0000000000000000,
11032 10.000000000000000, -0.099999999999999978 },
11033 { 1.0000000000000000, 5.0000000000000000, 2.0000000000000000,
11034 10.000000000000000, 0.0000000000000000 },
11035 { 1.1088712278667465, 5.0000000000000000, 2.0000000000000000,
11036 10.000000000000000, 0.10000000000000009 },
11037 { 1.2387445478440853, 5.0000000000000000, 2.0000000000000000,
11038 10.000000000000000, 0.19999999999999996 },
11039 { 1.3959812720437546, 5.0000000000000000, 2.0000000000000000,
11040 10.000000000000000, 0.30000000000000004 },
11041 { 1.5897930661091164, 5.0000000000000000, 2.0000000000000000,
11042 10.000000000000000, 0.39999999999999991 },
11043 { 1.8340789380307454, 5.0000000000000000, 2.0000000000000000,
11044 10.000000000000000, 0.50000000000000000 },
11045 { 2.1509548085970764, 5.0000000000000000, 2.0000000000000000,
11046 10.000000000000000, 0.60000000000000009 },
11047 { 2.5782406951207504, 5.0000000000000000, 2.0000000000000000,
11048 10.000000000000000, 0.69999999999999996 },
11049 { 3.1877847194242737, 5.0000000000000000, 2.0000000000000000,
11050 10.000000000000000, 0.80000000000000004 },
11051 { 4.1421596631676900, 5.0000000000000000, 2.0000000000000000,
11052 10.000000000000000, 0.89999999999999991 },
11053 };
11054
11055 // Test function for a=5.0000000000000000, b=2.0000000000000000, c=10.000000000000000.
11056 template <typename Tp>
11057 void test160()
11058 {
11059 const Tp eps = std::numeric_limits<Tp>::epsilon();
11060 Tp max_abs_diff = -Tp(1);
11061 Tp max_abs_frac = -Tp(1);
11062 unsigned int num_datum = sizeof(data160)
11063 / sizeof(testcase_hyperg<double>);
11064 for (unsigned int i = 0; i < num_datum; ++i)
11065 {
11066 const Tp f = std::tr1::hyperg(Tp(data160[i].a), Tp(data160[i].b),
11067 Tp(data160[i].c), Tp(data160[i].x));
11068 const Tp f0 = data160[i].f0;
11069 const Tp diff = f - f0;
11070 if (std::abs(diff) > max_abs_diff)
11071 max_abs_diff = std::abs(diff);
11072 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
11073 {
11074 const Tp frac = diff / f0;
11075 if (std::abs(frac) > max_abs_frac)
11076 max_abs_frac = std::abs(frac);
11077 }
11078 }
11079 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
11080 }
11081
11082 // Test data for a=5.0000000000000000, b=5.0000000000000000, c=2.0000000000000000.
11083 testcase_hyperg<double> data161[] = {
11084 { -0.0047236848832209691, 5.0000000000000000, 5.0000000000000000,
11085 2.0000000000000000, -0.90000000000000002 },
11086 { -0.0073321496427103212, 5.0000000000000000, 5.0000000000000000,
11087 2.0000000000000000, -0.80000000000000004 },
11088 { -0.010977302557845672, 5.0000000000000000, 5.0000000000000000,
11089 2.0000000000000000, -0.69999999999999996 },
11090 { -0.015692785382270907, 5.0000000000000000, 5.0000000000000000,
11091 2.0000000000000000, -0.59999999999999998 },
11092 { -0.020728547477518677, 5.0000000000000000, 5.0000000000000000,
11093 2.0000000000000000, -0.50000000000000000 },
11094 { -0.022767481479412769, 5.0000000000000000, 5.0000000000000000,
11095 2.0000000000000000, -0.40000000000000002 },
11096 { -0.010634636868114139, 5.0000000000000000, 5.0000000000000000,
11097 2.0000000000000000, -0.30000000000000004 },
11098 { 0.050699832580781923, 5.0000000000000000, 5.0000000000000000,
11099 2.0000000000000000, -0.19999999999999996 },
11100 { 0.27045765367659280, 5.0000000000000000, 5.0000000000000000,
11101 2.0000000000000000, -0.099999999999999978 },
11102 { 1.0000000000000000, 5.0000000000000000, 5.0000000000000000,
11103 2.0000000000000000, 0.0000000000000000 },
11104 { 3.4387055868901171, 5.0000000000000000, 5.0000000000000000,
11105 2.0000000000000000, 0.10000000000000009 },
11106 { 12.052059173583981, 5.0000000000000000, 5.0000000000000000,
11107 2.0000000000000000, 0.19999999999999996 },
11108 { 45.565319600798020, 5.0000000000000000, 5.0000000000000000,
11109 2.0000000000000000, 0.30000000000000004 },
11110 { 196.23532998018572, 5.0000000000000000, 5.0000000000000000,
11111 2.0000000000000000, 0.39999999999999991 },
11112 { 1032.0000000000002, 5.0000000000000000, 5.0000000000000000,
11113 2.0000000000000000, 0.50000000000000000 },
11114 { 7376.0986328125073, 5.0000000000000000, 5.0000000000000000,
11115 2.0000000000000000, 0.60000000000000009 },
11116 { 86964.639536655843, 5.0000000000000000, 5.0000000000000000,
11117 2.0000000000000000, 0.69999999999999996 },
11118 { 2596875.0000000009, 5.0000000000000000, 5.0000000000000000,
11119 2.0000000000000000, 0.80000000000000004 },
11120 { 766224999.99999273, 5.0000000000000000, 5.0000000000000000,
11121 2.0000000000000000, 0.89999999999999991 },
11122 };
11123
11124 // Test function for a=5.0000000000000000, b=5.0000000000000000, c=2.0000000000000000.
11125 template <typename Tp>
11126 void test161()
11127 {
11128 const Tp eps = std::numeric_limits<Tp>::epsilon();
11129 Tp max_abs_diff = -Tp(1);
11130 Tp max_abs_frac = -Tp(1);
11131 unsigned int num_datum = sizeof(data161)
11132 / sizeof(testcase_hyperg<double>);
11133 for (unsigned int i = 0; i < num_datum; ++i)
11134 {
11135 const Tp f = std::tr1::hyperg(Tp(data161[i].a), Tp(data161[i].b),
11136 Tp(data161[i].c), Tp(data161[i].x));
11137 const Tp f0 = data161[i].f0;
11138 const Tp diff = f - f0;
11139 if (std::abs(diff) > max_abs_diff)
11140 max_abs_diff = std::abs(diff);
11141 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
11142 {
11143 const Tp frac = diff / f0;
11144 if (std::abs(frac) > max_abs_frac)
11145 max_abs_frac = std::abs(frac);
11146 }
11147 }
11148 VERIFY(max_abs_frac < Tp(2.5000000000000015e-12));
11149 }
11150
11151 // Test data for a=5.0000000000000000, b=5.0000000000000000, c=4.0000000000000000.
11152 testcase_hyperg<double> data162[] = {
11153 { 0.016473280625778897, 5.0000000000000000, 5.0000000000000000,
11154 4.0000000000000000, -0.90000000000000002 },
11155 { 0.023520955289486407, 5.0000000000000000, 5.0000000000000000,
11156 4.0000000000000000, -0.80000000000000004 },
11157 { 0.034179084066004943, 5.0000000000000000, 5.0000000000000000,
11158 4.0000000000000000, -0.69999999999999996 },
11159 { 0.050663948059082052, 5.0000000000000000, 5.0000000000000000,
11160 4.0000000000000000, -0.59999999999999998 },
11161 { 0.076817558299039843, 5.0000000000000000, 5.0000000000000000,
11162 4.0000000000000000, -0.50000000000000000 },
11163 { 0.11952927776691676, 5.0000000000000000, 5.0000000000000000,
11164 4.0000000000000000, -0.40000000000000002 },
11165 { 0.19163799520552813, 5.0000000000000000, 5.0000000000000000,
11166 4.0000000000000000, -0.30000000000000004 },
11167 { 0.31815307784636504, 5.0000000000000000, 5.0000000000000000,
11168 4.0000000000000000, -0.19999999999999996 },
11169 { 0.55036208180243285, 5.0000000000000000, 5.0000000000000000,
11170 4.0000000000000000, -0.099999999999999978 },
11171 { 1.0000000000000000, 5.0000000000000000, 5.0000000000000000,
11172 4.0000000000000000, 0.0000000000000000 },
11173 { 1.9287183337378946, 5.0000000000000000, 5.0000000000000000,
11174 4.0000000000000000, 0.10000000000000009 },
11175 { 4.0054321289062473, 5.0000000000000000, 5.0000000000000000,
11176 4.0000000000000000, 0.19999999999999996 },
11177 { 9.1373492337376394, 5.0000000000000000, 5.0000000000000000,
11178 4.0000000000000000, 0.30000000000000004 },
11179 { 23.576817558299005, 5.0000000000000000, 5.0000000000000000,
11180 4.0000000000000000, 0.39999999999999991 },
11181 { 71.999999999999972, 5.0000000000000000, 5.0000000000000000,
11182 4.0000000000000000, 0.50000000000000000 },
11183 { 280.76171875000023, 5.0000000000000000, 5.0000000000000000,
11184 4.0000000000000000, 0.60000000000000009 },
11185 { 1611.7969821673514, 5.0000000000000000, 5.0000000000000000,
11186 4.0000000000000000, 0.69999999999999996 },
11187 { 18749.999999999996, 5.0000000000000000, 5.0000000000000000,
11188 4.0000000000000000, 0.80000000000000004 },
11189 { 1224999.9999999879, 5.0000000000000000, 5.0000000000000000,
11190 4.0000000000000000, 0.89999999999999991 },
11191 };
11192
11193 // Test function for a=5.0000000000000000, b=5.0000000000000000, c=4.0000000000000000.
11194 template <typename Tp>
11195 void test162()
11196 {
11197 const Tp eps = std::numeric_limits<Tp>::epsilon();
11198 Tp max_abs_diff = -Tp(1);
11199 Tp max_abs_frac = -Tp(1);
11200 unsigned int num_datum = sizeof(data162)
11201 / sizeof(testcase_hyperg<double>);
11202 for (unsigned int i = 0; i < num_datum; ++i)
11203 {
11204 const Tp f = std::tr1::hyperg(Tp(data162[i].a), Tp(data162[i].b),
11205 Tp(data162[i].c), Tp(data162[i].x));
11206 const Tp f0 = data162[i].f0;
11207 const Tp diff = f - f0;
11208 if (std::abs(diff) > max_abs_diff)
11209 max_abs_diff = std::abs(diff);
11210 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
11211 {
11212 const Tp frac = diff / f0;
11213 if (std::abs(frac) > max_abs_frac)
11214 max_abs_frac = std::abs(frac);
11215 }
11216 }
11217 VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
11218 }
11219
11220 // Test data for a=5.0000000000000000, b=5.0000000000000000, c=6.0000000000000000.
11221 testcase_hyperg<double> data163[] = {
11222 { 0.067462409738203513, 5.0000000000000000, 5.0000000000000000,
11223 6.0000000000000000, -0.90000000000000002 },
11224 { 0.084813629887172517, 5.0000000000000000, 5.0000000000000000,
11225 6.0000000000000000, -0.80000000000000004 },
11226 { 0.10799223563666410, 5.0000000000000000, 5.0000000000000000,
11227 6.0000000000000000, -0.69999999999999996 },
11228 { 0.13947766136095369, 5.0000000000000000, 5.0000000000000000,
11229 6.0000000000000000, -0.59999999999999998 },
11230 { 0.18305927261494304, 5.0000000000000000, 5.0000000000000000,
11231 6.0000000000000000, -0.50000000000000000 },
11232 { 0.24468431546783445, 5.0000000000000000, 5.0000000000000000,
11233 6.0000000000000000, -0.40000000000000002 },
11234 { 0.33397274564972956, 5.0000000000000000, 5.0000000000000000,
11235 6.0000000000000000, -0.30000000000000004 },
11236 { 0.46703323887436765, 5.0000000000000000, 5.0000000000000000,
11237 6.0000000000000000, -0.19999999999999996 },
11238 { 0.67194346197695642, 5.0000000000000000, 5.0000000000000000,
11239 6.0000000000000000, -0.099999999999999978 },
11240 { 1.0000000000000000, 5.0000000000000000, 5.0000000000000000,
11241 6.0000000000000000, 0.0000000000000000 },
11242 { 1.5503148146900136, 5.0000000000000000, 5.0000000000000000,
11243 6.0000000000000000, 0.10000000000000009 },
11244 { 2.5278200136940998, 5.0000000000000000, 5.0000000000000000,
11245 6.0000000000000000, 0.19999999999999996 },
11246 { 4.3933515329658954, 5.0000000000000000, 5.0000000000000000,
11247 6.0000000000000000, 0.30000000000000004 },
11248 { 8.3000308946110888, 5.0000000000000000, 5.0000000000000000,
11249 6.0000000000000000, 0.39999999999999991 },
11250 { 17.570215556257921, 5.0000000000000000, 5.0000000000000000,
11251 6.0000000000000000, 0.50000000000000000 },
11252 { 43.847462183266167, 5.0000000000000000, 5.0000000000000000,
11253 6.0000000000000000, 0.60000000000000009 },
11254 { 141.86909082943853, 5.0000000000000000, 5.0000000000000000,
11255 6.0000000000000000, 0.69999999999999996 },
11256 { 736.63489653168926, 5.0000000000000000, 5.0000000000000000,
11257 6.0000000000000000, 0.80000000000000004 },
11258 { 12117.500593515439, 5.0000000000000000, 5.0000000000000000,
11259 6.0000000000000000, 0.89999999999999991 },
11260 };
11261
11262 // Test function for a=5.0000000000000000, b=5.0000000000000000, c=6.0000000000000000.
11263 template <typename Tp>
11264 void test163()
11265 {
11266 const Tp eps = std::numeric_limits<Tp>::epsilon();
11267 Tp max_abs_diff = -Tp(1);
11268 Tp max_abs_frac = -Tp(1);
11269 unsigned int num_datum = sizeof(data163)
11270 / sizeof(testcase_hyperg<double>);
11271 for (unsigned int i = 0; i < num_datum; ++i)
11272 {
11273 const Tp f = std::tr1::hyperg(Tp(data163[i].a), Tp(data163[i].b),
11274 Tp(data163[i].c), Tp(data163[i].x));
11275 const Tp f0 = data163[i].f0;
11276 const Tp diff = f - f0;
11277 if (std::abs(diff) > max_abs_diff)
11278 max_abs_diff = std::abs(diff);
11279 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
11280 {
11281 const Tp frac = diff / f0;
11282 if (std::abs(frac) > max_abs_frac)
11283 max_abs_frac = std::abs(frac);
11284 }
11285 }
11286 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
11287 }
11288
11289 // Test data for a=5.0000000000000000, b=5.0000000000000000, c=8.0000000000000000.
11290 testcase_hyperg<double> data164[] = {
11291 { 0.12409443806004232, 5.0000000000000000, 5.0000000000000000,
11292 8.0000000000000000, -0.90000000000000002 },
11293 { 0.14886910375100412, 5.0000000000000000, 5.0000000000000000,
11294 8.0000000000000000, -0.80000000000000004 },
11295 { 0.18023328876836334, 5.0000000000000000, 5.0000000000000000,
11296 8.0000000000000000, -0.69999999999999996 },
11297 { 0.22044046981094714, 5.0000000000000000, 5.0000000000000000,
11298 8.0000000000000000, -0.59999999999999998 },
11299 { 0.27271160690708801, 5.0000000000000000, 5.0000000000000000,
11300 8.0000000000000000, -0.50000000000000000 },
11301 { 0.34174821195025840, 5.0000000000000000, 5.0000000000000000,
11302 8.0000000000000000, -0.40000000000000002 },
11303 { 0.43457788826160237, 5.0000000000000000, 5.0000000000000000,
11304 8.0000000000000000, -0.30000000000000004 },
11305 { 0.56199385898404552, 5.0000000000000000, 5.0000000000000000,
11306 8.0000000000000000, -0.19999999999999996 },
11307 { 0.74109892753745221, 5.0000000000000000, 5.0000000000000000,
11308 8.0000000000000000, -0.099999999999999978 },
11309 { 1.0000000000000000, 5.0000000000000000, 5.0000000000000000,
11310 8.0000000000000000, 0.0000000000000000 },
11311 { 1.3869229400096228, 5.0000000000000000, 5.0000000000000000,
11312 8.0000000000000000, 0.10000000000000009 },
11313 { 1.9890168748121255, 5.0000000000000000, 5.0000000000000000,
11314 8.0000000000000000, 0.19999999999999996 },
11315 { 2.9741205609307424, 5.0000000000000000, 5.0000000000000000,
11316 8.0000000000000000, 0.30000000000000004 },
11317 { 4.6924751038237300, 5.0000000000000000, 5.0000000000000000,
11318 8.0000000000000000, 0.39999999999999991 },
11319 { 7.9555939380658254, 5.0000000000000000, 5.0000000000000000,
11320 8.0000000000000000, 0.50000000000000000 },
11321 { 14.933102063314404, 5.0000000000000000, 5.0000000000000000,
11322 8.0000000000000000, 0.60000000000000009 },
11323 { 32.780461638447491, 5.0000000000000000, 5.0000000000000000,
11324 8.0000000000000000, 0.69999999999999996 },
11325 { 94.848124287773530, 5.0000000000000000, 5.0000000000000000,
11326 8.0000000000000000, 0.80000000000000004 },
11327 { 523.16034401517425, 5.0000000000000000, 5.0000000000000000,
11328 8.0000000000000000, 0.89999999999999991 },
11329 };
11330
11331 // Test function for a=5.0000000000000000, b=5.0000000000000000, c=8.0000000000000000.
11332 template <typename Tp>
11333 void test164()
11334 {
11335 const Tp eps = std::numeric_limits<Tp>::epsilon();
11336 Tp max_abs_diff = -Tp(1);
11337 Tp max_abs_frac = -Tp(1);
11338 unsigned int num_datum = sizeof(data164)
11339 / sizeof(testcase_hyperg<double>);
11340 for (unsigned int i = 0; i < num_datum; ++i)
11341 {
11342 const Tp f = std::tr1::hyperg(Tp(data164[i].a), Tp(data164[i].b),
11343 Tp(data164[i].c), Tp(data164[i].x));
11344 const Tp f0 = data164[i].f0;
11345 const Tp diff = f - f0;
11346 if (std::abs(diff) > max_abs_diff)
11347 max_abs_diff = std::abs(diff);
11348 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
11349 {
11350 const Tp frac = diff / f0;
11351 if (std::abs(frac) > max_abs_frac)
11352 max_abs_frac = std::abs(frac);
11353 }
11354 }
11355 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
11356 }
11357
11358 // Test data for a=5.0000000000000000, b=5.0000000000000000, c=10.000000000000000.
11359 testcase_hyperg<double> data165[] = {
11360 { 0.17885405888526873, 5.0000000000000000, 5.0000000000000000,
11361 10.000000000000000, -0.90000000000000002 },
11362 { 0.20861302518993380, 5.0000000000000000, 5.0000000000000000,
11363 10.000000000000000, -0.80000000000000004 },
11364 { 0.24504033307244924, 5.0000000000000000, 5.0000000000000000,
11365 10.000000000000000, -0.69999999999999996 },
11366 { 0.29007236051133478, 5.0000000000000000, 5.0000000000000000,
11367 10.000000000000000, -0.59999999999999998 },
11368 { 0.34635542859732726, 5.0000000000000000, 5.0000000000000000,
11369 10.000000000000000, -0.50000000000000000 },
11370 { 0.41756858504598376, 5.0000000000000000, 5.0000000000000000,
11371 10.000000000000000, -0.40000000000000002 },
11372 { 0.50892615622124382, 5.0000000000000000, 5.0000000000000000,
11373 10.000000000000000, -0.30000000000000004 },
11374 { 0.62798173270509761, 5.0000000000000000, 5.0000000000000000,
11375 10.000000000000000, -0.19999999999999996 },
11376 { 0.78595487360378424, 5.0000000000000000, 5.0000000000000000,
11377 10.000000000000000, -0.099999999999999978 },
11378 { 1.0000000000000000, 5.0000000000000000, 5.0000000000000000,
11379 10.000000000000000, 0.0000000000000000 },
11380 { 1.2972517637384813, 5.0000000000000000, 5.0000000000000000,
11381 10.000000000000000, 0.10000000000000009 },
11382 { 1.7224028197396388, 5.0000000000000000, 5.0000000000000000,
11383 10.000000000000000, 0.19999999999999996 },
11384 { 2.3527690438263305, 5.0000000000000000, 5.0000000000000000,
11385 10.000000000000000, 0.30000000000000004 },
11386 { 3.3305218060101116, 5.0000000000000000, 5.0000000000000000,
11387 10.000000000000000, 0.39999999999999991 },
11388 { 4.9383884076775466, 5.0000000000000000, 5.0000000000000000,
11389 10.000000000000000, 0.50000000000000000 },
11390 { 7.8007604680775229, 5.0000000000000000, 5.0000000000000000,
11391 10.000000000000000, 0.60000000000000009 },
11392 { 13.518663719271885, 5.0000000000000000, 5.0000000000000000,
11393 10.000000000000000, 0.69999999999999996 },
11394 { 27.285345906502567, 5.0000000000000000, 5.0000000000000000,
11395 10.000000000000000, 0.80000000000000004 },
11396 { 75.572415101501988, 5.0000000000000000, 5.0000000000000000,
11397 10.000000000000000, 0.89999999999999991 },
11398 };
11399
11400 // Test function for a=5.0000000000000000, b=5.0000000000000000, c=10.000000000000000.
11401 template <typename Tp>
11402 void test165()
11403 {
11404 const Tp eps = std::numeric_limits<Tp>::epsilon();
11405 Tp max_abs_diff = -Tp(1);
11406 Tp max_abs_frac = -Tp(1);
11407 unsigned int num_datum = sizeof(data165)
11408 / sizeof(testcase_hyperg<double>);
11409 for (unsigned int i = 0; i < num_datum; ++i)
11410 {
11411 const Tp f = std::tr1::hyperg(Tp(data165[i].a), Tp(data165[i].b),
11412 Tp(data165[i].c), Tp(data165[i].x));
11413 const Tp f0 = data165[i].f0;
11414 const Tp diff = f - f0;
11415 if (std::abs(diff) > max_abs_diff)
11416 max_abs_diff = std::abs(diff);
11417 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
11418 {
11419 const Tp frac = diff / f0;
11420 if (std::abs(frac) > max_abs_frac)
11421 max_abs_frac = std::abs(frac);
11422 }
11423 }
11424 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
11425 }
11426
11427 // Test data for a=5.0000000000000000, b=10.000000000000000, c=2.0000000000000000.
11428 testcase_hyperg<double> data166[] = {
11429 { 0.00063586451658060152, 5.0000000000000000, 10.000000000000000,
11430 2.0000000000000000, -0.90000000000000002 },
11431 { 0.0010334743461762443, 5.0000000000000000, 10.000000000000000,
11432 2.0000000000000000, -0.80000000000000004 },
11433 { 0.0015326246054669515, 5.0000000000000000, 10.000000000000000,
11434 2.0000000000000000, -0.69999999999999996 },
11435 { 0.0019007018181583387, 5.0000000000000000, 10.000000000000000,
11436 2.0000000000000000, -0.59999999999999998 },
11437 { 0.0012845577715431577, 5.0000000000000000, 10.000000000000000,
11438 2.0000000000000000, -0.50000000000000000 },
11439 { -0.0027213806178058826, 5.0000000000000000, 10.000000000000000,
11440 2.0000000000000000, -0.40000000000000002 },
11441 { -0.015121744574954068, 5.0000000000000000, 10.000000000000000,
11442 2.0000000000000000, -0.30000000000000004 },
11443 { -0.036637840562974443, 5.0000000000000000, 10.000000000000000,
11444 2.0000000000000000, -0.19999999999999996 },
11445 { 0.019117849062621491, 5.0000000000000000, 10.000000000000000,
11446 2.0000000000000000, -0.099999999999999978 },
11447 { 1.0000000000000000, 5.0000000000000000, 10.000000000000000,
11448 2.0000000000000000, 0.0000000000000000 },
11449 { 9.8116901852350615, 5.0000000000000000, 10.000000000000000,
11450 2.0000000000000000, 0.10000000000000009 },
11451 { 84.255589172244044, 5.0000000000000000, 10.000000000000000,
11452 2.0000000000000000, 0.19999999999999996 },
11453 { 773.87517619421294, 5.0000000000000000, 10.000000000000000,
11454 2.0000000000000000, 0.30000000000000004 },
11455 { 8556.9725363053585, 5.0000000000000000, 10.000000000000000,
11456 2.0000000000000000, 0.39999999999999991 },
11457 { 129023.99999999996, 5.0000000000000000, 10.000000000000000,
11458 2.0000000000000000, 0.50000000000000000 },
11459 { 3174543.3807373112, 5.0000000000000000, 10.000000000000000,
11460 2.0000000000000000, 0.60000000000000009 },
11461 { 175133896.95814410, 5.0000000000000000, 10.000000000000000,
11462 2.0000000000000000, 0.69999999999999996 },
11463 { 43564453125.000061, 5.0000000000000000, 10.000000000000000,
11464 2.0000000000000000, 0.80000000000000004 },
11465 { 446859999999993.50, 5.0000000000000000, 10.000000000000000,
11466 2.0000000000000000, 0.89999999999999991 },
11467 };
11468
11469 // Test function for a=5.0000000000000000, b=10.000000000000000, c=2.0000000000000000.
11470 template <typename Tp>
11471 void test166()
11472 {
11473 const Tp eps = std::numeric_limits<Tp>::epsilon();
11474 Tp max_abs_diff = -Tp(1);
11475 Tp max_abs_frac = -Tp(1);
11476 unsigned int num_datum = sizeof(data166)
11477 / sizeof(testcase_hyperg<double>);
11478 for (unsigned int i = 0; i < num_datum; ++i)
11479 {
11480 const Tp f = std::tr1::hyperg(Tp(data166[i].a), Tp(data166[i].b),
11481 Tp(data166[i].c), Tp(data166[i].x));
11482 const Tp f0 = data166[i].f0;
11483 const Tp diff = f - f0;
11484 if (std::abs(diff) > max_abs_diff)
11485 max_abs_diff = std::abs(diff);
11486 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
11487 {
11488 const Tp frac = diff / f0;
11489 if (std::abs(frac) > max_abs_frac)
11490 max_abs_frac = std::abs(frac);
11491 }
11492 }
11493 VERIFY(max_abs_frac < Tp(1.0000000000000006e-11));
11494 }
11495
11496 // Test data for a=5.0000000000000000, b=10.000000000000000, c=4.0000000000000000.
11497 testcase_hyperg<double> data167[] = {
11498 { -0.00030045430691819899, 5.0000000000000000, 10.000000000000000,
11499 4.0000000000000000, -0.90000000000000002 },
11500 { -0.00031119487747328581, 5.0000000000000000, 10.000000000000000,
11501 4.0000000000000000, -0.80000000000000004 },
11502 { -0.00014589213141649274, 5.0000000000000000, 10.000000000000000,
11503 4.0000000000000000, -0.69999999999999996 },
11504 { 0.00056843418860809121, 5.0000000000000000, 10.000000000000000,
11505 4.0000000000000000, -0.59999999999999998 },
11506 { 0.0028902549859721725, 5.0000000000000000, 10.000000000000000,
11507 4.0000000000000000, -0.50000000000000000 },
11508 { 0.0098776037238877470, 5.0000000000000000, 10.000000000000000,
11509 4.0000000000000000, -0.40000000000000002 },
11510 { 0.030689217428863914, 5.0000000000000000, 10.000000000000000,
11511 4.0000000000000000, -0.30000000000000004 },
11512 { 0.094211590019076599, 5.0000000000000000, 10.000000000000000,
11513 4.0000000000000000, -0.19999999999999996 },
11514 { 0.29791981455918376, 5.0000000000000000, 10.000000000000000,
11515 4.0000000000000000, -0.099999999999999978 },
11516 { 1.0000000000000000, 5.0000000000000000, 10.000000000000000,
11517 4.0000000000000000, 0.0000000000000000 },
11518 { 3.6646308771236793, 5.0000000000000000, 10.000000000000000,
11519 4.0000000000000000, 0.10000000000000009 },
11520 { 15.133991837501521, 5.0000000000000000, 10.000000000000000,
11521 4.0000000000000000, 0.19999999999999996 },
11522 { 73.331330046144089, 5.0000000000000000, 10.000000000000000,
11523 4.0000000000000000, 0.30000000000000004 },
11524 { 441.01791167787133, 5.0000000000000000, 10.000000000000000,
11525 4.0000000000000000, 0.39999999999999991 },
11526 { 3583.9999999999991, 5.0000000000000000, 10.000000000000000,
11527 4.0000000000000000, 0.50000000000000000 },
11528 { 45299.530029296984, 5.0000000000000000, 10.000000000000000,
11529 4.0000000000000000, 0.60000000000000009 },
11530 { 1157231.0002427341, 5.0000000000000000, 10.000000000000000,
11531 4.0000000000000000, 0.69999999999999996 },
11532 { 107421875.00000016, 5.0000000000000000, 10.000000000000000,
11533 4.0000000000000000, 0.80000000000000004 },
11534 { 234999999999.99734, 5.0000000000000000, 10.000000000000000,
11535 4.0000000000000000, 0.89999999999999991 },
11536 };
11537
11538 // Test function for a=5.0000000000000000, b=10.000000000000000, c=4.0000000000000000.
11539 template <typename Tp>
11540 void test167()
11541 {
11542 const Tp eps = std::numeric_limits<Tp>::epsilon();
11543 Tp max_abs_diff = -Tp(1);
11544 Tp max_abs_frac = -Tp(1);
11545 unsigned int num_datum = sizeof(data167)
11546 / sizeof(testcase_hyperg<double>);
11547 for (unsigned int i = 0; i < num_datum; ++i)
11548 {
11549 const Tp f = std::tr1::hyperg(Tp(data167[i].a), Tp(data167[i].b),
11550 Tp(data167[i].c), Tp(data167[i].x));
11551 const Tp f0 = data167[i].f0;
11552 const Tp diff = f - f0;
11553 if (std::abs(diff) > max_abs_diff)
11554 max_abs_diff = std::abs(diff);
11555 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
11556 {
11557 const Tp frac = diff / f0;
11558 if (std::abs(frac) > max_abs_frac)
11559 max_abs_frac = std::abs(frac);
11560 }
11561 }
11562 VERIFY(max_abs_frac < Tp(2.5000000000000014e-11));
11563 }
11564
11565 // Test data for a=5.0000000000000000, b=10.000000000000000, c=6.0000000000000000.
11566 testcase_hyperg<double> data168[] = {
11567 { 0.0058530497315411210, 5.0000000000000000, 10.000000000000000,
11568 6.0000000000000000, -0.90000000000000002 },
11569 { 0.0088526869356855692, 5.0000000000000000, 10.000000000000000,
11570 6.0000000000000000, -0.80000000000000004 },
11571 { 0.013770987983443108, 5.0000000000000000, 10.000000000000000,
11572 6.0000000000000000, -0.69999999999999996 },
11573 { 0.022108932690960800, 5.0000000000000000, 10.000000000000000,
11574 6.0000000000000000, -0.59999999999999998 },
11575 { 0.036786236450921578, 5.0000000000000000, 10.000000000000000,
11576 6.0000000000000000, -0.50000000000000000 },
11577 { 0.063750669040426422, 5.0000000000000000, 10.000000000000000,
11578 6.0000000000000000, -0.40000000000000002 },
11579 { 0.11577228680714464, 5.0000000000000000, 10.000000000000000,
11580 6.0000000000000000, -0.30000000000000004 },
11581 { 0.22197573416125735, 5.0000000000000000, 10.000000000000000,
11582 6.0000000000000000, -0.19999999999999996 },
11583 { 0.45361312968415268, 5.0000000000000000, 10.000000000000000,
11584 6.0000000000000000, -0.099999999999999978 },
11585 { 1.0000000000000000, 5.0000000000000000, 10.000000000000000,
11586 6.0000000000000000, 0.0000000000000000 },
11587 { 2.4162889363082747, 5.0000000000000000, 10.000000000000000,
11588 6.0000000000000000, 0.10000000000000009 },
11589 { 6.5381564791240399, 5.0000000000000000, 10.000000000000000,
11590 6.0000000000000000, 0.19999999999999996 },
11591 { 20.415771011498428, 5.0000000000000000, 10.000000000000000,
11592 6.0000000000000000, 0.30000000000000004 },
11593 { 76.870682056629221, 5.0000000000000000, 10.000000000000000,
11594 6.0000000000000000, 0.39999999999999991 },
11595 { 373.58730158730162, 5.0000000000000000, 10.000000000000000,
11596 6.0000000000000000, 0.50000000000000000 },
11597 { 2626.2555803571477, 5.0000000000000000, 10.000000000000000,
11598 6.0000000000000000, 0.60000000000000009 },
11599 { 33060.960671081048, 5.0000000000000000, 10.000000000000000,
11600 6.0000000000000000, 0.69999999999999996 },
11601 { 1203521.8253968258, 5.0000000000000000, 10.000000000000000,
11602 6.0000000000000000, 0.80000000000000004 },
11603 { 584564285.71427989, 5.0000000000000000, 10.000000000000000,
11604 6.0000000000000000, 0.89999999999999991 },
11605 };
11606
11607 // Test function for a=5.0000000000000000, b=10.000000000000000, c=6.0000000000000000.
11608 template <typename Tp>
11609 void test168()
11610 {
11611 const Tp eps = std::numeric_limits<Tp>::epsilon();
11612 Tp max_abs_diff = -Tp(1);
11613 Tp max_abs_frac = -Tp(1);
11614 unsigned int num_datum = sizeof(data168)
11615 / sizeof(testcase_hyperg<double>);
11616 for (unsigned int i = 0; i < num_datum; ++i)
11617 {
11618 const Tp f = std::tr1::hyperg(Tp(data168[i].a), Tp(data168[i].b),
11619 Tp(data168[i].c), Tp(data168[i].x));
11620 const Tp f0 = data168[i].f0;
11621 const Tp diff = f - f0;
11622 if (std::abs(diff) > max_abs_diff)
11623 max_abs_diff = std::abs(diff);
11624 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
11625 {
11626 const Tp frac = diff / f0;
11627 if (std::abs(frac) > max_abs_frac)
11628 max_abs_frac = std::abs(frac);
11629 }
11630 }
11631 VERIFY(max_abs_frac < Tp(2.5000000000000015e-12));
11632 }
11633
11634 // Test data for a=5.0000000000000000, b=10.000000000000000, c=8.0000000000000000.
11635 testcase_hyperg<double> data169[] = {
11636 { 0.020248990107069400, 5.0000000000000000, 10.000000000000000,
11637 8.0000000000000000, -0.90000000000000002 },
11638 { 0.027876687750502421, 5.0000000000000000, 10.000000000000000,
11639 8.0000000000000000, -0.80000000000000004 },
11640 { 0.039154648888447781, 5.0000000000000000, 10.000000000000000,
11641 8.0000000000000000, -0.69999999999999996 },
11642 { 0.056251883506774923, 5.0000000000000000, 10.000000000000000,
11643 8.0000000000000000, -0.59999999999999998 },
11644 { 0.082914189910074432, 5.0000000000000000, 10.000000000000000,
11645 8.0000000000000000, -0.50000000000000000 },
11646 { 0.12585357817786477, 5.0000000000000000, 10.000000000000000,
11647 8.0000000000000000, -0.40000000000000002 },
11648 { 0.19761423206224929, 5.0000000000000000, 10.000000000000000,
11649 8.0000000000000000, -0.30000000000000004 },
11650 { 0.32280443863359243, 5.0000000000000000, 10.000000000000000,
11651 8.0000000000000000, -0.19999999999999996 },
11652 { 0.55250024062839465, 5.0000000000000000, 10.000000000000000,
11653 8.0000000000000000, -0.099999999999999978 },
11654 { 1.0000000000000000, 5.0000000000000000, 10.000000000000000,
11655 8.0000000000000000, 0.0000000000000000 },
11656 { 1.9374297986599267, 5.0000000000000000, 10.000000000000000,
11657 8.0000000000000000, 0.10000000000000009 },
11658 { 4.0849049886067696, 5.0000000000000000, 10.000000000000000,
11659 8.0000000000000000, 0.19999999999999996 },
11660 { 9.5926988633258983, 5.0000000000000000, 10.000000000000000,
11661 8.0000000000000000, 0.30000000000000004 },
11662 { 25.958314281359531, 5.0000000000000000, 10.000000000000000,
11663 8.0000000000000000, 0.39999999999999991 },
11664 { 85.333333333333300, 5.0000000000000000, 10.000000000000000,
11665 8.0000000000000000, 0.50000000000000000 },
11666 { 372.31445312500028, 5.0000000000000000, 10.000000000000000,
11667 8.0000000000000000, 0.60000000000000009 },
11668 { 2545.3436976070675, 5.0000000000000000, 10.000000000000000,
11669 8.0000000000000000, 0.69999999999999996 },
11670 { 39583.333333333343, 5.0000000000000000, 10.000000000000000,
11671 8.0000000000000000, 0.80000000000000004 },
11672 { 4599999.9999999627, 5.0000000000000000, 10.000000000000000,
11673 8.0000000000000000, 0.89999999999999991 },
11674 };
11675
11676 // Test function for a=5.0000000000000000, b=10.000000000000000, c=8.0000000000000000.
11677 template <typename Tp>
11678 void test169()
11679 {
11680 const Tp eps = std::numeric_limits<Tp>::epsilon();
11681 Tp max_abs_diff = -Tp(1);
11682 Tp max_abs_frac = -Tp(1);
11683 unsigned int num_datum = sizeof(data169)
11684 / sizeof(testcase_hyperg<double>);
11685 for (unsigned int i = 0; i < num_datum; ++i)
11686 {
11687 const Tp f = std::tr1::hyperg(Tp(data169[i].a), Tp(data169[i].b),
11688 Tp(data169[i].c), Tp(data169[i].x));
11689 const Tp f0 = data169[i].f0;
11690 const Tp diff = f - f0;
11691 if (std::abs(diff) > max_abs_diff)
11692 max_abs_diff = std::abs(diff);
11693 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
11694 {
11695 const Tp frac = diff / f0;
11696 if (std::abs(frac) > max_abs_frac)
11697 max_abs_frac = std::abs(frac);
11698 }
11699 }
11700 VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
11701 }
11702
11703 // Test data for a=5.0000000000000000, b=10.000000000000000, c=10.000000000000000.
11704 testcase_hyperg<double> data170[] = {
11705 { 0.040386107340619266, 5.0000000000000000, 10.000000000000000,
11706 10.000000000000000, -0.90000000000000002 },
11707 { 0.052922149401344633, 5.0000000000000000, 10.000000000000000,
11708 10.000000000000000, -0.80000000000000004 },
11709 { 0.070429627772374270, 5.0000000000000000, 10.000000000000000,
11710 10.000000000000000, -0.69999999999999996 },
11711 { 0.095367431640624972, 5.0000000000000000, 10.000000000000000,
11712 10.000000000000000, -0.59999999999999998 },
11713 { 0.13168724279835387, 5.0000000000000000, 10.000000000000000,
11714 10.000000000000000, -0.50000000000000000 },
11715 { 0.18593443208187066, 5.0000000000000000, 10.000000000000000,
11716 10.000000000000000, -0.40000000000000002 },
11717 { 0.26932907434290437, 5.0000000000000000, 10.000000000000000,
11718 10.000000000000000, -0.30000000000000004 },
11719 { 0.40187757201646096, 5.0000000000000000, 10.000000000000000,
11720 10.000000000000000, -0.19999999999999996 },
11721 { 0.62092132305915493, 5.0000000000000000, 10.000000000000000,
11722 10.000000000000000, -0.099999999999999978 },
11723 { 1.0000000000000000, 5.0000000000000000, 10.000000000000000,
11724 10.000000000000000, 0.0000000000000000 },
11725 { 1.6935087808430296, 5.0000000000000000, 10.000000000000000,
11726 10.000000000000000, 0.10000000000000009 },
11727 { 3.0517578124999991, 5.0000000000000000, 10.000000000000000,
11728 10.000000000000000, 0.19999999999999996 },
11729 { 5.9499018266198629, 5.0000000000000000, 10.000000000000000,
11730 10.000000000000000, 0.30000000000000004 },
11731 { 12.860082304526737, 5.0000000000000000, 10.000000000000000,
11732 10.000000000000000, 0.39999999999999991 },
11733 { 32.000000000000000, 5.0000000000000000, 10.000000000000000,
11734 10.000000000000000, 0.50000000000000000 },
11735 { 97.656250000000114, 5.0000000000000000, 10.000000000000000,
11736 10.000000000000000, 0.60000000000000009 },
11737 { 411.52263374485580, 5.0000000000000000, 10.000000000000000,
11738 10.000000000000000, 0.69999999999999996 },
11739 { 3124.9999999999991, 5.0000000000000000, 10.000000000000000,
11740 10.000000000000000, 0.80000000000000004 },
11741 { 99999.999999999665, 5.0000000000000000, 10.000000000000000,
11742 10.000000000000000, 0.89999999999999991 },
11743 };
11744
11745 // Test function for a=5.0000000000000000, b=10.000000000000000, c=10.000000000000000.
11746 template <typename Tp>
11747 void test170()
11748 {
11749 const Tp eps = std::numeric_limits<Tp>::epsilon();
11750 Tp max_abs_diff = -Tp(1);
11751 Tp max_abs_frac = -Tp(1);
11752 unsigned int num_datum = sizeof(data170)
11753 / sizeof(testcase_hyperg<double>);
11754 for (unsigned int i = 0; i < num_datum; ++i)
11755 {
11756 const Tp f = std::tr1::hyperg(Tp(data170[i].a), Tp(data170[i].b),
11757 Tp(data170[i].c), Tp(data170[i].x));
11758 const Tp f0 = data170[i].f0;
11759 const Tp diff = f - f0;
11760 if (std::abs(diff) > max_abs_diff)
11761 max_abs_diff = std::abs(diff);
11762 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
11763 {
11764 const Tp frac = diff / f0;
11765 if (std::abs(frac) > max_abs_frac)
11766 max_abs_frac = std::abs(frac);
11767 }
11768 }
11769 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
11770 }
11771
11772 // Test data for a=5.0000000000000000, b=20.000000000000000, c=2.0000000000000000.
11773 testcase_hyperg<double> data171[] = {
11774 { -1.8650300348791041e-05, 5.0000000000000000, 20.000000000000000,
11775 2.0000000000000000, -0.90000000000000002 },
11776 { -3.6488008415183135e-05, 5.0000000000000000, 20.000000000000000,
11777 2.0000000000000000, -0.80000000000000004 },
11778 { -6.4614776410999025e-05, 5.0000000000000000, 20.000000000000000,
11779 2.0000000000000000, -0.69999999999999996 },
11780 { -8.4495207102575916e-05, 5.0000000000000000, 20.000000000000000,
11781 2.0000000000000000, -0.59999999999999998 },
11782 { 2.2276197023819217e-05, 5.0000000000000000, 20.000000000000000,
11783 2.0000000000000000, -0.50000000000000000 },
11784 { 0.00070736115111467578, 5.0000000000000000, 20.000000000000000,
11785 2.0000000000000000, -0.40000000000000002 },
11786 { 0.0027829732057272809, 5.0000000000000000, 20.000000000000000,
11787 2.0000000000000000, -0.30000000000000004 },
11788 { 0.0013283545664373570, 5.0000000000000000, 20.000000000000000,
11789 2.0000000000000000, -0.19999999999999996 },
11790 { -0.041767631015048733, 5.0000000000000000, 20.000000000000000,
11791 2.0000000000000000, -0.099999999999999978 },
11792 { 1.0000000000000000, 5.0000000000000000, 20.000000000000000,
11793 2.0000000000000000, 0.0000000000000000 },
11794 { 61.311496556100003, 5.0000000000000000, 20.000000000000000,
11795 2.0000000000000000, 0.10000000000000009 },
11796 { 2397.4420539085681, 5.0000000000000000, 20.000000000000000,
11797 2.0000000000000000, 0.19999999999999996 },
11798 { 103687.60998586559, 5.0000000000000000, 20.000000000000000,
11799 2.0000000000000000, 0.30000000000000004 },
11800 { 6247196.6451068865, 5.0000000000000000, 20.000000000000000,
11801 2.0000000000000000, 0.39999999999999991 },
11802 { 656408576.00000000, 5.0000000000000000, 20.000000000000000,
11803 2.0000000000000000, 0.50000000000000000 },
11804 { 165334768098.54715, 5.0000000000000000, 20.000000000000000,
11805 2.0000000000000000, 0.60000000000000009 },
11806 { 175097125520816.81, 5.0000000000000000, 20.000000000000000,
11807 2.0000000000000000, 0.69999999999999996 },
11808 { 2.6818275451660257e+18, 5.0000000000000000, 20.000000000000000,
11809 2.0000000000000000, 0.80000000000000004 },
11810 { 2.9794599999999321e+25, 5.0000000000000000, 20.000000000000000,
11811 2.0000000000000000, 0.89999999999999991 },
11812 };
11813
11814 // Test function for a=5.0000000000000000, b=20.000000000000000, c=2.0000000000000000.
11815 template <typename Tp>
11816 void test171()
11817 {
11818 const Tp eps = std::numeric_limits<Tp>::epsilon();
11819 Tp max_abs_diff = -Tp(1);
11820 Tp max_abs_frac = -Tp(1);
11821 unsigned int num_datum = sizeof(data171)
11822 / sizeof(testcase_hyperg<double>);
11823 for (unsigned int i = 0; i < num_datum; ++i)
11824 {
11825 const Tp f = std::tr1::hyperg(Tp(data171[i].a), Tp(data171[i].b),
11826 Tp(data171[i].c), Tp(data171[i].x));
11827 const Tp f0 = data171[i].f0;
11828 const Tp diff = f - f0;
11829 if (std::abs(diff) > max_abs_diff)
11830 max_abs_diff = std::abs(diff);
11831 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
11832 {
11833 const Tp frac = diff / f0;
11834 if (std::abs(frac) > max_abs_frac)
11835 max_abs_frac = std::abs(frac);
11836 }
11837 }
11838 VERIFY(max_abs_frac < Tp(5.0000000000000034e-10));
11839 }
11840
11841 // Test data for a=5.0000000000000000, b=20.000000000000000, c=4.0000000000000000.
11842 testcase_hyperg<double> data172[] = {
11843 { -3.6403884515183385e-06, 5.0000000000000000, 20.000000000000000,
11844 4.0000000000000000, -0.90000000000000002 },
11845 { -9.5873829247725586e-06, 5.0000000000000000, 20.000000000000000,
11846 4.0000000000000000, -0.80000000000000004 },
11847 { -2.6052245147354694e-05, 5.0000000000000000, 20.000000000000000,
11848 4.0000000000000000, -0.69999999999999996 },
11849 { -7.2378303598294010e-05, 5.0000000000000000, 20.000000000000000,
11850 4.0000000000000000, -0.59999999999999998 },
11851 { -0.00020048577321454082, 5.0000000000000000, 20.000000000000000,
11852 4.0000000000000000, -0.50000000000000000 },
11853 { -0.00051222704046236022, 5.0000000000000000, 20.000000000000000,
11854 4.0000000000000000, -0.40000000000000002 },
11855 { -0.00080950511491911315, 5.0000000000000000, 20.000000000000000,
11856 4.0000000000000000, -0.30000000000000004 },
11857 { 0.0043473422174314449, 5.0000000000000000, 20.000000000000000,
11858 4.0000000000000000, -0.19999999999999996 },
11859 { 0.081078342558623825, 5.0000000000000000, 20.000000000000000,
11860 4.0000000000000000, -0.099999999999999978 },
11861 { 1.0000000000000000, 5.0000000000000000, 20.000000000000000,
11862 4.0000000000000000, 0.0000000000000000 },
11863 { 12.794854084397739, 5.0000000000000000, 20.000000000000000,
11864 4.0000000000000000, 0.10000000000000009 },
11865 { 195.15639104739046, 5.0000000000000000, 20.000000000000000,
11866 4.0000000000000000, 0.19999999999999996 },
11867 { 3938.7991953190131, 5.0000000000000000, 20.000000000000000,
11868 4.0000000000000000, 0.30000000000000004 },
11869 { 118521.48653762060, 5.0000000000000000, 20.000000000000000,
11870 4.0000000000000000, 0.39999999999999991 },
11871 { 6291455.9999999972, 5.0000000000000000, 20.000000000000000,
11872 4.0000000000000000, 0.50000000000000000 },
11873 { 773070496.50699198, 5.0000000000000000, 20.000000000000000,
11874 4.0000000000000000, 0.60000000000000009 },
11875 { 363276452167.04102, 5.0000000000000000, 20.000000000000000,
11876 4.0000000000000000, 0.69999999999999996 },
11877 { 2002716064453133.0, 5.0000000000000000, 20.000000000000000,
11878 4.0000000000000000, 0.80000000000000004 },
11879 { 4.5999999999999109e+21, 5.0000000000000000, 20.000000000000000,
11880 4.0000000000000000, 0.89999999999999991 },
11881 };
11882
11883 // Test function for a=5.0000000000000000, b=20.000000000000000, c=4.0000000000000000.
11884 template <typename Tp>
11885 void test172()
11886 {
11887 const Tp eps = std::numeric_limits<Tp>::epsilon();
11888 Tp max_abs_diff = -Tp(1);
11889 Tp max_abs_frac = -Tp(1);
11890 unsigned int num_datum = sizeof(data172)
11891 / sizeof(testcase_hyperg<double>);
11892 for (unsigned int i = 0; i < num_datum; ++i)
11893 {
11894 const Tp f = std::tr1::hyperg(Tp(data172[i].a), Tp(data172[i].b),
11895 Tp(data172[i].c), Tp(data172[i].x));
11896 const Tp f0 = data172[i].f0;
11897 const Tp diff = f - f0;
11898 if (std::abs(diff) > max_abs_diff)
11899 max_abs_diff = std::abs(diff);
11900 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
11901 {
11902 const Tp frac = diff / f0;
11903 if (std::abs(frac) > max_abs_frac)
11904 max_abs_frac = std::abs(frac);
11905 }
11906 }
11907 VERIFY(max_abs_frac < Tp(2.5000000000000013e-09));
11908 }
11909
11910 // Test data for a=5.0000000000000000, b=20.000000000000000, c=6.0000000000000000.
11911 testcase_hyperg<double> data173[] = {
11912 { 0.00014313323624069244, 5.0000000000000000, 20.000000000000000,
11913 6.0000000000000000, -0.90000000000000002 },
11914 { 0.00025426183473140697, 5.0000000000000000, 20.000000000000000,
11915 6.0000000000000000, -0.80000000000000004 },
11916 { 0.00048255612836426809, 5.0000000000000000, 20.000000000000000,
11917 6.0000000000000000, -0.69999999999999996 },
11918 { 0.00099096904674788092, 5.0000000000000000, 20.000000000000000,
11919 6.0000000000000000, -0.59999999999999998 },
11920 { 0.0022347805521915607, 5.0000000000000000, 20.000000000000000,
11921 6.0000000000000000, -0.50000000000000000 },
11922 { 0.0056271390060292376, 5.0000000000000000, 20.000000000000000,
11923 6.0000000000000000, -0.40000000000000002 },
11924 { 0.016109059519227226, 5.0000000000000000, 20.000000000000000,
11925 6.0000000000000000, -0.30000000000000004 },
11926 { 0.053453465775608999, 5.0000000000000000, 20.000000000000000,
11927 6.0000000000000000, -0.19999999999999996 },
11928 { 0.20995202901839258, 5.0000000000000000, 20.000000000000000,
11929 6.0000000000000000, -0.099999999999999978 },
11930 { 1.0000000000000000, 5.0000000000000000, 20.000000000000000,
11931 6.0000000000000000, 0.0000000000000000 },
11932 { 5.9534372167648799, 5.0000000000000000, 20.000000000000000,
11933 6.0000000000000000, 0.10000000000000009 },
11934 { 46.157632071205875, 5.0000000000000000, 20.000000000000000,
11935 6.0000000000000000, 0.19999999999999996 },
11936 { 494.32074431164915, 5.0000000000000000, 20.000000000000000,
11937 6.0000000000000000, 0.30000000000000004 },
11938 { 7989.5277611775946, 5.0000000000000000, 20.000000000000000,
11939 6.0000000000000000, 0.39999999999999991 },
11940 { 224179.55830753347, 5.0000000000000000, 20.000000000000000,
11941 6.0000000000000000, 0.50000000000000000 },
11942 { 13848144.485282511, 5.0000000000000000, 20.000000000000000,
11943 6.0000000000000000, 0.60000000000000009 },
11944 { 2948587692.8891716, 5.0000000000000000, 20.000000000000000,
11945 6.0000000000000000, 0.69999999999999996 },
11946 { 5940513286161.6602, 5.0000000000000000, 20.000000000000000,
11947 6.0000000000000000, 0.80000000000000004 },
11948 { 2.8531757655945201e+18, 5.0000000000000000, 20.000000000000000,
11949 6.0000000000000000, 0.89999999999999991 },
11950 };
11951
11952 // Test function for a=5.0000000000000000, b=20.000000000000000, c=6.0000000000000000.
11953 template <typename Tp>
11954 void test173()
11955 {
11956 const Tp eps = std::numeric_limits<Tp>::epsilon();
11957 Tp max_abs_diff = -Tp(1);
11958 Tp max_abs_frac = -Tp(1);
11959 unsigned int num_datum = sizeof(data173)
11960 / sizeof(testcase_hyperg<double>);
11961 for (unsigned int i = 0; i < num_datum; ++i)
11962 {
11963 const Tp f = std::tr1::hyperg(Tp(data173[i].a), Tp(data173[i].b),
11964 Tp(data173[i].c), Tp(data173[i].x));
11965 const Tp f0 = data173[i].f0;
11966 const Tp diff = f - f0;
11967 if (std::abs(diff) > max_abs_diff)
11968 max_abs_diff = std::abs(diff);
11969 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
11970 {
11971 const Tp frac = diff / f0;
11972 if (std::abs(frac) > max_abs_frac)
11973 max_abs_frac = std::abs(frac);
11974 }
11975 }
11976 VERIFY(max_abs_frac < Tp(1.0000000000000006e-10));
11977 }
11978
11979 // Test data for a=5.0000000000000000, b=20.000000000000000, c=8.0000000000000000.
11980 testcase_hyperg<double> data174[] = {
11981 { 0.0012492049968742865, 5.0000000000000000, 20.000000000000000,
11982 8.0000000000000000, -0.90000000000000002 },
11983 { 0.0019931241968014451, 5.0000000000000000, 20.000000000000000,
11984 8.0000000000000000, -0.80000000000000004 },
11985 { 0.0033203386861411057, 5.0000000000000000, 20.000000000000000,
11986 8.0000000000000000, -0.69999999999999996 },
11987 { 0.0058191894509855282, 5.0000000000000000, 20.000000000000000,
11988 8.0000000000000000, -0.59999999999999998 },
11989 { 0.010830090368313866, 5.0000000000000000, 20.000000000000000,
11990 8.0000000000000000, -0.50000000000000000 },
11991 { 0.021653062305193163, 5.0000000000000000, 20.000000000000000,
11992 8.0000000000000000, -0.40000000000000002 },
11993 { 0.047180821280919084, 5.0000000000000000, 20.000000000000000,
11994 8.0000000000000000, -0.30000000000000004 },
11995 { 0.11405637279736180, 5.0000000000000000, 20.000000000000000,
11996 8.0000000000000000, -0.19999999999999996 },
11997 { 0.31275468794720990, 5.0000000000000000, 20.000000000000000,
11998 8.0000000000000000, -0.099999999999999978 },
11999 { 1.0000000000000000, 5.0000000000000000, 20.000000000000000,
12000 8.0000000000000000, 0.0000000000000000 },
12001 { 3.8598904658643969, 5.0000000000000000, 20.000000000000000,
12002 8.0000000000000000, 0.10000000000000009 },
12003 { 18.806301417906667, 5.0000000000000000, 20.000000000000000,
12004 8.0000000000000000, 0.19999999999999996 },
12005 { 122.77054465017432, 5.0000000000000000, 20.000000000000000,
12006 8.0000000000000000, 0.30000000000000004 },
12007 { 1168.4762146808946, 5.0000000000000000, 20.000000000000000,
12008 8.0000000000000000, 0.39999999999999991 },
12009 { 18437.511788521082, 5.0000000000000000, 20.000000000000000,
12010 8.0000000000000000, 0.50000000000000000 },
12011 { 597441.79669264762, 5.0000000000000000, 20.000000000000000,
12012 8.0000000000000000, 0.60000000000000009 },
12013 { 59390411.369227782, 5.0000000000000000, 20.000000000000000,
12014 8.0000000000000000, 0.69999999999999996 },
12015 { 44681668993.361603, 5.0000000000000000, 20.000000000000000,
12016 8.0000000000000000, 0.80000000000000004 },
12017 { 4559673269683164.0, 5.0000000000000000, 20.000000000000000,
12018 8.0000000000000000, 0.89999999999999991 },
12019 };
12020
12021 // Test function for a=5.0000000000000000, b=20.000000000000000, c=8.0000000000000000.
12022 template <typename Tp>
12023 void test174()
12024 {
12025 const Tp eps = std::numeric_limits<Tp>::epsilon();
12026 Tp max_abs_diff = -Tp(1);
12027 Tp max_abs_frac = -Tp(1);
12028 unsigned int num_datum = sizeof(data174)
12029 / sizeof(testcase_hyperg<double>);
12030 for (unsigned int i = 0; i < num_datum; ++i)
12031 {
12032 const Tp f = std::tr1::hyperg(Tp(data174[i].a), Tp(data174[i].b),
12033 Tp(data174[i].c), Tp(data174[i].x));
12034 const Tp f0 = data174[i].f0;
12035 const Tp diff = f - f0;
12036 if (std::abs(diff) > max_abs_diff)
12037 max_abs_diff = std::abs(diff);
12038 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
12039 {
12040 const Tp frac = diff / f0;
12041 if (std::abs(frac) > max_abs_frac)
12042 max_abs_frac = std::abs(frac);
12043 }
12044 }
12045 VERIFY(max_abs_frac < Tp(1.0000000000000006e-11));
12046 }
12047
12048 // Test data for a=5.0000000000000000, b=20.000000000000000, c=10.000000000000000.
12049 testcase_hyperg<double> data175[] = {
12050 { 0.0038867957051371450, 5.0000000000000000, 20.000000000000000,
12051 10.000000000000000, -0.90000000000000002 },
12052 { 0.0058484892597364443, 5.0000000000000000, 20.000000000000000,
12053 10.000000000000000, -0.80000000000000004 },
12054 { 0.0090987656053757009, 5.0000000000000000, 20.000000000000000,
12055 10.000000000000000, -0.69999999999999996 },
12056 { 0.014714392537270733, 5.0000000000000000, 20.000000000000000,
12057 10.000000000000000, -0.59999999999999998 },
12058 { 0.024900404542056769, 5.0000000000000000, 20.000000000000000,
12059 10.000000000000000, -0.50000000000000000 },
12060 { 0.044460184663785055, 5.0000000000000000, 20.000000000000000,
12061 10.000000000000000, -0.40000000000000002 },
12062 { 0.084638849196356836, 5.0000000000000000, 20.000000000000000,
12063 10.000000000000000, -0.30000000000000004 },
12064 { 0.17409058241290998, 5.0000000000000000, 20.000000000000000,
12065 10.000000000000000, -0.19999999999999996 },
12066 { 0.39357055823580755, 5.0000000000000000, 20.000000000000000,
12067 10.000000000000000, -0.099999999999999978 },
12068 { 1.0000000000000000, 5.0000000000000000, 20.000000000000000,
12069 10.000000000000000, 0.0000000000000000 },
12070 { 2.9410794636226596, 5.0000000000000000, 20.000000000000000,
12071 10.000000000000000, 0.10000000000000009 },
12072 { 10.417226071414344, 5.0000000000000000, 20.000000000000000,
12073 10.000000000000000, 0.19999999999999996 },
12074 { 46.930585873140835, 5.0000000000000000, 20.000000000000000,
12075 10.000000000000000, 0.30000000000000004 },
12076 { 290.76717121814852, 5.0000000000000000, 20.000000000000000,
12077 10.000000000000000, 0.39999999999999991 },
12078 { 2788.1641083374830, 5.0000000000000000, 20.000000000000000,
12079 10.000000000000000, 0.50000000000000000 },
12080 { 50228.117718560752, 5.0000000000000000, 20.000000000000000,
12081 10.000000000000000, 0.60000000000000009 },
12082 { 2433042.3476752634, 5.0000000000000000, 20.000000000000000,
12083 10.000000000000000, 0.69999999999999996 },
12084 { 705345246.77141762, 5.0000000000000000, 20.000000000000000,
12085 10.000000000000000, 0.80000000000000004 },
12086 { 15652478868616.762, 5.0000000000000000, 20.000000000000000,
12087 10.000000000000000, 0.89999999999999991 },
12088 };
12089
12090 // Test function for a=5.0000000000000000, b=20.000000000000000, c=10.000000000000000.
12091 template <typename Tp>
12092 void test175()
12093 {
12094 const Tp eps = std::numeric_limits<Tp>::epsilon();
12095 Tp max_abs_diff = -Tp(1);
12096 Tp max_abs_frac = -Tp(1);
12097 unsigned int num_datum = sizeof(data175)
12098 / sizeof(testcase_hyperg<double>);
12099 for (unsigned int i = 0; i < num_datum; ++i)
12100 {
12101 const Tp f = std::tr1::hyperg(Tp(data175[i].a), Tp(data175[i].b),
12102 Tp(data175[i].c), Tp(data175[i].x));
12103 const Tp f0 = data175[i].f0;
12104 const Tp diff = f - f0;
12105 if (std::abs(diff) > max_abs_diff)
12106 max_abs_diff = std::abs(diff);
12107 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
12108 {
12109 const Tp frac = diff / f0;
12110 if (std::abs(frac) > max_abs_frac)
12111 max_abs_frac = std::abs(frac);
12112 }
12113 }
12114 VERIFY(max_abs_frac < Tp(1.0000000000000008e-12));
12115 }
12116
12117 // Test data for a=10.000000000000000, b=0.0000000000000000, c=2.0000000000000000.
12118 testcase_hyperg<double> data176[] = {
12119 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12120 2.0000000000000000, -0.90000000000000002 },
12121 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12122 2.0000000000000000, -0.80000000000000004 },
12123 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12124 2.0000000000000000, -0.69999999999999996 },
12125 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12126 2.0000000000000000, -0.59999999999999998 },
12127 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12128 2.0000000000000000, -0.50000000000000000 },
12129 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12130 2.0000000000000000, -0.40000000000000002 },
12131 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12132 2.0000000000000000, -0.30000000000000004 },
12133 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12134 2.0000000000000000, -0.19999999999999996 },
12135 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12136 2.0000000000000000, -0.099999999999999978 },
12137 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12138 2.0000000000000000, 0.0000000000000000 },
12139 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12140 2.0000000000000000, 0.10000000000000009 },
12141 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12142 2.0000000000000000, 0.19999999999999996 },
12143 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12144 2.0000000000000000, 0.30000000000000004 },
12145 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12146 2.0000000000000000, 0.39999999999999991 },
12147 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12148 2.0000000000000000, 0.50000000000000000 },
12149 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12150 2.0000000000000000, 0.60000000000000009 },
12151 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12152 2.0000000000000000, 0.69999999999999996 },
12153 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12154 2.0000000000000000, 0.80000000000000004 },
12155 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12156 2.0000000000000000, 0.89999999999999991 },
12157 };
12158
12159 // Test function for a=10.000000000000000, b=0.0000000000000000, c=2.0000000000000000.
12160 template <typename Tp>
12161 void test176()
12162 {
12163 const Tp eps = std::numeric_limits<Tp>::epsilon();
12164 Tp max_abs_diff = -Tp(1);
12165 Tp max_abs_frac = -Tp(1);
12166 unsigned int num_datum = sizeof(data176)
12167 / sizeof(testcase_hyperg<double>);
12168 for (unsigned int i = 0; i < num_datum; ++i)
12169 {
12170 const Tp f = std::tr1::hyperg(Tp(data176[i].a), Tp(data176[i].b),
12171 Tp(data176[i].c), Tp(data176[i].x));
12172 const Tp f0 = data176[i].f0;
12173 const Tp diff = f - f0;
12174 if (std::abs(diff) > max_abs_diff)
12175 max_abs_diff = std::abs(diff);
12176 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
12177 {
12178 const Tp frac = diff / f0;
12179 if (std::abs(frac) > max_abs_frac)
12180 max_abs_frac = std::abs(frac);
12181 }
12182 }
12183 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
12184 }
12185
12186 // Test data for a=10.000000000000000, b=0.0000000000000000, c=4.0000000000000000.
12187 testcase_hyperg<double> data177[] = {
12188 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12189 4.0000000000000000, -0.90000000000000002 },
12190 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12191 4.0000000000000000, -0.80000000000000004 },
12192 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12193 4.0000000000000000, -0.69999999999999996 },
12194 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12195 4.0000000000000000, -0.59999999999999998 },
12196 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12197 4.0000000000000000, -0.50000000000000000 },
12198 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12199 4.0000000000000000, -0.40000000000000002 },
12200 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12201 4.0000000000000000, -0.30000000000000004 },
12202 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12203 4.0000000000000000, -0.19999999999999996 },
12204 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12205 4.0000000000000000, -0.099999999999999978 },
12206 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12207 4.0000000000000000, 0.0000000000000000 },
12208 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12209 4.0000000000000000, 0.10000000000000009 },
12210 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12211 4.0000000000000000, 0.19999999999999996 },
12212 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12213 4.0000000000000000, 0.30000000000000004 },
12214 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12215 4.0000000000000000, 0.39999999999999991 },
12216 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12217 4.0000000000000000, 0.50000000000000000 },
12218 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12219 4.0000000000000000, 0.60000000000000009 },
12220 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12221 4.0000000000000000, 0.69999999999999996 },
12222 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12223 4.0000000000000000, 0.80000000000000004 },
12224 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12225 4.0000000000000000, 0.89999999999999991 },
12226 };
12227
12228 // Test function for a=10.000000000000000, b=0.0000000000000000, c=4.0000000000000000.
12229 template <typename Tp>
12230 void test177()
12231 {
12232 const Tp eps = std::numeric_limits<Tp>::epsilon();
12233 Tp max_abs_diff = -Tp(1);
12234 Tp max_abs_frac = -Tp(1);
12235 unsigned int num_datum = sizeof(data177)
12236 / sizeof(testcase_hyperg<double>);
12237 for (unsigned int i = 0; i < num_datum; ++i)
12238 {
12239 const Tp f = std::tr1::hyperg(Tp(data177[i].a), Tp(data177[i].b),
12240 Tp(data177[i].c), Tp(data177[i].x));
12241 const Tp f0 = data177[i].f0;
12242 const Tp diff = f - f0;
12243 if (std::abs(diff) > max_abs_diff)
12244 max_abs_diff = std::abs(diff);
12245 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
12246 {
12247 const Tp frac = diff / f0;
12248 if (std::abs(frac) > max_abs_frac)
12249 max_abs_frac = std::abs(frac);
12250 }
12251 }
12252 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
12253 }
12254
12255 // Test data for a=10.000000000000000, b=0.0000000000000000, c=6.0000000000000000.
12256 testcase_hyperg<double> data178[] = {
12257 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12258 6.0000000000000000, -0.90000000000000002 },
12259 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12260 6.0000000000000000, -0.80000000000000004 },
12261 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12262 6.0000000000000000, -0.69999999999999996 },
12263 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12264 6.0000000000000000, -0.59999999999999998 },
12265 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12266 6.0000000000000000, -0.50000000000000000 },
12267 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12268 6.0000000000000000, -0.40000000000000002 },
12269 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12270 6.0000000000000000, -0.30000000000000004 },
12271 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12272 6.0000000000000000, -0.19999999999999996 },
12273 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12274 6.0000000000000000, -0.099999999999999978 },
12275 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12276 6.0000000000000000, 0.0000000000000000 },
12277 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12278 6.0000000000000000, 0.10000000000000009 },
12279 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12280 6.0000000000000000, 0.19999999999999996 },
12281 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12282 6.0000000000000000, 0.30000000000000004 },
12283 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12284 6.0000000000000000, 0.39999999999999991 },
12285 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12286 6.0000000000000000, 0.50000000000000000 },
12287 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12288 6.0000000000000000, 0.60000000000000009 },
12289 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12290 6.0000000000000000, 0.69999999999999996 },
12291 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12292 6.0000000000000000, 0.80000000000000004 },
12293 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12294 6.0000000000000000, 0.89999999999999991 },
12295 };
12296
12297 // Test function for a=10.000000000000000, b=0.0000000000000000, c=6.0000000000000000.
12298 template <typename Tp>
12299 void test178()
12300 {
12301 const Tp eps = std::numeric_limits<Tp>::epsilon();
12302 Tp max_abs_diff = -Tp(1);
12303 Tp max_abs_frac = -Tp(1);
12304 unsigned int num_datum = sizeof(data178)
12305 / sizeof(testcase_hyperg<double>);
12306 for (unsigned int i = 0; i < num_datum; ++i)
12307 {
12308 const Tp f = std::tr1::hyperg(Tp(data178[i].a), Tp(data178[i].b),
12309 Tp(data178[i].c), Tp(data178[i].x));
12310 const Tp f0 = data178[i].f0;
12311 const Tp diff = f - f0;
12312 if (std::abs(diff) > max_abs_diff)
12313 max_abs_diff = std::abs(diff);
12314 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
12315 {
12316 const Tp frac = diff / f0;
12317 if (std::abs(frac) > max_abs_frac)
12318 max_abs_frac = std::abs(frac);
12319 }
12320 }
12321 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
12322 }
12323
12324 // Test data for a=10.000000000000000, b=0.0000000000000000, c=8.0000000000000000.
12325 testcase_hyperg<double> data179[] = {
12326 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12327 8.0000000000000000, -0.90000000000000002 },
12328 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12329 8.0000000000000000, -0.80000000000000004 },
12330 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12331 8.0000000000000000, -0.69999999999999996 },
12332 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12333 8.0000000000000000, -0.59999999999999998 },
12334 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12335 8.0000000000000000, -0.50000000000000000 },
12336 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12337 8.0000000000000000, -0.40000000000000002 },
12338 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12339 8.0000000000000000, -0.30000000000000004 },
12340 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12341 8.0000000000000000, -0.19999999999999996 },
12342 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12343 8.0000000000000000, -0.099999999999999978 },
12344 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12345 8.0000000000000000, 0.0000000000000000 },
12346 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12347 8.0000000000000000, 0.10000000000000009 },
12348 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12349 8.0000000000000000, 0.19999999999999996 },
12350 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12351 8.0000000000000000, 0.30000000000000004 },
12352 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12353 8.0000000000000000, 0.39999999999999991 },
12354 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12355 8.0000000000000000, 0.50000000000000000 },
12356 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12357 8.0000000000000000, 0.60000000000000009 },
12358 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12359 8.0000000000000000, 0.69999999999999996 },
12360 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12361 8.0000000000000000, 0.80000000000000004 },
12362 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12363 8.0000000000000000, 0.89999999999999991 },
12364 };
12365
12366 // Test function for a=10.000000000000000, b=0.0000000000000000, c=8.0000000000000000.
12367 template <typename Tp>
12368 void test179()
12369 {
12370 const Tp eps = std::numeric_limits<Tp>::epsilon();
12371 Tp max_abs_diff = -Tp(1);
12372 Tp max_abs_frac = -Tp(1);
12373 unsigned int num_datum = sizeof(data179)
12374 / sizeof(testcase_hyperg<double>);
12375 for (unsigned int i = 0; i < num_datum; ++i)
12376 {
12377 const Tp f = std::tr1::hyperg(Tp(data179[i].a), Tp(data179[i].b),
12378 Tp(data179[i].c), Tp(data179[i].x));
12379 const Tp f0 = data179[i].f0;
12380 const Tp diff = f - f0;
12381 if (std::abs(diff) > max_abs_diff)
12382 max_abs_diff = std::abs(diff);
12383 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
12384 {
12385 const Tp frac = diff / f0;
12386 if (std::abs(frac) > max_abs_frac)
12387 max_abs_frac = std::abs(frac);
12388 }
12389 }
12390 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
12391 }
12392
12393 // Test data for a=10.000000000000000, b=0.0000000000000000, c=10.000000000000000.
12394 testcase_hyperg<double> data180[] = {
12395 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12396 10.000000000000000, -0.90000000000000002 },
12397 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12398 10.000000000000000, -0.80000000000000004 },
12399 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12400 10.000000000000000, -0.69999999999999996 },
12401 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12402 10.000000000000000, -0.59999999999999998 },
12403 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12404 10.000000000000000, -0.50000000000000000 },
12405 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12406 10.000000000000000, -0.40000000000000002 },
12407 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12408 10.000000000000000, -0.30000000000000004 },
12409 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12410 10.000000000000000, -0.19999999999999996 },
12411 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12412 10.000000000000000, -0.099999999999999978 },
12413 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12414 10.000000000000000, 0.0000000000000000 },
12415 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12416 10.000000000000000, 0.10000000000000009 },
12417 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12418 10.000000000000000, 0.19999999999999996 },
12419 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12420 10.000000000000000, 0.30000000000000004 },
12421 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12422 10.000000000000000, 0.39999999999999991 },
12423 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12424 10.000000000000000, 0.50000000000000000 },
12425 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12426 10.000000000000000, 0.60000000000000009 },
12427 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12428 10.000000000000000, 0.69999999999999996 },
12429 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12430 10.000000000000000, 0.80000000000000004 },
12431 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
12432 10.000000000000000, 0.89999999999999991 },
12433 };
12434
12435 // Test function for a=10.000000000000000, b=0.0000000000000000, c=10.000000000000000.
12436 template <typename Tp>
12437 void test180()
12438 {
12439 const Tp eps = std::numeric_limits<Tp>::epsilon();
12440 Tp max_abs_diff = -Tp(1);
12441 Tp max_abs_frac = -Tp(1);
12442 unsigned int num_datum = sizeof(data180)
12443 / sizeof(testcase_hyperg<double>);
12444 for (unsigned int i = 0; i < num_datum; ++i)
12445 {
12446 const Tp f = std::tr1::hyperg(Tp(data180[i].a), Tp(data180[i].b),
12447 Tp(data180[i].c), Tp(data180[i].x));
12448 const Tp f0 = data180[i].f0;
12449 const Tp diff = f - f0;
12450 if (std::abs(diff) > max_abs_diff)
12451 max_abs_diff = std::abs(diff);
12452 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
12453 {
12454 const Tp frac = diff / f0;
12455 if (std::abs(frac) > max_abs_frac)
12456 max_abs_frac = std::abs(frac);
12457 }
12458 }
12459 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
12460 }
12461
12462 // Test data for a=10.000000000000000, b=0.50000000000000000, c=2.0000000000000000.
12463 testcase_hyperg<double> data181[] = {
12464 { 0.37727530159464628, 10.000000000000000, 0.50000000000000000,
12465 2.0000000000000000, -0.90000000000000002 },
12466 { 0.39816010922169010, 10.000000000000000, 0.50000000000000000,
12467 2.0000000000000000, -0.80000000000000004 },
12468 { 0.42283703041362453, 10.000000000000000, 0.50000000000000000,
12469 2.0000000000000000, -0.69999999999999996 },
12470 { 0.45255640448730505, 10.000000000000000, 0.50000000000000000,
12471 2.0000000000000000, -0.59999999999999998 },
12472 { 0.48919507154431141, 10.000000000000000, 0.50000000000000000,
12473 2.0000000000000000, -0.50000000000000000 },
12474 { 0.53569358917731880, 10.000000000000000, 0.50000000000000000,
12475 2.0000000000000000, -0.40000000000000002 },
12476 { 0.59689778897029566, 10.000000000000000, 0.50000000000000000,
12477 2.0000000000000000, -0.30000000000000004 },
12478 { 0.68128587569875731, 10.000000000000000, 0.50000000000000000,
12479 2.0000000000000000, -0.19999999999999996 },
12480 { 0.80478739308790359, 10.000000000000000, 0.50000000000000000,
12481 2.0000000000000000, -0.099999999999999978 },
12482 { 1.0000000000000000, 10.000000000000000, 0.50000000000000000,
12483 2.0000000000000000, 0.0000000000000000 },
12484 { 1.3408664196153621, 10.000000000000000, 0.50000000000000000,
12485 2.0000000000000000, 0.10000000000000009 },
12486 { 2.0175364359923860, 10.000000000000000, 0.50000000000000000,
12487 2.0000000000000000, 0.19999999999999996 },
12488 { 3.6011214553736646, 10.000000000000000, 0.50000000000000000,
12489 2.0000000000000000, 0.30000000000000004 },
12490 { 8.1799429939495312, 10.000000000000000, 0.50000000000000000,
12491 2.0000000000000000, 0.39999999999999991 },
12492 { 25.644834637536000, 10.000000000000000, 0.50000000000000000,
12493 2.0000000000000000, 0.50000000000000000 },
12494 { 123.13738891597615, 10.000000000000000, 0.50000000000000000,
12495 2.0000000000000000, 0.60000000000000009 },
12496 { 1088.7122410321333, 10.000000000000000, 0.50000000000000000,
12497 2.0000000000000000, 0.69999999999999996 },
12498 { 27358.291704709951, 10.000000000000000, 0.50000000000000000,
12499 2.0000000000000000, 0.80000000000000004 },
12500 { 8174369.0266731177, 10.000000000000000, 0.50000000000000000,
12501 2.0000000000000000, 0.89999999999999991 },
12502 };
12503
12504 // Test function for a=10.000000000000000, b=0.50000000000000000, c=2.0000000000000000.
12505 template <typename Tp>
12506 void test181()
12507 {
12508 const Tp eps = std::numeric_limits<Tp>::epsilon();
12509 Tp max_abs_diff = -Tp(1);
12510 Tp max_abs_frac = -Tp(1);
12511 unsigned int num_datum = sizeof(data181)
12512 / sizeof(testcase_hyperg<double>);
12513 for (unsigned int i = 0; i < num_datum; ++i)
12514 {
12515 const Tp f = std::tr1::hyperg(Tp(data181[i].a), Tp(data181[i].b),
12516 Tp(data181[i].c), Tp(data181[i].x));
12517 const Tp f0 = data181[i].f0;
12518 const Tp diff = f - f0;
12519 if (std::abs(diff) > max_abs_diff)
12520 max_abs_diff = std::abs(diff);
12521 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
12522 {
12523 const Tp frac = diff / f0;
12524 if (std::abs(frac) > max_abs_frac)
12525 max_abs_frac = std::abs(frac);
12526 }
12527 }
12528 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
12529 }
12530
12531 // Test data for a=10.000000000000000, b=0.50000000000000000, c=4.0000000000000000.
12532 testcase_hyperg<double> data182[] = {
12533 { 0.53905528308450834, 10.000000000000000, 0.50000000000000000,
12534 4.0000000000000000, -0.90000000000000002 },
12535 { 0.56235533974376162, 10.000000000000000, 0.50000000000000000,
12536 4.0000000000000000, -0.80000000000000004 },
12537 { 0.58887657983263575, 10.000000000000000, 0.50000000000000000,
12538 4.0000000000000000, -0.69999999999999996 },
12539 { 0.61941227047262915, 10.000000000000000, 0.50000000000000000,
12540 4.0000000000000000, -0.59999999999999998 },
12541 { 0.65504896640793853, 10.000000000000000, 0.50000000000000000,
12542 4.0000000000000000, -0.50000000000000000 },
12543 { 0.69731666644529999, 10.000000000000000, 0.50000000000000000,
12544 4.0000000000000000, -0.40000000000000002 },
12545 { 0.74844073299399128, 10.000000000000000, 0.50000000000000000,
12546 4.0000000000000000, -0.30000000000000004 },
12547 { 0.81178446800105752, 10.000000000000000, 0.50000000000000000,
12548 4.0000000000000000, -0.19999999999999996 },
12549 { 0.89266981277598023, 10.000000000000000, 0.50000000000000000,
12550 4.0000000000000000, -0.099999999999999978 },
12551 { 1.0000000000000000, 10.000000000000000, 0.50000000000000000,
12552 4.0000000000000000, 0.0000000000000000 },
12553 { 1.1497248473106778, 10.000000000000000, 0.50000000000000000,
12554 4.0000000000000000, 0.10000000000000009 },
12555 { 1.3729717112654571, 10.000000000000000, 0.50000000000000000,
12556 4.0000000000000000, 0.19999999999999996 },
12557 { 1.7374982340374392, 10.000000000000000, 0.50000000000000000,
12558 4.0000000000000000, 0.30000000000000004 },
12559 { 2.4134479340960580, 10.000000000000000, 0.50000000000000000,
12560 4.0000000000000000, 0.39999999999999991 },
12561 { 3.9191255240471192, 10.000000000000000, 0.50000000000000000,
12562 4.0000000000000000, 0.50000000000000000 },
12563 { 8.3316373077761270, 10.000000000000000, 0.50000000000000000,
12564 4.0000000000000000, 0.60000000000000009 },
12565 { 28.323020339843335, 10.000000000000000, 0.50000000000000000,
12566 4.0000000000000000, 0.69999999999999996 },
12567 { 225.84286572747891, 10.000000000000000, 0.50000000000000000,
12568 4.0000000000000000, 0.80000000000000004 },
12569 { 12757.127591286655, 10.000000000000000, 0.50000000000000000,
12570 4.0000000000000000, 0.89999999999999991 },
12571 };
12572
12573 // Test function for a=10.000000000000000, b=0.50000000000000000, c=4.0000000000000000.
12574 template <typename Tp>
12575 void test182()
12576 {
12577 const Tp eps = std::numeric_limits<Tp>::epsilon();
12578 Tp max_abs_diff = -Tp(1);
12579 Tp max_abs_frac = -Tp(1);
12580 unsigned int num_datum = sizeof(data182)
12581 / sizeof(testcase_hyperg<double>);
12582 for (unsigned int i = 0; i < num_datum; ++i)
12583 {
12584 const Tp f = std::tr1::hyperg(Tp(data182[i].a), Tp(data182[i].b),
12585 Tp(data182[i].c), Tp(data182[i].x));
12586 const Tp f0 = data182[i].f0;
12587 const Tp diff = f - f0;
12588 if (std::abs(diff) > max_abs_diff)
12589 max_abs_diff = std::abs(diff);
12590 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
12591 {
12592 const Tp frac = diff / f0;
12593 if (std::abs(frac) > max_abs_frac)
12594 max_abs_frac = std::abs(frac);
12595 }
12596 }
12597 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
12598 }
12599
12600 // Test data for a=10.000000000000000, b=0.50000000000000000, c=6.0000000000000000.
12601 testcase_hyperg<double> data183[] = {
12602 { 0.62672622092226071, 10.000000000000000, 0.50000000000000000,
12603 6.0000000000000000, -0.90000000000000002 },
12604 { 0.64931010269769829, 10.000000000000000, 0.50000000000000000,
12605 6.0000000000000000, -0.80000000000000004 },
12606 { 0.67448067519076316, 10.000000000000000, 0.50000000000000000,
12607 6.0000000000000000, -0.69999999999999996 },
12608 { 0.70276306239803676, 10.000000000000000, 0.50000000000000000,
12609 6.0000000000000000, -0.59999999999999998 },
12610 { 0.73484179773087555, 10.000000000000000, 0.50000000000000000,
12611 6.0000000000000000, -0.50000000000000000 },
12612 { 0.77162761412743897, 10.000000000000000, 0.50000000000000000,
12613 6.0000000000000000, -0.40000000000000002 },
12614 { 0.81436116844816531, 10.000000000000000, 0.50000000000000000,
12615 6.0000000000000000, -0.30000000000000004 },
12616 { 0.86477994787944557, 10.000000000000000, 0.50000000000000000,
12617 6.0000000000000000, -0.19999999999999996 },
12618 { 0.92539820516603888, 10.000000000000000, 0.50000000000000000,
12619 6.0000000000000000, -0.099999999999999978 },
12620 { 1.0000000000000000, 10.000000000000000, 0.50000000000000000,
12621 6.0000000000000000, 0.0000000000000000 },
12622 { 1.0945599448210315, 10.000000000000000, 0.50000000000000000,
12623 6.0000000000000000, 0.10000000000000009 },
12624 { 1.2190897395597264, 10.000000000000000, 0.50000000000000000,
12625 6.0000000000000000, 0.19999999999999996 },
12626 { 1.3916844336856475, 10.000000000000000, 0.50000000000000000,
12627 6.0000000000000000, 0.30000000000000004 },
12628 { 1.6484497630432013, 10.000000000000000, 0.50000000000000000,
12629 6.0000000000000000, 0.39999999999999991 },
12630 { 2.0717772717131155, 10.000000000000000, 0.50000000000000000,
12631 6.0000000000000000, 0.50000000000000000 },
12632 { 2.8893613630810924, 10.000000000000000, 0.50000000000000000,
12633 6.0000000000000000, 0.60000000000000009 },
12634 { 4.9459404075413529, 10.000000000000000, 0.50000000000000000,
12635 6.0000000000000000, 0.69999999999999996 },
12636 { 13.487394149998716, 10.000000000000000, 0.50000000000000000,
12637 6.0000000000000000, 0.80000000000000004 },
12638 { 136.57616044013972, 10.000000000000000, 0.50000000000000000,
12639 6.0000000000000000, 0.89999999999999991 },
12640 };
12641
12642 // Test function for a=10.000000000000000, b=0.50000000000000000, c=6.0000000000000000.
12643 template <typename Tp>
12644 void test183()
12645 {
12646 const Tp eps = std::numeric_limits<Tp>::epsilon();
12647 Tp max_abs_diff = -Tp(1);
12648 Tp max_abs_frac = -Tp(1);
12649 unsigned int num_datum = sizeof(data183)
12650 / sizeof(testcase_hyperg<double>);
12651 for (unsigned int i = 0; i < num_datum; ++i)
12652 {
12653 const Tp f = std::tr1::hyperg(Tp(data183[i].a), Tp(data183[i].b),
12654 Tp(data183[i].c), Tp(data183[i].x));
12655 const Tp f0 = data183[i].f0;
12656 const Tp diff = f - f0;
12657 if (std::abs(diff) > max_abs_diff)
12658 max_abs_diff = std::abs(diff);
12659 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
12660 {
12661 const Tp frac = diff / f0;
12662 if (std::abs(frac) > max_abs_frac)
12663 max_abs_frac = std::abs(frac);
12664 }
12665 }
12666 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
12667 }
12668
12669 // Test data for a=10.000000000000000, b=0.50000000000000000, c=8.0000000000000000.
12670 testcase_hyperg<double> data184[] = {
12671 { 0.68421604440344341, 10.000000000000000, 0.50000000000000000,
12672 8.0000000000000000, -0.90000000000000002 },
12673 { 0.70548098055548891, 10.000000000000000, 0.50000000000000000,
12674 8.0000000000000000, -0.80000000000000004 },
12675 { 0.72884342311710348, 10.000000000000000, 0.50000000000000000,
12676 8.0000000000000000, -0.69999999999999996 },
12677 { 0.75466953437856243, 10.000000000000000, 0.50000000000000000,
12678 8.0000000000000000, -0.59999999999999998 },
12679 { 0.78342090924662600, 10.000000000000000, 0.50000000000000000,
12680 8.0000000000000000, -0.50000000000000000 },
12681 { 0.81568884278645049, 10.000000000000000, 0.50000000000000000,
12682 8.0000000000000000, -0.40000000000000002 },
12683 { 0.85224480241465206, 10.000000000000000, 0.50000000000000000,
12684 8.0000000000000000, -0.30000000000000004 },
12685 { 0.89411692571131696, 10.000000000000000, 0.50000000000000000,
12686 8.0000000000000000, -0.19999999999999996 },
12687 { 0.94270986892954756, 10.000000000000000, 0.50000000000000000,
12688 8.0000000000000000, -0.099999999999999978 },
12689 { 1.0000000000000000, 10.000000000000000, 0.50000000000000000,
12690 8.0000000000000000, 0.0000000000000000 },
12691 { 1.0688682849120232, 10.000000000000000, 0.50000000000000000,
12692 8.0000000000000000, 0.10000000000000009 },
12693 { 1.1537004376097553, 10.000000000000000, 0.50000000000000000,
12694 8.0000000000000000, 0.19999999999999996 },
12695 { 1.2615455028370031, 10.000000000000000, 0.50000000000000000,
12696 8.0000000000000000, 0.30000000000000004 },
12697 { 1.4045541456153436, 10.000000000000000, 0.50000000000000000,
12698 8.0000000000000000, 0.39999999999999991 },
12699 { 1.6057216489444517, 10.000000000000000, 0.50000000000000000,
12700 8.0000000000000000, 0.50000000000000000 },
12701 { 1.9146603020550739, 10.000000000000000, 0.50000000000000000,
12702 8.0000000000000000, 0.60000000000000009 },
12703 { 2.4617931307620298, 10.000000000000000, 0.50000000000000000,
12704 8.0000000000000000, 0.69999999999999996 },
12705 { 3.7267799624996498, 10.000000000000000, 0.50000000000000000,
12706 8.0000000000000000, 0.80000000000000004 },
12707 { 9.3880118036248401, 10.000000000000000, 0.50000000000000000,
12708 8.0000000000000000, 0.89999999999999991 },
12709 };
12710
12711 // Test function for a=10.000000000000000, b=0.50000000000000000, c=8.0000000000000000.
12712 template <typename Tp>
12713 void test184()
12714 {
12715 const Tp eps = std::numeric_limits<Tp>::epsilon();
12716 Tp max_abs_diff = -Tp(1);
12717 Tp max_abs_frac = -Tp(1);
12718 unsigned int num_datum = sizeof(data184)
12719 / sizeof(testcase_hyperg<double>);
12720 for (unsigned int i = 0; i < num_datum; ++i)
12721 {
12722 const Tp f = std::tr1::hyperg(Tp(data184[i].a), Tp(data184[i].b),
12723 Tp(data184[i].c), Tp(data184[i].x));
12724 const Tp f0 = data184[i].f0;
12725 const Tp diff = f - f0;
12726 if (std::abs(diff) > max_abs_diff)
12727 max_abs_diff = std::abs(diff);
12728 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
12729 {
12730 const Tp frac = diff / f0;
12731 if (std::abs(frac) > max_abs_frac)
12732 max_abs_frac = std::abs(frac);
12733 }
12734 }
12735 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
12736 }
12737
12738 // Test data for a=10.000000000000000, b=0.50000000000000000, c=10.000000000000000.
12739 testcase_hyperg<double> data185[] = {
12740 { 0.72547625011001171, 10.000000000000000, 0.50000000000000000,
12741 10.000000000000000, -0.90000000000000002 },
12742 { 0.74535599249992990, 10.000000000000000, 0.50000000000000000,
12743 10.000000000000000, -0.80000000000000004 },
12744 { 0.76696498884737041, 10.000000000000000, 0.50000000000000000,
12745 10.000000000000000, -0.69999999999999996 },
12746 { 0.79056941504209477, 10.000000000000000, 0.50000000000000000,
12747 10.000000000000000, -0.59999999999999998 },
12748 { 0.81649658092772603, 10.000000000000000, 0.50000000000000000,
12749 10.000000000000000, -0.50000000000000000 },
12750 { 0.84515425472851657, 10.000000000000000, 0.50000000000000000,
12751 10.000000000000000, -0.40000000000000002 },
12752 { 0.87705801930702920, 10.000000000000000, 0.50000000000000000,
12753 10.000000000000000, -0.30000000000000004 },
12754 { 0.91287092917527690, 10.000000000000000, 0.50000000000000000,
12755 10.000000000000000, -0.19999999999999996 },
12756 { 0.95346258924559224, 10.000000000000000, 0.50000000000000000,
12757 10.000000000000000, -0.099999999999999978 },
12758 { 1.0000000000000000, 10.000000000000000, 0.50000000000000000,
12759 10.000000000000000, 0.0000000000000000 },
12760 { 1.0540925533894598, 10.000000000000000, 0.50000000000000000,
12761 10.000000000000000, 0.10000000000000009 },
12762 { 1.1180339887498949, 10.000000000000000, 0.50000000000000000,
12763 10.000000000000000, 0.19999999999999996 },
12764 { 1.1952286093343938, 10.000000000000000, 0.50000000000000000,
12765 10.000000000000000, 0.30000000000000004 },
12766 { 1.2909944487358056, 10.000000000000000, 0.50000000000000000,
12767 10.000000000000000, 0.39999999999999991 },
12768 { 1.4142135623730949, 10.000000000000000, 0.50000000000000000,
12769 10.000000000000000, 0.50000000000000000 },
12770 { 1.5811388300841900, 10.000000000000000, 0.50000000000000000,
12771 10.000000000000000, 0.60000000000000009 },
12772 { 1.8257418583505536, 10.000000000000000, 0.50000000000000000,
12773 10.000000000000000, 0.69999999999999996 },
12774 { 2.2360679774997898, 10.000000000000000, 0.50000000000000000,
12775 10.000000000000000, 0.80000000000000004 },
12776 { 3.1622776601683782, 10.000000000000000, 0.50000000000000000,
12777 10.000000000000000, 0.89999999999999991 },
12778 };
12779
12780 // Test function for a=10.000000000000000, b=0.50000000000000000, c=10.000000000000000.
12781 template <typename Tp>
12782 void test185()
12783 {
12784 const Tp eps = std::numeric_limits<Tp>::epsilon();
12785 Tp max_abs_diff = -Tp(1);
12786 Tp max_abs_frac = -Tp(1);
12787 unsigned int num_datum = sizeof(data185)
12788 / sizeof(testcase_hyperg<double>);
12789 for (unsigned int i = 0; i < num_datum; ++i)
12790 {
12791 const Tp f = std::tr1::hyperg(Tp(data185[i].a), Tp(data185[i].b),
12792 Tp(data185[i].c), Tp(data185[i].x));
12793 const Tp f0 = data185[i].f0;
12794 const Tp diff = f - f0;
12795 if (std::abs(diff) > max_abs_diff)
12796 max_abs_diff = std::abs(diff);
12797 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
12798 {
12799 const Tp frac = diff / f0;
12800 if (std::abs(frac) > max_abs_frac)
12801 max_abs_frac = std::abs(frac);
12802 }
12803 }
12804 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
12805 }
12806
12807 // Test data for a=10.000000000000000, b=1.0000000000000000, c=2.0000000000000000.
12808 testcase_hyperg<double> data186[] = {
12809 { 0.12307420104127871, 10.000000000000000, 1.0000000000000000,
12810 2.0000000000000000, -0.90000000000000002 },
12811 { 0.13818870041457423, 10.000000000000000, 1.0000000000000000,
12812 2.0000000000000000, -0.80000000000000004 },
12813 { 0.15739165631811691, 10.000000000000000, 1.0000000000000000,
12814 2.0000000000000000, -0.69999999999999996 },
12815 { 0.18249038606882068, 10.000000000000000, 1.0000000000000000,
12816 2.0000000000000000, -0.59999999999999998 },
12817 { 0.21644171225027786, 10.000000000000000, 1.0000000000000000,
12818 2.0000000000000000, -0.50000000000000000 },
12819 { 0.26433326159804160, 10.000000000000000, 1.0000000000000000,
12820 2.0000000000000000, -0.40000000000000002 },
12821 { 0.33544459430654533, 10.000000000000000, 1.0000000000000000,
12822 2.0000000000000000, -0.30000000000000004 },
12823 { 0.44788516696232517, 10.000000000000000, 1.0000000000000000,
12824 2.0000000000000000, -0.19999999999999996 },
12825 { 0.63989153514168362, 10.000000000000000, 1.0000000000000000,
12826 2.0000000000000000, -0.099999999999999978 },
12827 { 1.0000000000000000, 10.000000000000000, 1.0000000000000000,
12828 2.0000000000000000, 0.0000000000000000 },
12829 { 1.7568608796813312, 10.000000000000000, 1.0000000000000000,
12830 2.0000000000000000, 0.10000000000000009 },
12831 { 3.5836558871799027, 10.000000000000000, 1.0000000000000000,
12832 2.0000000000000000, 0.19999999999999996 },
12833 { 8.8077526749963226, 10.000000000000000, 1.0000000000000000,
12834 2.0000000000000000, 0.30000000000000004 },
12835 { 27.285841702089190, 10.000000000000000, 1.0000000000000000,
12836 2.0000000000000000, 0.39999999999999991 },
12837 { 113.55555555555557, 10.000000000000000, 1.0000000000000000,
12838 2.0000000000000000, 0.50000000000000000 },
12839 { 706.24023437500091, 10.000000000000000, 1.0000000000000000,
12840 2.0000000000000000, 0.60000000000000009 },
12841 { 8064.1687976651992, 10.000000000000000, 1.0000000000000000,
12842 2.0000000000000000, 0.69999999999999996 },
12843 { 271267.22222222196, 10.000000000000000, 1.0000000000000000,
12844 2.0000000000000000, 0.80000000000000004 },
12845 { 123456789.99999890, 10.000000000000000, 1.0000000000000000,
12846 2.0000000000000000, 0.89999999999999991 },
12847 };
12848
12849 // Test function for a=10.000000000000000, b=1.0000000000000000, c=2.0000000000000000.
12850 template <typename Tp>
12851 void test186()
12852 {
12853 const Tp eps = std::numeric_limits<Tp>::epsilon();
12854 Tp max_abs_diff = -Tp(1);
12855 Tp max_abs_frac = -Tp(1);
12856 unsigned int num_datum = sizeof(data186)
12857 / sizeof(testcase_hyperg<double>);
12858 for (unsigned int i = 0; i < num_datum; ++i)
12859 {
12860 const Tp f = std::tr1::hyperg(Tp(data186[i].a), Tp(data186[i].b),
12861 Tp(data186[i].c), Tp(data186[i].x));
12862 const Tp f0 = data186[i].f0;
12863 const Tp diff = f - f0;
12864 if (std::abs(diff) > max_abs_diff)
12865 max_abs_diff = std::abs(diff);
12866 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
12867 {
12868 const Tp frac = diff / f0;
12869 if (std::abs(frac) > max_abs_frac)
12870 max_abs_frac = std::abs(frac);
12871 }
12872 }
12873 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
12874 }
12875
12876 // Test data for a=10.000000000000000, b=1.0000000000000000, c=4.0000000000000000.
12877 testcase_hyperg<double> data187[] = {
12878 { 0.28363728383055758, 10.000000000000000, 1.0000000000000000,
12879 4.0000000000000000, -0.90000000000000002 },
12880 { 0.30933003169808387, 10.000000000000000, 1.0000000000000000,
12881 4.0000000000000000, -0.80000000000000004 },
12882 { 0.33998437757128797, 10.000000000000000, 1.0000000000000000,
12883 4.0000000000000000, -0.69999999999999996 },
12884 { 0.37713553224291119, 10.000000000000000, 1.0000000000000000,
12885 4.0000000000000000, -0.59999999999999998 },
12886 { 0.42299736538419658, 10.000000000000000, 1.0000000000000000,
12887 4.0000000000000000, -0.50000000000000000 },
12888 { 0.48086597727600106, 10.000000000000000, 1.0000000000000000,
12889 4.0000000000000000, -0.40000000000000002 },
12890 { 0.55583495759293045, 10.000000000000000, 1.0000000000000000,
12891 4.0000000000000000, -0.30000000000000004 },
12892 { 0.65612850114039667, 10.000000000000000, 1.0000000000000000,
12893 4.0000000000000000, -0.19999999999999996 },
12894 { 0.79573668772968120, 10.000000000000000, 1.0000000000000000,
12895 4.0000000000000000, -0.099999999999999978 },
12896 { 1.0000000000000000, 10.000000000000000, 1.0000000000000000,
12897 4.0000000000000000, 0.0000000000000000 },
12898 { 1.3184712058058303, 10.000000000000000, 1.0000000000000000,
12899 4.0000000000000000, 0.10000000000000009 },
12900 { 1.8576958065941214, 10.000000000000000, 1.0000000000000000,
12901 4.0000000000000000, 0.19999999999999996 },
12902 { 2.8759509651764228, 10.000000000000000, 1.0000000000000000,
12903 4.0000000000000000, 0.30000000000000004 },
12904 { 5.1046225531822182, 10.000000000000000, 1.0000000000000000,
12905 4.0000000000000000, 0.39999999999999991 },
12906 { 11.095238095238095, 10.000000000000000, 1.0000000000000000,
12907 4.0000000000000000, 0.50000000000000000 },
12908 { 32.797154017857174, 10.000000000000000, 1.0000000000000000,
12909 4.0000000000000000, 0.60000000000000009 },
12910 { 158.01935680536477, 10.000000000000000, 1.0000000000000000,
12911 4.0000000000000000, 0.69999999999999996 },
12912 { 1815.9523809523814, 10.000000000000000, 1.0000000000000000,
12913 4.0000000000000000, 0.80000000000000004 },
12914 { 163302.14285714156, 10.000000000000000, 1.0000000000000000,
12915 4.0000000000000000, 0.89999999999999991 },
12916 };
12917
12918 // Test function for a=10.000000000000000, b=1.0000000000000000, c=4.0000000000000000.
12919 template <typename Tp>
12920 void test187()
12921 {
12922 const Tp eps = std::numeric_limits<Tp>::epsilon();
12923 Tp max_abs_diff = -Tp(1);
12924 Tp max_abs_frac = -Tp(1);
12925 unsigned int num_datum = sizeof(data187)
12926 / sizeof(testcase_hyperg<double>);
12927 for (unsigned int i = 0; i < num_datum; ++i)
12928 {
12929 const Tp f = std::tr1::hyperg(Tp(data187[i].a), Tp(data187[i].b),
12930 Tp(data187[i].c), Tp(data187[i].x));
12931 const Tp f0 = data187[i].f0;
12932 const Tp diff = f - f0;
12933 if (std::abs(diff) > max_abs_diff)
12934 max_abs_diff = std::abs(diff);
12935 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
12936 {
12937 const Tp frac = diff / f0;
12938 if (std::abs(frac) > max_abs_frac)
12939 max_abs_frac = std::abs(frac);
12940 }
12941 }
12942 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
12943 }
12944
12945 // Test data for a=10.000000000000000, b=1.0000000000000000, c=6.0000000000000000.
12946 testcase_hyperg<double> data188[] = {
12947 { 0.39006633302741794, 10.000000000000000, 1.0000000000000000,
12948 6.0000000000000000, -0.90000000000000002 },
12949 { 0.41898885698103294, 10.000000000000000, 1.0000000000000000,
12950 6.0000000000000000, -0.80000000000000004 },
12951 { 0.45245557983812590, 10.000000000000000, 1.0000000000000000,
12952 6.0000000000000000, -0.69999999999999996 },
12953 { 0.49160548618861633, 10.000000000000000, 1.0000000000000000,
12954 6.0000000000000000, -0.59999999999999998 },
12955 { 0.53798419230517980, 10.000000000000000, 1.0000000000000000,
12956 6.0000000000000000, -0.50000000000000000 },
12957 { 0.59373881442067344, 10.000000000000000, 1.0000000000000000,
12958 6.0000000000000000, -0.40000000000000002 },
12959 { 0.66193391357076115, 10.000000000000000, 1.0000000000000000,
12960 6.0000000000000000, -0.30000000000000004 },
12961 { 0.74708402736952129, 10.000000000000000, 1.0000000000000000,
12962 6.0000000000000000, -0.19999999999999996 },
12963 { 0.85609281019430605, 10.000000000000000, 1.0000000000000000,
12964 6.0000000000000000, -0.099999999999999978 },
12965 { 1.0000000000000000, 10.000000000000000, 1.0000000000000000,
12966 6.0000000000000000, 0.0000000000000000 },
12967 { 1.1974451135148187, 10.000000000000000, 1.0000000000000000,
12968 6.0000000000000000, 0.10000000000000009 },
12969 { 1.4820886036706347, 10.000000000000000, 1.0000000000000000,
12970 6.0000000000000000, 0.19999999999999996 },
12971 { 1.9201183180477521, 10.000000000000000, 1.0000000000000000,
12972 6.0000000000000000, 0.30000000000000004 },
12973 { 2.6569338297733336, 10.000000000000000, 1.0000000000000000,
12974 6.0000000000000000, 0.39999999999999991 },
12975 { 4.0634920634920650, 10.000000000000000, 1.0000000000000000,
12976 6.0000000000000000, 0.50000000000000000 },
12977 { 7.3102678571428568, 10.000000000000000, 1.0000000000000000,
12978 6.0000000000000000, 0.60000000000000009 },
12979 { 17.512574302697733, 10.000000000000000, 1.0000000000000000,
12980 6.0000000000000000, 0.69999999999999996 },
12981 { 74.206349206349131, 10.000000000000000, 1.0000000000000000,
12982 6.0000000000000000, 0.80000000000000004 },
12983 { 1342.8571428571363, 10.000000000000000, 1.0000000000000000,
12984 6.0000000000000000, 0.89999999999999991 },
12985 };
12986
12987 // Test function for a=10.000000000000000, b=1.0000000000000000, c=6.0000000000000000.
12988 template <typename Tp>
12989 void test188()
12990 {
12991 const Tp eps = std::numeric_limits<Tp>::epsilon();
12992 Tp max_abs_diff = -Tp(1);
12993 Tp max_abs_frac = -Tp(1);
12994 unsigned int num_datum = sizeof(data188)
12995 / sizeof(testcase_hyperg<double>);
12996 for (unsigned int i = 0; i < num_datum; ++i)
12997 {
12998 const Tp f = std::tr1::hyperg(Tp(data188[i].a), Tp(data188[i].b),
12999 Tp(data188[i].c), Tp(data188[i].x));
13000 const Tp f0 = data188[i].f0;
13001 const Tp diff = f - f0;
13002 if (std::abs(diff) > max_abs_diff)
13003 max_abs_diff = std::abs(diff);
13004 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
13005 {
13006 const Tp frac = diff / f0;
13007 if (std::abs(frac) > max_abs_frac)
13008 max_abs_frac = std::abs(frac);
13009 }
13010 }
13011 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
13012 }
13013
13014 // Test data for a=10.000000000000000, b=1.0000000000000000, c=8.0000000000000000.
13015 testcase_hyperg<double> data189[] = {
13016 { 0.46726928123633193, 10.000000000000000, 1.0000000000000000,
13017 8.0000000000000000, -0.90000000000000002 },
13018 { 0.49687547629934464, 10.000000000000000, 1.0000000000000000,
13019 8.0000000000000000, -0.80000000000000004 },
13020 { 0.53045208856322235, 10.000000000000000, 1.0000000000000000,
13021 8.0000000000000000, -0.69999999999999996 },
13022 { 0.56884765624999978, 10.000000000000000, 1.0000000000000000,
13023 8.0000000000000000, -0.59999999999999998 },
13024 { 0.61316872427983526, 10.000000000000000, 1.0000000000000000,
13025 8.0000000000000000, -0.50000000000000000 },
13026 { 0.66488500161969544, 10.000000000000000, 1.0000000000000000,
13027 8.0000000000000000, -0.40000000000000002 },
13028 { 0.72598998634501577, 10.000000000000000, 1.0000000000000000,
13029 8.0000000000000000, -0.30000000000000004 },
13030 { 0.79925411522633782, 10.000000000000000, 1.0000000000000000,
13031 8.0000000000000000, -0.19999999999999996 },
13032 { 0.88863845062192193, 10.000000000000000, 1.0000000000000000,
13033 8.0000000000000000, -0.099999999999999978 },
13034 { 1.0000000000000000, 10.000000000000000, 1.0000000000000000,
13035 8.0000000000000000, 0.0000000000000000 },
13036 { 1.1423563481176653, 10.000000000000000, 1.0000000000000000,
13037 8.0000000000000000, 0.10000000000000009 },
13038 { 1.3302951388888888, 10.000000000000000, 1.0000000000000000,
13039 8.0000000000000000, 0.19999999999999996 },
13040 { 1.5889212827988335, 10.000000000000000, 1.0000000000000000,
13041 8.0000000000000000, 0.30000000000000004 },
13042 { 1.9650205761316870, 10.000000000000000, 1.0000000000000000,
13043 8.0000000000000000, 0.39999999999999991 },
13044 { 2.5555555555555549, 10.000000000000000, 1.0000000000000000,
13045 8.0000000000000000, 0.50000000000000000 },
13046 { 3.5937500000000013, 10.000000000000000, 1.0000000000000000,
13047 8.0000000000000000, 0.60000000000000009 },
13048 { 5.7818930041152203, 10.000000000000000, 1.0000000000000000,
13049 8.0000000000000000, 0.69999999999999996 },
13050 { 12.222222222222220, 10.000000000000000, 1.0000000000000000,
13051 8.0000000000000000, 0.80000000000000004 },
13052 { 54.999999999999780, 10.000000000000000, 1.0000000000000000,
13053 8.0000000000000000, 0.89999999999999991 },
13054 };
13055
13056 // Test function for a=10.000000000000000, b=1.0000000000000000, c=8.0000000000000000.
13057 template <typename Tp>
13058 void test189()
13059 {
13060 const Tp eps = std::numeric_limits<Tp>::epsilon();
13061 Tp max_abs_diff = -Tp(1);
13062 Tp max_abs_frac = -Tp(1);
13063 unsigned int num_datum = sizeof(data189)
13064 / sizeof(testcase_hyperg<double>);
13065 for (unsigned int i = 0; i < num_datum; ++i)
13066 {
13067 const Tp f = std::tr1::hyperg(Tp(data189[i].a), Tp(data189[i].b),
13068 Tp(data189[i].c), Tp(data189[i].x));
13069 const Tp f0 = data189[i].f0;
13070 const Tp diff = f - f0;
13071 if (std::abs(diff) > max_abs_diff)
13072 max_abs_diff = std::abs(diff);
13073 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
13074 {
13075 const Tp frac = diff / f0;
13076 if (std::abs(frac) > max_abs_frac)
13077 max_abs_frac = std::abs(frac);
13078 }
13079 }
13080 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
13081 }
13082
13083 // Test data for a=10.000000000000000, b=1.0000000000000000, c=10.000000000000000.
13084 testcase_hyperg<double> data190[] = {
13085 { 0.52631578947368429, 10.000000000000000, 1.0000000000000000,
13086 10.000000000000000, -0.90000000000000002 },
13087 { 0.55555555555555558, 10.000000000000000, 1.0000000000000000,
13088 10.000000000000000, -0.80000000000000004 },
13089 { 0.58823529411764708, 10.000000000000000, 1.0000000000000000,
13090 10.000000000000000, -0.69999999999999996 },
13091 { 0.62500000000000000, 10.000000000000000, 1.0000000000000000,
13092 10.000000000000000, -0.59999999999999998 },
13093 { 0.66666666666666663, 10.000000000000000, 1.0000000000000000,
13094 10.000000000000000, -0.50000000000000000 },
13095 { 0.71428571428571430, 10.000000000000000, 1.0000000000000000,
13096 10.000000000000000, -0.40000000000000002 },
13097 { 0.76923076923076927, 10.000000000000000, 1.0000000000000000,
13098 10.000000000000000, -0.30000000000000004 },
13099 { 0.83333333333333337, 10.000000000000000, 1.0000000000000000,
13100 10.000000000000000, -0.19999999999999996 },
13101 { 0.90909090909090906, 10.000000000000000, 1.0000000000000000,
13102 10.000000000000000, -0.099999999999999978 },
13103 { 1.0000000000000000, 10.000000000000000, 1.0000000000000000,
13104 10.000000000000000, 0.0000000000000000 },
13105 { 1.1111111111111112, 10.000000000000000, 1.0000000000000000,
13106 10.000000000000000, 0.10000000000000009 },
13107 { 1.2500000000000000, 10.000000000000000, 1.0000000000000000,
13108 10.000000000000000, 0.19999999999999996 },
13109 { 1.4285714285714286, 10.000000000000000, 1.0000000000000000,
13110 10.000000000000000, 0.30000000000000004 },
13111 { 1.6666666666666663, 10.000000000000000, 1.0000000000000000,
13112 10.000000000000000, 0.39999999999999991 },
13113 { 2.0000000000000000, 10.000000000000000, 1.0000000000000000,
13114 10.000000000000000, 0.50000000000000000 },
13115 { 2.5000000000000004, 10.000000000000000, 1.0000000000000000,
13116 10.000000000000000, 0.60000000000000009 },
13117 { 3.3333333333333330, 10.000000000000000, 1.0000000000000000,
13118 10.000000000000000, 0.69999999999999996 },
13119 { 5.0000000000000009, 10.000000000000000, 1.0000000000000000,
13120 10.000000000000000, 0.80000000000000004 },
13121 { 9.9999999999999929, 10.000000000000000, 1.0000000000000000,
13122 10.000000000000000, 0.89999999999999991 },
13123 };
13124
13125 // Test function for a=10.000000000000000, b=1.0000000000000000, c=10.000000000000000.
13126 template <typename Tp>
13127 void test190()
13128 {
13129 const Tp eps = std::numeric_limits<Tp>::epsilon();
13130 Tp max_abs_diff = -Tp(1);
13131 Tp max_abs_frac = -Tp(1);
13132 unsigned int num_datum = sizeof(data190)
13133 / sizeof(testcase_hyperg<double>);
13134 for (unsigned int i = 0; i < num_datum; ++i)
13135 {
13136 const Tp f = std::tr1::hyperg(Tp(data190[i].a), Tp(data190[i].b),
13137 Tp(data190[i].c), Tp(data190[i].x));
13138 const Tp f0 = data190[i].f0;
13139 const Tp diff = f - f0;
13140 if (std::abs(diff) > max_abs_diff)
13141 max_abs_diff = std::abs(diff);
13142 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
13143 {
13144 const Tp frac = diff / f0;
13145 if (std::abs(frac) > max_abs_frac)
13146 max_abs_frac = std::abs(frac);
13147 }
13148 }
13149 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
13150 }
13151
13152 // Test data for a=10.000000000000000, b=2.0000000000000000, c=2.0000000000000000.
13153 testcase_hyperg<double> data191[] = {
13154 { 0.0016310376661280216, 10.000000000000000, 2.0000000000000000,
13155 2.0000000000000000, -0.90000000000000002 },
13156 { 0.0028007538972582421, 10.000000000000000, 2.0000000000000000,
13157 2.0000000000000000, -0.80000000000000004 },
13158 { 0.0049603324681551939, 10.000000000000000, 2.0000000000000000,
13159 2.0000000000000000, -0.69999999999999996 },
13160 { 0.0090949470177292789, 10.000000000000000, 2.0000000000000000,
13161 2.0000000000000000, -0.59999999999999998 },
13162 { 0.017341529915832606, 10.000000000000000, 2.0000000000000000,
13163 2.0000000000000000, -0.50000000000000000 },
13164 { 0.034571613033607777, 10.000000000000000, 2.0000000000000000,
13165 2.0000000000000000, -0.40000000000000002 },
13166 { 0.072538150286405714, 10.000000000000000, 2.0000000000000000,
13167 2.0000000000000000, -0.30000000000000004 },
13168 { 0.16150558288984579, 10.000000000000000, 2.0000000000000000,
13169 2.0000000000000000, -0.19999999999999996 },
13170 { 0.38554328942953148, 10.000000000000000, 2.0000000000000000,
13171 2.0000000000000000, -0.099999999999999978 },
13172 { 1.0000000000000000, 10.000000000000000, 2.0000000000000000,
13173 2.0000000000000000, 0.0000000000000000 },
13174 { 2.8679719907924444, 10.000000000000000, 2.0000000000000000,
13175 2.0000000000000000, 0.10000000000000009 },
13176 { 9.3132257461547816, 10.000000000000000, 2.0000000000000000,
13177 2.0000000000000000, 0.19999999999999996 },
13178 { 35.401331746414378, 10.000000000000000, 2.0000000000000000,
13179 2.0000000000000000, 0.30000000000000004 },
13180 { 165.38171687920172, 10.000000000000000, 2.0000000000000000,
13181 2.0000000000000000, 0.39999999999999991 },
13182 { 1024.0000000000000, 10.000000000000000, 2.0000000000000000,
13183 2.0000000000000000, 0.50000000000000000 },
13184 { 9536.7431640625200, 10.000000000000000, 2.0000000000000000,
13185 2.0000000000000000, 0.60000000000000009 },
13186 { 169350.87808430271, 10.000000000000000, 2.0000000000000000,
13187 2.0000000000000000, 0.69999999999999996 },
13188 { 9765624.9999999944, 10.000000000000000, 2.0000000000000000,
13189 2.0000000000000000, 0.80000000000000004 },
13190 { 9999999999.9999332, 10.000000000000000, 2.0000000000000000,
13191 2.0000000000000000, 0.89999999999999991 },
13192 };
13193
13194 // Test function for a=10.000000000000000, b=2.0000000000000000, c=2.0000000000000000.
13195 template <typename Tp>
13196 void test191()
13197 {
13198 const Tp eps = std::numeric_limits<Tp>::epsilon();
13199 Tp max_abs_diff = -Tp(1);
13200 Tp max_abs_frac = -Tp(1);
13201 unsigned int num_datum = sizeof(data191)
13202 / sizeof(testcase_hyperg<double>);
13203 for (unsigned int i = 0; i < num_datum; ++i)
13204 {
13205 const Tp f = std::tr1::hyperg(Tp(data191[i].a), Tp(data191[i].b),
13206 Tp(data191[i].c), Tp(data191[i].x));
13207 const Tp f0 = data191[i].f0;
13208 const Tp diff = f - f0;
13209 if (std::abs(diff) > max_abs_diff)
13210 max_abs_diff = std::abs(diff);
13211 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
13212 {
13213 const Tp frac = diff / f0;
13214 if (std::abs(frac) > max_abs_frac)
13215 max_abs_frac = std::abs(frac);
13216 }
13217 }
13218 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
13219 }
13220
13221 // Test data for a=10.000000000000000, b=2.0000000000000000, c=4.0000000000000000.
13222 testcase_hyperg<double> data192[] = {
13223 { 0.071191280690193509, 10.000000000000000, 2.0000000000000000,
13224 4.0000000000000000, -0.90000000000000002 },
13225 { 0.085646504654238079, 10.000000000000000, 2.0000000000000000,
13226 4.0000000000000000, -0.80000000000000004 },
13227 { 0.10478215656371073, 10.000000000000000, 2.0000000000000000,
13228 4.0000000000000000, -0.69999999999999996 },
13229 { 0.13074816337653575, 10.000000000000000, 2.0000000000000000,
13230 4.0000000000000000, -0.59999999999999998 },
13231 { 0.16701141666848116, 10.000000000000000, 2.0000000000000000,
13232 4.0000000000000000, -0.50000000000000000 },
13233 { 0.21939323375313971, 10.000000000000000, 2.0000000000000000,
13234 4.0000000000000000, -0.40000000000000002 },
13235 { 0.29813515331786627, 10.000000000000000, 2.0000000000000000,
13236 4.0000000000000000, -0.30000000000000004 },
13237 { 0.42225974638874386, 10.000000000000000, 2.0000000000000000,
13238 4.0000000000000000, -0.19999999999999996 },
13239 { 0.62942145962174867, 10.000000000000000, 2.0000000000000000,
13240 4.0000000000000000, -0.099999999999999978 },
13241 { 1.0000000000000000, 10.000000000000000, 2.0000000000000000,
13242 4.0000000000000000, 0.0000000000000000 },
13243 { 1.7218685262373197, 10.000000000000000, 2.0000000000000000,
13244 4.0000000000000000, 0.10000000000000009 },
13245 { 3.2855760483514689, 10.000000000000000, 2.0000000000000000,
13246 4.0000000000000000, 0.19999999999999996 },
13247 { 7.1616652508907093, 10.000000000000000, 2.0000000000000000,
13248 4.0000000000000000, 0.30000000000000004 },
13249 { 18.612326808485907, 10.000000000000000, 2.0000000000000000,
13250 4.0000000000000000, 0.39999999999999991 },
13251 { 61.476190476190474, 10.000000000000000, 2.0000000000000000,
13252 4.0000000000000000, 0.50000000000000000 },
13253 { 286.27580915178623, 10.000000000000000, 2.0000000000000000,
13254 4.0000000000000000, 0.60000000000000009 },
13255 { 2274.9441142102296, 10.000000000000000, 2.0000000000000000,
13256 4.0000000000000000, 0.69999999999999996 },
13257 { 47229.761904761865, 10.000000000000000, 2.0000000000000000,
13258 4.0000000000000000, 0.80000000000000004 },
13259 { 9961460.7142856438, 10.000000000000000, 2.0000000000000000,
13260 4.0000000000000000, 0.89999999999999991 },
13261 };
13262
13263 // Test function for a=10.000000000000000, b=2.0000000000000000, c=4.0000000000000000.
13264 template <typename Tp>
13265 void test192()
13266 {
13267 const Tp eps = std::numeric_limits<Tp>::epsilon();
13268 Tp max_abs_diff = -Tp(1);
13269 Tp max_abs_frac = -Tp(1);
13270 unsigned int num_datum = sizeof(data192)
13271 / sizeof(testcase_hyperg<double>);
13272 for (unsigned int i = 0; i < num_datum; ++i)
13273 {
13274 const Tp f = std::tr1::hyperg(Tp(data192[i].a), Tp(data192[i].b),
13275 Tp(data192[i].c), Tp(data192[i].x));
13276 const Tp f0 = data192[i].f0;
13277 const Tp diff = f - f0;
13278 if (std::abs(diff) > max_abs_diff)
13279 max_abs_diff = std::abs(diff);
13280 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
13281 {
13282 const Tp frac = diff / f0;
13283 if (std::abs(frac) > max_abs_frac)
13284 max_abs_frac = std::abs(frac);
13285 }
13286 }
13287 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
13288 }
13289
13290 // Test data for a=10.000000000000000, b=2.0000000000000000, c=6.0000000000000000.
13291 testcase_hyperg<double> data193[] = {
13292 { 0.14747230019381052, 10.000000000000000, 2.0000000000000000,
13293 6.0000000000000000, -0.90000000000000002 },
13294 { 0.17073600100690603, 10.000000000000000, 2.0000000000000000,
13295 6.0000000000000000, -0.80000000000000004 },
13296 { 0.19982795745135354, 10.000000000000000, 2.0000000000000000,
13297 6.0000000000000000, -0.69999999999999996 },
13298 { 0.23681776864188067, 10.000000000000000, 2.0000000000000000,
13299 6.0000000000000000, -0.59999999999999998 },
13300 { 0.28475624360398022, 10.000000000000000, 2.0000000000000000,
13301 6.0000000000000000, -0.50000000000000000 },
13302 { 0.34827500743063144, 10.000000000000000, 2.0000000000000000,
13303 6.0000000000000000, -0.40000000000000002 },
13304 { 0.43464829159684681, 10.000000000000000, 2.0000000000000000,
13305 6.0000000000000000, -0.30000000000000004 },
13306 { 0.55576053438064787, 10.000000000000000, 2.0000000000000000,
13307 6.0000000000000000, -0.19999999999999996 },
13308 { 0.73195020913445485, 10.000000000000000, 2.0000000000000000,
13309 6.0000000000000000, -0.099999999999999978 },
13310 { 1.0000000000000000, 10.000000000000000, 2.0000000000000000,
13311 6.0000000000000000, 0.0000000000000000 },
13312 { 1.4310223867822929, 10.000000000000000, 2.0000000000000000,
13313 6.0000000000000000, 0.10000000000000009 },
13314 { 2.1742563399057540, 10.000000000000000, 2.0000000000000000,
13315 6.0000000000000000, 0.19999999999999996 },
13316 { 3.5769231236256043, 10.000000000000000, 2.0000000000000000,
13317 6.0000000000000000, 0.30000000000000004 },
13318 { 6.5620441134844363, 10.000000000000000, 2.0000000000000000,
13319 6.0000000000000000, 0.39999999999999991 },
13320 { 14.063492063492063, 10.000000000000000, 2.0000000000000000,
13321 6.0000000000000000, 0.50000000000000000 },
13322 { 38.085937500000036, 10.000000000000000, 2.0000000000000000,
13323 6.0000000000000000, 0.60000000000000009 },
13324 { 150.92973632068282, 10.000000000000000, 2.0000000000000000,
13325 6.0000000000000000, 0.69999999999999996 },
13326 { 1212.3015873015852, 10.000000000000000, 2.0000000000000000,
13327 6.0000000000000000, 0.80000000000000004 },
13328 { 55107.142857142389, 10.000000000000000, 2.0000000000000000,
13329 6.0000000000000000, 0.89999999999999991 },
13330 };
13331
13332 // Test function for a=10.000000000000000, b=2.0000000000000000, c=6.0000000000000000.
13333 template <typename Tp>
13334 void test193()
13335 {
13336 const Tp eps = std::numeric_limits<Tp>::epsilon();
13337 Tp max_abs_diff = -Tp(1);
13338 Tp max_abs_frac = -Tp(1);
13339 unsigned int num_datum = sizeof(data193)
13340 / sizeof(testcase_hyperg<double>);
13341 for (unsigned int i = 0; i < num_datum; ++i)
13342 {
13343 const Tp f = std::tr1::hyperg(Tp(data193[i].a), Tp(data193[i].b),
13344 Tp(data193[i].c), Tp(data193[i].x));
13345 const Tp f0 = data193[i].f0;
13346 const Tp diff = f - f0;
13347 if (std::abs(diff) > max_abs_diff)
13348 max_abs_diff = std::abs(diff);
13349 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
13350 {
13351 const Tp frac = diff / f0;
13352 if (std::abs(frac) > max_abs_frac)
13353 max_abs_frac = std::abs(frac);
13354 }
13355 }
13356 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
13357 }
13358
13359 // Test data for a=10.000000000000000, b=2.0000000000000000, c=8.0000000000000000.
13360 testcase_hyperg<double> data194[] = {
13361 { 0.21658059714090588, 10.000000000000000, 2.0000000000000000,
13362 8.0000000000000000, -0.90000000000000002 },
13363 { 0.24513539602702844, 10.000000000000000, 2.0000000000000000,
13364 8.0000000000000000, -0.80000000000000004 },
13365 { 0.27967018274845046, 10.000000000000000, 2.0000000000000000,
13366 8.0000000000000000, -0.69999999999999996 },
13367 { 0.32196044921874994, 10.000000000000000, 2.0000000000000000,
13368 8.0000000000000000, -0.59999999999999998 },
13369 { 0.37448559670781900, 10.000000000000000, 2.0000000000000000,
13370 8.0000000000000000, -0.50000000000000000 },
13371 { 0.44078856032208796, 10.000000000000000, 2.0000000000000000,
13372 8.0000000000000000, -0.40000000000000002 },
13373 { 0.52606701446027815, 10.000000000000000, 2.0000000000000000,
13374 8.0000000000000000, -0.30000000000000004 },
13375 { 0.63818158436214001, 10.000000000000000, 2.0000000000000000,
13376 8.0000000000000000, -0.19999999999999996 },
13377 { 0.78944971882612769, 10.000000000000000, 2.0000000000000000,
13378 8.0000000000000000, -0.099999999999999978 },
13379 { 1.0000000000000000, 10.000000000000000, 2.0000000000000000,
13380 8.0000000000000000, 0.0000000000000000 },
13381 { 1.3044251384443430, 10.000000000000000, 2.0000000000000000,
13382 8.0000000000000000, 0.10000000000000009 },
13383 { 1.7659505208333335, 10.000000000000000, 2.0000000000000000,
13384 8.0000000000000000, 0.19999999999999996 },
13385 { 2.5093710953769270, 10.000000000000000, 2.0000000000000000,
13386 8.0000000000000000, 0.30000000000000004 },
13387 { 3.8065843621399158, 10.000000000000000, 2.0000000000000000,
13388 8.0000000000000000, 0.39999999999999991 },
13389 { 6.3333333333333313, 10.000000000000000, 2.0000000000000000,
13390 8.0000000000000000, 0.50000000000000000 },
13391 { 12.109375000000004, 10.000000000000000, 2.0000000000000000,
13392 8.0000000000000000, 0.60000000000000009 },
13393 { 29.115226337448540, 10.000000000000000, 2.0000000000000000,
13394 8.0000000000000000, 0.69999999999999996 },
13395 { 108.33333333333330, 10.000000000000000, 2.0000000000000000,
13396 8.0000000000000000, 0.80000000000000004 },
13397 { 1224.9999999999923, 10.000000000000000, 2.0000000000000000,
13398 8.0000000000000000, 0.89999999999999991 },
13399 };
13400
13401 // Test function for a=10.000000000000000, b=2.0000000000000000, c=8.0000000000000000.
13402 template <typename Tp>
13403 void test194()
13404 {
13405 const Tp eps = std::numeric_limits<Tp>::epsilon();
13406 Tp max_abs_diff = -Tp(1);
13407 Tp max_abs_frac = -Tp(1);
13408 unsigned int num_datum = sizeof(data194)
13409 / sizeof(testcase_hyperg<double>);
13410 for (unsigned int i = 0; i < num_datum; ++i)
13411 {
13412 const Tp f = std::tr1::hyperg(Tp(data194[i].a), Tp(data194[i].b),
13413 Tp(data194[i].c), Tp(data194[i].x));
13414 const Tp f0 = data194[i].f0;
13415 const Tp diff = f - f0;
13416 if (std::abs(diff) > max_abs_diff)
13417 max_abs_diff = std::abs(diff);
13418 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
13419 {
13420 const Tp frac = diff / f0;
13421 if (std::abs(frac) > max_abs_frac)
13422 max_abs_frac = std::abs(frac);
13423 }
13424 }
13425 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
13426 }
13427
13428 // Test data for a=10.000000000000000, b=2.0000000000000000, c=10.000000000000000.
13429 testcase_hyperg<double> data195[] = {
13430 { 0.27700831024930750, 10.000000000000000, 2.0000000000000000,
13431 10.000000000000000, -0.90000000000000002 },
13432 { 0.30864197530864196, 10.000000000000000, 2.0000000000000000,
13433 10.000000000000000, -0.80000000000000004 },
13434 { 0.34602076124567477, 10.000000000000000, 2.0000000000000000,
13435 10.000000000000000, -0.69999999999999996 },
13436 { 0.39062499999999994, 10.000000000000000, 2.0000000000000000,
13437 10.000000000000000, -0.59999999999999998 },
13438 { 0.44444444444444442, 10.000000000000000, 2.0000000000000000,
13439 10.000000000000000, -0.50000000000000000 },
13440 { 0.51020408163265307, 10.000000000000000, 2.0000000000000000,
13441 10.000000000000000, -0.40000000000000002 },
13442 { 0.59171597633136097, 10.000000000000000, 2.0000000000000000,
13443 10.000000000000000, -0.30000000000000004 },
13444 { 0.69444444444444453, 10.000000000000000, 2.0000000000000000,
13445 10.000000000000000, -0.19999999999999996 },
13446 { 0.82644628099173545, 10.000000000000000, 2.0000000000000000,
13447 10.000000000000000, -0.099999999999999978 },
13448 { 1.0000000000000000, 10.000000000000000, 2.0000000000000000,
13449 10.000000000000000, 0.0000000000000000 },
13450 { 1.2345679012345681, 10.000000000000000, 2.0000000000000000,
13451 10.000000000000000, 0.10000000000000009 },
13452 { 1.5624999999999998, 10.000000000000000, 2.0000000000000000,
13453 10.000000000000000, 0.19999999999999996 },
13454 { 2.0408163265306127, 10.000000000000000, 2.0000000000000000,
13455 10.000000000000000, 0.30000000000000004 },
13456 { 2.7777777777777768, 10.000000000000000, 2.0000000000000000,
13457 10.000000000000000, 0.39999999999999991 },
13458 { 4.0000000000000000, 10.000000000000000, 2.0000000000000000,
13459 10.000000000000000, 0.50000000000000000 },
13460 { 6.2500000000000036, 10.000000000000000, 2.0000000000000000,
13461 10.000000000000000, 0.60000000000000009 },
13462 { 11.111111111111109, 10.000000000000000, 2.0000000000000000,
13463 10.000000000000000, 0.69999999999999996 },
13464 { 25.000000000000007, 10.000000000000000, 2.0000000000000000,
13465 10.000000000000000, 0.80000000000000004 },
13466 { 99.999999999999872, 10.000000000000000, 2.0000000000000000,
13467 10.000000000000000, 0.89999999999999991 },
13468 };
13469
13470 // Test function for a=10.000000000000000, b=2.0000000000000000, c=10.000000000000000.
13471 template <typename Tp>
13472 void test195()
13473 {
13474 const Tp eps = std::numeric_limits<Tp>::epsilon();
13475 Tp max_abs_diff = -Tp(1);
13476 Tp max_abs_frac = -Tp(1);
13477 unsigned int num_datum = sizeof(data195)
13478 / sizeof(testcase_hyperg<double>);
13479 for (unsigned int i = 0; i < num_datum; ++i)
13480 {
13481 const Tp f = std::tr1::hyperg(Tp(data195[i].a), Tp(data195[i].b),
13482 Tp(data195[i].c), Tp(data195[i].x));
13483 const Tp f0 = data195[i].f0;
13484 const Tp diff = f - f0;
13485 if (std::abs(diff) > max_abs_diff)
13486 max_abs_diff = std::abs(diff);
13487 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
13488 {
13489 const Tp frac = diff / f0;
13490 if (std::abs(frac) > max_abs_frac)
13491 max_abs_frac = std::abs(frac);
13492 }
13493 }
13494 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
13495 }
13496
13497 // Test data for a=10.000000000000000, b=5.0000000000000000, c=2.0000000000000000.
13498 testcase_hyperg<double> data196[] = {
13499 { 0.00063586451658060152, 10.000000000000000, 5.0000000000000000,
13500 2.0000000000000000, -0.90000000000000002 },
13501 { 0.0010334743461762443, 10.000000000000000, 5.0000000000000000,
13502 2.0000000000000000, -0.80000000000000004 },
13503 { 0.0015326246054669515, 10.000000000000000, 5.0000000000000000,
13504 2.0000000000000000, -0.69999999999999996 },
13505 { 0.0019007018181583387, 10.000000000000000, 5.0000000000000000,
13506 2.0000000000000000, -0.59999999999999998 },
13507 { 0.0012845577715431577, 10.000000000000000, 5.0000000000000000,
13508 2.0000000000000000, -0.50000000000000000 },
13509 { -0.0027213806178058826, 10.000000000000000, 5.0000000000000000,
13510 2.0000000000000000, -0.40000000000000002 },
13511 { -0.015121744574954068, 10.000000000000000, 5.0000000000000000,
13512 2.0000000000000000, -0.30000000000000004 },
13513 { -0.036637840562974443, 10.000000000000000, 5.0000000000000000,
13514 2.0000000000000000, -0.19999999999999996 },
13515 { 0.019117849062621491, 10.000000000000000, 5.0000000000000000,
13516 2.0000000000000000, -0.099999999999999978 },
13517 { 1.0000000000000000, 10.000000000000000, 5.0000000000000000,
13518 2.0000000000000000, 0.0000000000000000 },
13519 { 9.8116901852350615, 10.000000000000000, 5.0000000000000000,
13520 2.0000000000000000, 0.10000000000000009 },
13521 { 84.255589172244044, 10.000000000000000, 5.0000000000000000,
13522 2.0000000000000000, 0.19999999999999996 },
13523 { 773.87517619421294, 10.000000000000000, 5.0000000000000000,
13524 2.0000000000000000, 0.30000000000000004 },
13525 { 8556.9725363053585, 10.000000000000000, 5.0000000000000000,
13526 2.0000000000000000, 0.39999999999999991 },
13527 { 129023.99999999996, 10.000000000000000, 5.0000000000000000,
13528 2.0000000000000000, 0.50000000000000000 },
13529 { 3174543.3807373112, 10.000000000000000, 5.0000000000000000,
13530 2.0000000000000000, 0.60000000000000009 },
13531 { 175133896.95814410, 10.000000000000000, 5.0000000000000000,
13532 2.0000000000000000, 0.69999999999999996 },
13533 { 43564453125.000061, 10.000000000000000, 5.0000000000000000,
13534 2.0000000000000000, 0.80000000000000004 },
13535 { 446859999999993.50, 10.000000000000000, 5.0000000000000000,
13536 2.0000000000000000, 0.89999999999999991 },
13537 };
13538
13539 // Test function for a=10.000000000000000, b=5.0000000000000000, c=2.0000000000000000.
13540 template <typename Tp>
13541 void test196()
13542 {
13543 const Tp eps = std::numeric_limits<Tp>::epsilon();
13544 Tp max_abs_diff = -Tp(1);
13545 Tp max_abs_frac = -Tp(1);
13546 unsigned int num_datum = sizeof(data196)
13547 / sizeof(testcase_hyperg<double>);
13548 for (unsigned int i = 0; i < num_datum; ++i)
13549 {
13550 const Tp f = std::tr1::hyperg(Tp(data196[i].a), Tp(data196[i].b),
13551 Tp(data196[i].c), Tp(data196[i].x));
13552 const Tp f0 = data196[i].f0;
13553 const Tp diff = f - f0;
13554 if (std::abs(diff) > max_abs_diff)
13555 max_abs_diff = std::abs(diff);
13556 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
13557 {
13558 const Tp frac = diff / f0;
13559 if (std::abs(frac) > max_abs_frac)
13560 max_abs_frac = std::abs(frac);
13561 }
13562 }
13563 VERIFY(max_abs_frac < Tp(1.0000000000000006e-11));
13564 }
13565
13566 // Test data for a=10.000000000000000, b=5.0000000000000000, c=4.0000000000000000.
13567 testcase_hyperg<double> data197[] = {
13568 { -0.00030045430691819899, 10.000000000000000, 5.0000000000000000,
13569 4.0000000000000000, -0.90000000000000002 },
13570 { -0.00031119487747328581, 10.000000000000000, 5.0000000000000000,
13571 4.0000000000000000, -0.80000000000000004 },
13572 { -0.00014589213141649274, 10.000000000000000, 5.0000000000000000,
13573 4.0000000000000000, -0.69999999999999996 },
13574 { 0.00056843418860809121, 10.000000000000000, 5.0000000000000000,
13575 4.0000000000000000, -0.59999999999999998 },
13576 { 0.0028902549859721725, 10.000000000000000, 5.0000000000000000,
13577 4.0000000000000000, -0.50000000000000000 },
13578 { 0.0098776037238877470, 10.000000000000000, 5.0000000000000000,
13579 4.0000000000000000, -0.40000000000000002 },
13580 { 0.030689217428863914, 10.000000000000000, 5.0000000000000000,
13581 4.0000000000000000, -0.30000000000000004 },
13582 { 0.094211590019076599, 10.000000000000000, 5.0000000000000000,
13583 4.0000000000000000, -0.19999999999999996 },
13584 { 0.29791981455918376, 10.000000000000000, 5.0000000000000000,
13585 4.0000000000000000, -0.099999999999999978 },
13586 { 1.0000000000000000, 10.000000000000000, 5.0000000000000000,
13587 4.0000000000000000, 0.0000000000000000 },
13588 { 3.6646308771236793, 10.000000000000000, 5.0000000000000000,
13589 4.0000000000000000, 0.10000000000000009 },
13590 { 15.133991837501521, 10.000000000000000, 5.0000000000000000,
13591 4.0000000000000000, 0.19999999999999996 },
13592 { 73.331330046144089, 10.000000000000000, 5.0000000000000000,
13593 4.0000000000000000, 0.30000000000000004 },
13594 { 441.01791167787133, 10.000000000000000, 5.0000000000000000,
13595 4.0000000000000000, 0.39999999999999991 },
13596 { 3583.9999999999991, 10.000000000000000, 5.0000000000000000,
13597 4.0000000000000000, 0.50000000000000000 },
13598 { 45299.530029296984, 10.000000000000000, 5.0000000000000000,
13599 4.0000000000000000, 0.60000000000000009 },
13600 { 1157231.0002427341, 10.000000000000000, 5.0000000000000000,
13601 4.0000000000000000, 0.69999999999999996 },
13602 { 107421875.00000016, 10.000000000000000, 5.0000000000000000,
13603 4.0000000000000000, 0.80000000000000004 },
13604 { 234999999999.99734, 10.000000000000000, 5.0000000000000000,
13605 4.0000000000000000, 0.89999999999999991 },
13606 };
13607
13608 // Test function for a=10.000000000000000, b=5.0000000000000000, c=4.0000000000000000.
13609 template <typename Tp>
13610 void test197()
13611 {
13612 const Tp eps = std::numeric_limits<Tp>::epsilon();
13613 Tp max_abs_diff = -Tp(1);
13614 Tp max_abs_frac = -Tp(1);
13615 unsigned int num_datum = sizeof(data197)
13616 / sizeof(testcase_hyperg<double>);
13617 for (unsigned int i = 0; i < num_datum; ++i)
13618 {
13619 const Tp f = std::tr1::hyperg(Tp(data197[i].a), Tp(data197[i].b),
13620 Tp(data197[i].c), Tp(data197[i].x));
13621 const Tp f0 = data197[i].f0;
13622 const Tp diff = f - f0;
13623 if (std::abs(diff) > max_abs_diff)
13624 max_abs_diff = std::abs(diff);
13625 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
13626 {
13627 const Tp frac = diff / f0;
13628 if (std::abs(frac) > max_abs_frac)
13629 max_abs_frac = std::abs(frac);
13630 }
13631 }
13632 VERIFY(max_abs_frac < Tp(2.5000000000000014e-11));
13633 }
13634
13635 // Test data for a=10.000000000000000, b=5.0000000000000000, c=6.0000000000000000.
13636 testcase_hyperg<double> data198[] = {
13637 { 0.0058530497315411210, 10.000000000000000, 5.0000000000000000,
13638 6.0000000000000000, -0.90000000000000002 },
13639 { 0.0088526869356855692, 10.000000000000000, 5.0000000000000000,
13640 6.0000000000000000, -0.80000000000000004 },
13641 { 0.013770987983443108, 10.000000000000000, 5.0000000000000000,
13642 6.0000000000000000, -0.69999999999999996 },
13643 { 0.022108932690960800, 10.000000000000000, 5.0000000000000000,
13644 6.0000000000000000, -0.59999999999999998 },
13645 { 0.036786236450921578, 10.000000000000000, 5.0000000000000000,
13646 6.0000000000000000, -0.50000000000000000 },
13647 { 0.063750669040426422, 10.000000000000000, 5.0000000000000000,
13648 6.0000000000000000, -0.40000000000000002 },
13649 { 0.11577228680714464, 10.000000000000000, 5.0000000000000000,
13650 6.0000000000000000, -0.30000000000000004 },
13651 { 0.22197573416125735, 10.000000000000000, 5.0000000000000000,
13652 6.0000000000000000, -0.19999999999999996 },
13653 { 0.45361312968415268, 10.000000000000000, 5.0000000000000000,
13654 6.0000000000000000, -0.099999999999999978 },
13655 { 1.0000000000000000, 10.000000000000000, 5.0000000000000000,
13656 6.0000000000000000, 0.0000000000000000 },
13657 { 2.4162889363082747, 10.000000000000000, 5.0000000000000000,
13658 6.0000000000000000, 0.10000000000000009 },
13659 { 6.5381564791240399, 10.000000000000000, 5.0000000000000000,
13660 6.0000000000000000, 0.19999999999999996 },
13661 { 20.415771011498428, 10.000000000000000, 5.0000000000000000,
13662 6.0000000000000000, 0.30000000000000004 },
13663 { 76.870682056629221, 10.000000000000000, 5.0000000000000000,
13664 6.0000000000000000, 0.39999999999999991 },
13665 { 373.58730158730162, 10.000000000000000, 5.0000000000000000,
13666 6.0000000000000000, 0.50000000000000000 },
13667 { 2626.2555803571477, 10.000000000000000, 5.0000000000000000,
13668 6.0000000000000000, 0.60000000000000009 },
13669 { 33060.960671081048, 10.000000000000000, 5.0000000000000000,
13670 6.0000000000000000, 0.69999999999999996 },
13671 { 1203521.8253968258, 10.000000000000000, 5.0000000000000000,
13672 6.0000000000000000, 0.80000000000000004 },
13673 { 584564285.71427989, 10.000000000000000, 5.0000000000000000,
13674 6.0000000000000000, 0.89999999999999991 },
13675 };
13676
13677 // Test function for a=10.000000000000000, b=5.0000000000000000, c=6.0000000000000000.
13678 template <typename Tp>
13679 void test198()
13680 {
13681 const Tp eps = std::numeric_limits<Tp>::epsilon();
13682 Tp max_abs_diff = -Tp(1);
13683 Tp max_abs_frac = -Tp(1);
13684 unsigned int num_datum = sizeof(data198)
13685 / sizeof(testcase_hyperg<double>);
13686 for (unsigned int i = 0; i < num_datum; ++i)
13687 {
13688 const Tp f = std::tr1::hyperg(Tp(data198[i].a), Tp(data198[i].b),
13689 Tp(data198[i].c), Tp(data198[i].x));
13690 const Tp f0 = data198[i].f0;
13691 const Tp diff = f - f0;
13692 if (std::abs(diff) > max_abs_diff)
13693 max_abs_diff = std::abs(diff);
13694 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
13695 {
13696 const Tp frac = diff / f0;
13697 if (std::abs(frac) > max_abs_frac)
13698 max_abs_frac = std::abs(frac);
13699 }
13700 }
13701 VERIFY(max_abs_frac < Tp(2.5000000000000015e-12));
13702 }
13703
13704 // Test data for a=10.000000000000000, b=5.0000000000000000, c=8.0000000000000000.
13705 testcase_hyperg<double> data199[] = {
13706 { 0.020248990107069400, 10.000000000000000, 5.0000000000000000,
13707 8.0000000000000000, -0.90000000000000002 },
13708 { 0.027876687750502421, 10.000000000000000, 5.0000000000000000,
13709 8.0000000000000000, -0.80000000000000004 },
13710 { 0.039154648888447781, 10.000000000000000, 5.0000000000000000,
13711 8.0000000000000000, -0.69999999999999996 },
13712 { 0.056251883506774923, 10.000000000000000, 5.0000000000000000,
13713 8.0000000000000000, -0.59999999999999998 },
13714 { 0.082914189910074432, 10.000000000000000, 5.0000000000000000,
13715 8.0000000000000000, -0.50000000000000000 },
13716 { 0.12585357817786477, 10.000000000000000, 5.0000000000000000,
13717 8.0000000000000000, -0.40000000000000002 },
13718 { 0.19761423206224929, 10.000000000000000, 5.0000000000000000,
13719 8.0000000000000000, -0.30000000000000004 },
13720 { 0.32280443863359243, 10.000000000000000, 5.0000000000000000,
13721 8.0000000000000000, -0.19999999999999996 },
13722 { 0.55250024062839465, 10.000000000000000, 5.0000000000000000,
13723 8.0000000000000000, -0.099999999999999978 },
13724 { 1.0000000000000000, 10.000000000000000, 5.0000000000000000,
13725 8.0000000000000000, 0.0000000000000000 },
13726 { 1.9374297986599267, 10.000000000000000, 5.0000000000000000,
13727 8.0000000000000000, 0.10000000000000009 },
13728 { 4.0849049886067696, 10.000000000000000, 5.0000000000000000,
13729 8.0000000000000000, 0.19999999999999996 },
13730 { 9.5926988633258983, 10.000000000000000, 5.0000000000000000,
13731 8.0000000000000000, 0.30000000000000004 },
13732 { 25.958314281359531, 10.000000000000000, 5.0000000000000000,
13733 8.0000000000000000, 0.39999999999999991 },
13734 { 85.333333333333300, 10.000000000000000, 5.0000000000000000,
13735 8.0000000000000000, 0.50000000000000000 },
13736 { 372.31445312500028, 10.000000000000000, 5.0000000000000000,
13737 8.0000000000000000, 0.60000000000000009 },
13738 { 2545.3436976070675, 10.000000000000000, 5.0000000000000000,
13739 8.0000000000000000, 0.69999999999999996 },
13740 { 39583.333333333343, 10.000000000000000, 5.0000000000000000,
13741 8.0000000000000000, 0.80000000000000004 },
13742 { 4599999.9999999627, 10.000000000000000, 5.0000000000000000,
13743 8.0000000000000000, 0.89999999999999991 },
13744 };
13745
13746 // Test function for a=10.000000000000000, b=5.0000000000000000, c=8.0000000000000000.
13747 template <typename Tp>
13748 void test199()
13749 {
13750 const Tp eps = std::numeric_limits<Tp>::epsilon();
13751 Tp max_abs_diff = -Tp(1);
13752 Tp max_abs_frac = -Tp(1);
13753 unsigned int num_datum = sizeof(data199)
13754 / sizeof(testcase_hyperg<double>);
13755 for (unsigned int i = 0; i < num_datum; ++i)
13756 {
13757 const Tp f = std::tr1::hyperg(Tp(data199[i].a), Tp(data199[i].b),
13758 Tp(data199[i].c), Tp(data199[i].x));
13759 const Tp f0 = data199[i].f0;
13760 const Tp diff = f - f0;
13761 if (std::abs(diff) > max_abs_diff)
13762 max_abs_diff = std::abs(diff);
13763 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
13764 {
13765 const Tp frac = diff / f0;
13766 if (std::abs(frac) > max_abs_frac)
13767 max_abs_frac = std::abs(frac);
13768 }
13769 }
13770 VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
13771 }
13772
13773 // Test data for a=10.000000000000000, b=5.0000000000000000, c=10.000000000000000.
13774 testcase_hyperg<double> data200[] = {
13775 { 0.040386107340619266, 10.000000000000000, 5.0000000000000000,
13776 10.000000000000000, -0.90000000000000002 },
13777 { 0.052922149401344633, 10.000000000000000, 5.0000000000000000,
13778 10.000000000000000, -0.80000000000000004 },
13779 { 0.070429627772374270, 10.000000000000000, 5.0000000000000000,
13780 10.000000000000000, -0.69999999999999996 },
13781 { 0.095367431640624972, 10.000000000000000, 5.0000000000000000,
13782 10.000000000000000, -0.59999999999999998 },
13783 { 0.13168724279835387, 10.000000000000000, 5.0000000000000000,
13784 10.000000000000000, -0.50000000000000000 },
13785 { 0.18593443208187066, 10.000000000000000, 5.0000000000000000,
13786 10.000000000000000, -0.40000000000000002 },
13787 { 0.26932907434290437, 10.000000000000000, 5.0000000000000000,
13788 10.000000000000000, -0.30000000000000004 },
13789 { 0.40187757201646096, 10.000000000000000, 5.0000000000000000,
13790 10.000000000000000, -0.19999999999999996 },
13791 { 0.62092132305915493, 10.000000000000000, 5.0000000000000000,
13792 10.000000000000000, -0.099999999999999978 },
13793 { 1.0000000000000000, 10.000000000000000, 5.0000000000000000,
13794 10.000000000000000, 0.0000000000000000 },
13795 { 1.6935087808430296, 10.000000000000000, 5.0000000000000000,
13796 10.000000000000000, 0.10000000000000009 },
13797 { 3.0517578124999991, 10.000000000000000, 5.0000000000000000,
13798 10.000000000000000, 0.19999999999999996 },
13799 { 5.9499018266198629, 10.000000000000000, 5.0000000000000000,
13800 10.000000000000000, 0.30000000000000004 },
13801 { 12.860082304526737, 10.000000000000000, 5.0000000000000000,
13802 10.000000000000000, 0.39999999999999991 },
13803 { 32.000000000000000, 10.000000000000000, 5.0000000000000000,
13804 10.000000000000000, 0.50000000000000000 },
13805 { 97.656250000000114, 10.000000000000000, 5.0000000000000000,
13806 10.000000000000000, 0.60000000000000009 },
13807 { 411.52263374485580, 10.000000000000000, 5.0000000000000000,
13808 10.000000000000000, 0.69999999999999996 },
13809 { 3124.9999999999991, 10.000000000000000, 5.0000000000000000,
13810 10.000000000000000, 0.80000000000000004 },
13811 { 99999.999999999665, 10.000000000000000, 5.0000000000000000,
13812 10.000000000000000, 0.89999999999999991 },
13813 };
13814
13815 // Test function for a=10.000000000000000, b=5.0000000000000000, c=10.000000000000000.
13816 template <typename Tp>
13817 void test200()
13818 {
13819 const Tp eps = std::numeric_limits<Tp>::epsilon();
13820 Tp max_abs_diff = -Tp(1);
13821 Tp max_abs_frac = -Tp(1);
13822 unsigned int num_datum = sizeof(data200)
13823 / sizeof(testcase_hyperg<double>);
13824 for (unsigned int i = 0; i < num_datum; ++i)
13825 {
13826 const Tp f = std::tr1::hyperg(Tp(data200[i].a), Tp(data200[i].b),
13827 Tp(data200[i].c), Tp(data200[i].x));
13828 const Tp f0 = data200[i].f0;
13829 const Tp diff = f - f0;
13830 if (std::abs(diff) > max_abs_diff)
13831 max_abs_diff = std::abs(diff);
13832 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
13833 {
13834 const Tp frac = diff / f0;
13835 if (std::abs(frac) > max_abs_frac)
13836 max_abs_frac = std::abs(frac);
13837 }
13838 }
13839 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
13840 }
13841
13842 // Test data for a=10.000000000000000, b=10.000000000000000, c=2.0000000000000000.
13843 testcase_hyperg<double> data201[] = {
13844 { 2.3388730079478623e-05, 10.000000000000000, 10.000000000000000,
13845 2.0000000000000000, -0.90000000000000002 },
13846 { -2.3204970759807341e-05, 10.000000000000000, 10.000000000000000,
13847 2.0000000000000000, -0.80000000000000004 },
13848 { -0.00016219730505520291, 10.000000000000000, 10.000000000000000,
13849 2.0000000000000000, -0.69999999999999996 },
13850 { -0.00044366962360925706, 10.000000000000000, 10.000000000000000,
13851 2.0000000000000000, -0.59999999999999998 },
13852 { -0.00071863577205454770, 10.000000000000000, 10.000000000000000,
13853 2.0000000000000000, -0.50000000000000000 },
13854 { 4.4378596544453810e-05, 10.000000000000000, 10.000000000000000,
13855 2.0000000000000000, -0.40000000000000002 },
13856 { 0.0044446568070623570, 10.000000000000000, 10.000000000000000,
13857 2.0000000000000000, -0.30000000000000004 },
13858 { 0.0071045155183571103, 10.000000000000000, 10.000000000000000,
13859 2.0000000000000000, -0.19999999999999996 },
13860 { -0.049961558159890146, 10.000000000000000, 10.000000000000000,
13861 2.0000000000000000, -0.099999999999999978 },
13862 { 1.0000000000000000, 10.000000000000000, 10.000000000000000,
13863 2.0000000000000000, 0.0000000000000000 },
13864 { 51.305449964107403, 10.000000000000000, 10.000000000000000,
13865 2.0000000000000000, 0.10000000000000009 },
13866 { 1435.9545414461309, 10.000000000000000, 10.000000000000000,
13867 2.0000000000000000, 0.19999999999999996 },
13868 { 39657.913058984115, 10.000000000000000, 10.000000000000000,
13869 2.0000000000000000, 0.30000000000000004 },
13870 { 1346016.4468570501, 10.000000000000000, 10.000000000000000,
13871 2.0000000000000000, 0.39999999999999991 },
13872 { 68086556.444444403, 10.000000000000000, 10.000000000000000,
13873 2.0000000000000000, 0.50000000000000000 },
13874 { 6646235808.7301531, 10.000000000000000, 10.000000000000000,
13875 2.0000000000000000, 0.60000000000000009 },
13876 { 1954852335479.9702, 10.000000000000000, 10.000000000000000,
13877 2.0000000000000000, 0.69999999999999996 },
13878 { 4573796225043418.0, 10.000000000000000, 10.000000000000000,
13879 2.0000000000000000, 0.80000000000000004 },
13880 { 1.8280190368899683e+21, 10.000000000000000, 10.000000000000000,
13881 2.0000000000000000, 0.89999999999999991 },
13882 };
13883
13884 // Test function for a=10.000000000000000, b=10.000000000000000, c=2.0000000000000000.
13885 template <typename Tp>
13886 void test201()
13887 {
13888 const Tp eps = std::numeric_limits<Tp>::epsilon();
13889 Tp max_abs_diff = -Tp(1);
13890 Tp max_abs_frac = -Tp(1);
13891 unsigned int num_datum = sizeof(data201)
13892 / sizeof(testcase_hyperg<double>);
13893 for (unsigned int i = 0; i < num_datum; ++i)
13894 {
13895 const Tp f = std::tr1::hyperg(Tp(data201[i].a), Tp(data201[i].b),
13896 Tp(data201[i].c), Tp(data201[i].x));
13897 const Tp f0 = data201[i].f0;
13898 const Tp diff = f - f0;
13899 if (std::abs(diff) > max_abs_diff)
13900 max_abs_diff = std::abs(diff);
13901 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
13902 {
13903 const Tp frac = diff / f0;
13904 if (std::abs(frac) > max_abs_frac)
13905 max_abs_frac = std::abs(frac);
13906 }
13907 }
13908 VERIFY(max_abs_frac < Tp(1.0000000000000006e-10));
13909 }
13910
13911 // Test data for a=10.000000000000000, b=10.000000000000000, c=4.0000000000000000.
13912 testcase_hyperg<double> data202[] = {
13913 { 1.3504013648882651e-05, 10.000000000000000, 10.000000000000000,
13914 4.0000000000000000, -0.90000000000000002 },
13915 { 3.1753432098404372e-05, 10.000000000000000, 10.000000000000000,
13916 4.0000000000000000, -0.80000000000000004 },
13917 { 6.2032098207659688e-05, 10.000000000000000, 10.000000000000000,
13918 4.0000000000000000, -0.69999999999999996 },
13919 { 8.8747213942768282e-05, 10.000000000000000, 10.000000000000000,
13920 4.0000000000000000, -0.59999999999999998 },
13921 { 1.0478094697243911e-05, 10.000000000000000, 10.000000000000000,
13922 4.0000000000000000, -0.50000000000000000 },
13923 { -0.00055998751006011325, 10.000000000000000, 10.000000000000000,
13924 4.0000000000000000, -0.40000000000000002 },
13925 { -0.0024718654966577563, 10.000000000000000, 10.000000000000000,
13926 4.0000000000000000, -0.30000000000000004 },
13927 { -0.0027000264053619817, 10.000000000000000, 10.000000000000000,
13928 4.0000000000000000, -0.19999999999999996 },
13929 { 0.066515394406810674, 10.000000000000000, 10.000000000000000,
13930 4.0000000000000000, -0.099999999999999978 },
13931 { 1.0000000000000000, 10.000000000000000, 10.000000000000000,
13932 4.0000000000000000, 0.0000000000000000 },
13933 { 11.579200866389527, 10.000000000000000, 10.000000000000000,
13934 4.0000000000000000, 0.10000000000000009 },
13935 { 137.50750548795256, 10.000000000000000, 10.000000000000000,
13936 4.0000000000000000, 0.19999999999999996 },
13937 { 1901.3196072993419, 10.000000000000000, 10.000000000000000,
13938 4.0000000000000000, 0.30000000000000004 },
13939 { 34210.659507137796, 10.000000000000000, 10.000000000000000,
13940 4.0000000000000000, 0.39999999999999991 },
13941 { 920588.19047619053, 10.000000000000000, 10.000000000000000,
13942 4.0000000000000000, 0.50000000000000000 },
13943 { 45876220.933028772, 10.000000000000000, 10.000000000000000,
13944 4.0000000000000000, 0.60000000000000009 },
13945 { 6234608574.0963297, 10.000000000000000, 10.000000000000000,
13946 4.0000000000000000, 0.69999999999999996 },
13947 { 5445391090029.7783, 10.000000000000000, 10.000000000000000,
13948 4.0000000000000000, 0.80000000000000004 },
13949 { 4.6508713107142163e+17, 10.000000000000000, 10.000000000000000,
13950 4.0000000000000000, 0.89999999999999991 },
13951 };
13952
13953 // Test function for a=10.000000000000000, b=10.000000000000000, c=4.0000000000000000.
13954 template <typename Tp>
13955 void test202()
13956 {
13957 const Tp eps = std::numeric_limits<Tp>::epsilon();
13958 Tp max_abs_diff = -Tp(1);
13959 Tp max_abs_frac = -Tp(1);
13960 unsigned int num_datum = sizeof(data202)
13961 / sizeof(testcase_hyperg<double>);
13962 for (unsigned int i = 0; i < num_datum; ++i)
13963 {
13964 const Tp f = std::tr1::hyperg(Tp(data202[i].a), Tp(data202[i].b),
13965 Tp(data202[i].c), Tp(data202[i].x));
13966 const Tp f0 = data202[i].f0;
13967 const Tp diff = f - f0;
13968 if (std::abs(diff) > max_abs_diff)
13969 max_abs_diff = std::abs(diff);
13970 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
13971 {
13972 const Tp frac = diff / f0;
13973 if (std::abs(frac) > max_abs_frac)
13974 max_abs_frac = std::abs(frac);
13975 }
13976 }
13977 VERIFY(max_abs_frac < Tp(2.5000000000000013e-09));
13978 }
13979
13980 // Test data for a=10.000000000000000, b=10.000000000000000, c=6.0000000000000000.
13981 testcase_hyperg<double> data203[] = {
13982 { -2.6846726901567720e-05, 10.000000000000000, 10.000000000000000,
13983 6.0000000000000000, -0.90000000000000002 },
13984 { -4.7817237144207266e-05, 10.000000000000000, 10.000000000000000,
13985 6.0000000000000000, -0.80000000000000004 },
13986 { -7.2908121941975601e-05, 10.000000000000000, 10.000000000000000,
13987 6.0000000000000000, -0.69999999999999996 },
13988 { -6.0427853197480476e-05, 10.000000000000000, 10.000000000000000,
13989 6.0000000000000000, -0.59999999999999998 },
13990 { 0.00020559720946645182, 10.000000000000000, 10.000000000000000,
13991 6.0000000000000000, -0.50000000000000000 },
13992 { 0.0017056910683365828, 10.000000000000000, 10.000000000000000,
13993 6.0000000000000000, -0.40000000000000002 },
13994 { 0.0088037230970526795, 10.000000000000000, 10.000000000000000,
13995 6.0000000000000000, -0.30000000000000004 },
13996 { 0.041510819735141674, 10.000000000000000, 10.000000000000000,
13997 6.0000000000000000, -0.19999999999999996 },
13998 { 0.19754880805677258, 10.000000000000000, 10.000000000000000,
13999 6.0000000000000000, -0.099999999999999978 },
14000 { 1.0000000000000000, 10.000000000000000, 10.000000000000000,
14001 6.0000000000000000, 0.0000000000000000 },
14002 { 5.6130947302779246, 10.000000000000000, 10.000000000000000,
14003 6.0000000000000000, 0.10000000000000009 },
14004 { 36.475357196722442, 10.000000000000000, 10.000000000000000,
14005 6.0000000000000000, 0.19999999999999996 },
14006 { 289.29483001400672, 10.000000000000000, 10.000000000000000,
14007 6.0000000000000000, 0.30000000000000004 },
14008 { 3010.8676549536503, 10.000000000000000, 10.000000000000000,
14009 6.0000000000000000, 0.39999999999999991 },
14010 { 45844.317460317419, 10.000000000000000, 10.000000000000000,
14011 6.0000000000000000, 0.50000000000000000 },
14012 { 1221852.6431492427, 10.000000000000000, 10.000000000000000,
14013 6.0000000000000000, 0.60000000000000009 },
14014 { 79585968.928968787, 10.000000000000000, 10.000000000000000,
14015 6.0000000000000000, 0.69999999999999996 },
14016 { 26733475942.460335, 10.000000000000000, 10.000000000000000,
14017 6.0000000000000000, 0.80000000000000004 },
14018 { 500206428571421.19, 10.000000000000000, 10.000000000000000,
14019 6.0000000000000000, 0.89999999999999991 },
14020 };
14021
14022 // Test function for a=10.000000000000000, b=10.000000000000000, c=6.0000000000000000.
14023 template <typename Tp>
14024 void test203()
14025 {
14026 const Tp eps = std::numeric_limits<Tp>::epsilon();
14027 Tp max_abs_diff = -Tp(1);
14028 Tp max_abs_frac = -Tp(1);
14029 unsigned int num_datum = sizeof(data203)
14030 / sizeof(testcase_hyperg<double>);
14031 for (unsigned int i = 0; i < num_datum; ++i)
14032 {
14033 const Tp f = std::tr1::hyperg(Tp(data203[i].a), Tp(data203[i].b),
14034 Tp(data203[i].c), Tp(data203[i].x));
14035 const Tp f0 = data203[i].f0;
14036 const Tp diff = f - f0;
14037 if (std::abs(diff) > max_abs_diff)
14038 max_abs_diff = std::abs(diff);
14039 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
14040 {
14041 const Tp frac = diff / f0;
14042 if (std::abs(frac) > max_abs_frac)
14043 max_abs_frac = std::abs(frac);
14044 }
14045 }
14046 VERIFY(max_abs_frac < Tp(2.5000000000000017e-10));
14047 }
14048
14049 // Test data for a=10.000000000000000, b=10.000000000000000, c=8.0000000000000000.
14050 testcase_hyperg<double> data204[] = {
14051 { 0.00025866179054245944, 10.000000000000000, 10.000000000000000,
14052 8.0000000000000000, -0.90000000000000002 },
14053 { 0.00053402577739214288, 10.000000000000000, 10.000000000000000,
14054 8.0000000000000000, -0.80000000000000004 },
14055 { 0.0011390075227240345, 10.000000000000000, 10.000000000000000,
14056 8.0000000000000000, -0.69999999999999996 },
14057 { 0.0025224267119483192, 10.000000000000000, 10.000000000000000,
14058 8.0000000000000000, -0.59999999999999998 },
14059 { 0.0058340332124251467, 10.000000000000000, 10.000000000000000,
14060 8.0000000000000000, -0.50000000000000000 },
14061 { 0.014189256143045285, 10.000000000000000, 10.000000000000000,
14062 8.0000000000000000, -0.40000000000000002 },
14063 { 0.036590990011337567, 10.000000000000000, 10.000000000000000,
14064 8.0000000000000000, -0.30000000000000004 },
14065 { 0.10106560781146992, 10.000000000000000, 10.000000000000000,
14066 8.0000000000000000, -0.19999999999999996 },
14067 { 0.30278778538531409, 10.000000000000000, 10.000000000000000,
14068 8.0000000000000000, -0.099999999999999978 },
14069 { 1.0000000000000000, 10.000000000000000, 10.000000000000000,
14070 8.0000000000000000, 0.0000000000000000 },
14071 { 3.7187249990350599, 10.000000000000000, 10.000000000000000,
14072 8.0000000000000000, 0.10000000000000009 },
14073 { 16.023275545901704, 10.000000000000000, 10.000000000000000,
14074 8.0000000000000000, 0.19999999999999996 },
14075 { 83.265377219882822, 10.000000000000000, 10.000000000000000,
14076 8.0000000000000000, 0.30000000000000004 },
14077 { 553.31413918843987, 10.000000000000000, 10.000000000000000,
14078 8.0000000000000000, 0.39999999999999991 },
14079 { 5148.4444444444416, 10.000000000000000, 10.000000000000000,
14080 8.0000000000000000, 0.50000000000000000 },
14081 { 78082.084655761908, 10.000000000000000, 10.000000000000000,
14082 8.0000000000000000, 0.60000000000000009 },
14083 { 2565874.8781353114, 10.000000000000000, 10.000000000000000,
14084 8.0000000000000000, 0.69999999999999996 },
14085 { 346137152.77777809, 10.000000000000000, 10.000000000000000,
14086 8.0000000000000000, 0.80000000000000004 },
14087 { 1472499999999.9834, 10.000000000000000, 10.000000000000000,
14088 8.0000000000000000, 0.89999999999999991 },
14089 };
14090
14091 // Test function for a=10.000000000000000, b=10.000000000000000, c=8.0000000000000000.
14092 template <typename Tp>
14093 void test204()
14094 {
14095 const Tp eps = std::numeric_limits<Tp>::epsilon();
14096 Tp max_abs_diff = -Tp(1);
14097 Tp max_abs_frac = -Tp(1);
14098 unsigned int num_datum = sizeof(data204)
14099 / sizeof(testcase_hyperg<double>);
14100 for (unsigned int i = 0; i < num_datum; ++i)
14101 {
14102 const Tp f = std::tr1::hyperg(Tp(data204[i].a), Tp(data204[i].b),
14103 Tp(data204[i].c), Tp(data204[i].x));
14104 const Tp f0 = data204[i].f0;
14105 const Tp diff = f - f0;
14106 if (std::abs(diff) > max_abs_diff)
14107 max_abs_diff = std::abs(diff);
14108 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
14109 {
14110 const Tp frac = diff / f0;
14111 if (std::abs(frac) > max_abs_frac)
14112 max_abs_frac = std::abs(frac);
14113 }
14114 }
14115 VERIFY(max_abs_frac < Tp(1.0000000000000006e-10));
14116 }
14117
14118 // Test data for a=10.000000000000000, b=10.000000000000000, c=10.000000000000000.
14119 testcase_hyperg<double> data205[] = {
14120 { 0.0016310376661280216, 10.000000000000000, 10.000000000000000,
14121 10.000000000000000, -0.90000000000000002 },
14122 { 0.0028007538972582421, 10.000000000000000, 10.000000000000000,
14123 10.000000000000000, -0.80000000000000004 },
14124 { 0.0049603324681551939, 10.000000000000000, 10.000000000000000,
14125 10.000000000000000, -0.69999999999999996 },
14126 { 0.0090949470177292789, 10.000000000000000, 10.000000000000000,
14127 10.000000000000000, -0.59999999999999998 },
14128 { 0.017341529915832606, 10.000000000000000, 10.000000000000000,
14129 10.000000000000000, -0.50000000000000000 },
14130 { 0.034571613033607777, 10.000000000000000, 10.000000000000000,
14131 10.000000000000000, -0.40000000000000002 },
14132 { 0.072538150286405714, 10.000000000000000, 10.000000000000000,
14133 10.000000000000000, -0.30000000000000004 },
14134 { 0.16150558288984579, 10.000000000000000, 10.000000000000000,
14135 10.000000000000000, -0.19999999999999996 },
14136 { 0.38554328942953148, 10.000000000000000, 10.000000000000000,
14137 10.000000000000000, -0.099999999999999978 },
14138 { 1.0000000000000000, 10.000000000000000, 10.000000000000000,
14139 10.000000000000000, 0.0000000000000000 },
14140 { 2.8679719907924444, 10.000000000000000, 10.000000000000000,
14141 10.000000000000000, 0.10000000000000009 },
14142 { 9.3132257461547816, 10.000000000000000, 10.000000000000000,
14143 10.000000000000000, 0.19999999999999996 },
14144 { 35.401331746414378, 10.000000000000000, 10.000000000000000,
14145 10.000000000000000, 0.30000000000000004 },
14146 { 165.38171687920172, 10.000000000000000, 10.000000000000000,
14147 10.000000000000000, 0.39999999999999991 },
14148 { 1024.0000000000000, 10.000000000000000, 10.000000000000000,
14149 10.000000000000000, 0.50000000000000000 },
14150 { 9536.7431640625200, 10.000000000000000, 10.000000000000000,
14151 10.000000000000000, 0.60000000000000009 },
14152 { 169350.87808430271, 10.000000000000000, 10.000000000000000,
14153 10.000000000000000, 0.69999999999999996 },
14154 { 9765624.9999999944, 10.000000000000000, 10.000000000000000,
14155 10.000000000000000, 0.80000000000000004 },
14156 { 9999999999.9999332, 10.000000000000000, 10.000000000000000,
14157 10.000000000000000, 0.89999999999999991 },
14158 };
14159
14160 // Test function for a=10.000000000000000, b=10.000000000000000, c=10.000000000000000.
14161 template <typename Tp>
14162 void test205()
14163 {
14164 const Tp eps = std::numeric_limits<Tp>::epsilon();
14165 Tp max_abs_diff = -Tp(1);
14166 Tp max_abs_frac = -Tp(1);
14167 unsigned int num_datum = sizeof(data205)
14168 / sizeof(testcase_hyperg<double>);
14169 for (unsigned int i = 0; i < num_datum; ++i)
14170 {
14171 const Tp f = std::tr1::hyperg(Tp(data205[i].a), Tp(data205[i].b),
14172 Tp(data205[i].c), Tp(data205[i].x));
14173 const Tp f0 = data205[i].f0;
14174 const Tp diff = f - f0;
14175 if (std::abs(diff) > max_abs_diff)
14176 max_abs_diff = std::abs(diff);
14177 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
14178 {
14179 const Tp frac = diff / f0;
14180 if (std::abs(frac) > max_abs_frac)
14181 max_abs_frac = std::abs(frac);
14182 }
14183 }
14184 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
14185 }
14186
14187 // Test data for a=10.000000000000000, b=20.000000000000000, c=2.0000000000000000.
14188 testcase_hyperg<double> data206[] = {
14189 { -2.1776535308707967e-07, 10.000000000000000, 20.000000000000000,
14190 2.0000000000000000, -0.90000000000000002 },
14191 { -2.9128833151427998e-06, 10.000000000000000, 20.000000000000000,
14192 2.0000000000000000, -0.80000000000000004 },
14193 { -9.4755553429035093e-06, 10.000000000000000, 20.000000000000000,
14194 2.0000000000000000, -0.69999999999999996 },
14195 { -1.2844297353813116e-05, 10.000000000000000, 20.000000000000000,
14196 2.0000000000000000, -0.59999999999999998 },
14197 { 3.6576965483568809e-05, 10.000000000000000, 20.000000000000000,
14198 2.0000000000000000, -0.50000000000000000 },
14199 { 0.00020847453890692649, 10.000000000000000, 20.000000000000000,
14200 2.0000000000000000, -0.40000000000000002 },
14201 { -0.00022868510398174632, 10.000000000000000, 20.000000000000000,
14202 2.0000000000000000, -0.30000000000000004 },
14203 { -0.0021855513841942732, 10.000000000000000, 20.000000000000000,
14204 2.0000000000000000, -0.19999999999999996 },
14205 { 0.014662111759334634, 10.000000000000000, 20.000000000000000,
14206 2.0000000000000000, -0.099999999999999978 },
14207 { 1.0000000000000000, 10.000000000000000, 20.000000000000000,
14208 2.0000000000000000, 0.0000000000000000 },
14209 { 746.44776348798098, 10.000000000000000, 20.000000000000000,
14210 2.0000000000000000, 0.10000000000000009 },
14211 { 136080.48445225612, 10.000000000000000, 20.000000000000000,
14212 2.0000000000000000, 0.19999999999999996 },
14213 { 23094279.597826406, 10.000000000000000, 20.000000000000000,
14214 2.0000000000000000, 0.30000000000000004 },
14215 { 5315913395.5545301, 10.000000000000000, 20.000000000000000,
14216 2.0000000000000000, 0.39999999999999991 },
14217 { 2261935718399.9990, 10.000000000000000, 20.000000000000000,
14218 2.0000000000000000, 0.50000000000000000 },
14219 { 2669150854828235.0, 10.000000000000000, 20.000000000000000,
14220 2.0000000000000000, 0.60000000000000009 },
14221 { 1.7499363099365994e+19, 10.000000000000000, 20.000000000000000,
14222 2.0000000000000000, 0.69999999999999996 },
14223 { 2.8881518494606140e+24, 10.000000000000000, 20.000000000000000,
14224 2.0000000000000000, 0.80000000000000004 },
14225 { 1.4165513933661626e+33, 10.000000000000000, 20.000000000000000,
14226 2.0000000000000000, 0.89999999999999991 },
14227 };
14228
14229 // Test function for a=10.000000000000000, b=20.000000000000000, c=2.0000000000000000.
14230 template <typename Tp>
14231 void test206()
14232 {
14233 const Tp eps = std::numeric_limits<Tp>::epsilon();
14234 Tp max_abs_diff = -Tp(1);
14235 Tp max_abs_frac = -Tp(1);
14236 unsigned int num_datum = sizeof(data206)
14237 / sizeof(testcase_hyperg<double>);
14238 for (unsigned int i = 0; i < num_datum; ++i)
14239 {
14240 const Tp f = std::tr1::hyperg(Tp(data206[i].a), Tp(data206[i].b),
14241 Tp(data206[i].c), Tp(data206[i].x));
14242 const Tp f0 = data206[i].f0;
14243 const Tp diff = f - f0;
14244 if (std::abs(diff) > max_abs_diff)
14245 max_abs_diff = std::abs(diff);
14246 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
14247 {
14248 const Tp frac = diff / f0;
14249 if (std::abs(frac) > max_abs_frac)
14250 max_abs_frac = std::abs(frac);
14251 }
14252 }
14253 VERIFY(max_abs_frac < Tp(1.0000000000000005e-08));
14254 }
14255
14256 // Test data for a=10.000000000000000, b=20.000000000000000, c=4.0000000000000000.
14257 testcase_hyperg<double> data207[] = {
14258 { 1.7149006973860441e-07, 10.000000000000000, 20.000000000000000,
14259 4.0000000000000000, -0.90000000000000002 },
14260 { 3.2399324904088936e-07, 10.000000000000000, 20.000000000000000,
14261 4.0000000000000000, -0.80000000000000004 },
14262 { 1.6015317712089860e-07, 10.000000000000000, 20.000000000000000,
14263 4.0000000000000000, -0.69999999999999996 },
14264 { -2.0500917204199595e-06, 10.000000000000000, 20.000000000000000,
14265 4.0000000000000000, -0.59999999999999998 },
14266 { -1.0175546788599472e-05, 10.000000000000000, 20.000000000000000,
14267 4.0000000000000000, -0.50000000000000000 },
14268 { -1.1720101988202453e-05, 10.000000000000000, 20.000000000000000,
14269 4.0000000000000000, -0.40000000000000002 },
14270 { 0.00014199637113974185, 10.000000000000000, 20.000000000000000,
14271 4.0000000000000000, -0.30000000000000004 },
14272 { 0.00021263363640642297, 10.000000000000000, 20.000000000000000,
14273 4.0000000000000000, -0.19999999999999996 },
14274 { -0.0072649256698441751, 10.000000000000000, 20.000000000000000,
14275 4.0000000000000000, -0.099999999999999978 },
14276 { 1.0000000000000000, 10.000000000000000, 20.000000000000000,
14277 4.0000000000000000, 0.0000000000000000 },
14278 { 90.430293772869618, 10.000000000000000, 20.000000000000000,
14279 4.0000000000000000, 0.10000000000000009 },
14280 { 6248.1455940292308, 10.000000000000000, 20.000000000000000,
14281 4.0000000000000000, 0.19999999999999996 },
14282 { 501143.39852548984, 10.000000000000000, 20.000000000000000,
14283 4.0000000000000000, 0.30000000000000004 },
14284 { 58852027.356439680, 10.000000000000000, 20.000000000000000,
14285 4.0000000000000000, 0.39999999999999991 },
14286 { 12942923093.333330, 10.000000000000000, 20.000000000000000,
14287 4.0000000000000000, 0.50000000000000000 },
14288 { 7618073993853.6592, 10.000000000000000, 20.000000000000000,
14289 4.0000000000000000, 0.60000000000000009 },
14290 { 22630251562549288., 10.000000000000000, 20.000000000000000,
14291 4.0000000000000000, 0.69999999999999996 },
14292 { 1.3708372433980356e+21, 10.000000000000000, 20.000000000000000,
14293 4.0000000000000000, 0.80000000000000004 },
14294 { 1.4154113619999653e+29, 10.000000000000000, 20.000000000000000,
14295 4.0000000000000000, 0.89999999999999991 },
14296 };
14297
14298 // Test function for a=10.000000000000000, b=20.000000000000000, c=4.0000000000000000.
14299 template <typename Tp>
14300 void test207()
14301 {
14302 const Tp eps = std::numeric_limits<Tp>::epsilon();
14303 Tp max_abs_diff = -Tp(1);
14304 Tp max_abs_frac = -Tp(1);
14305 unsigned int num_datum = sizeof(data207)
14306 / sizeof(testcase_hyperg<double>);
14307 for (unsigned int i = 0; i < num_datum; ++i)
14308 {
14309 const Tp f = std::tr1::hyperg(Tp(data207[i].a), Tp(data207[i].b),
14310 Tp(data207[i].c), Tp(data207[i].x));
14311 const Tp f0 = data207[i].f0;
14312 const Tp diff = f - f0;
14313 if (std::abs(diff) > max_abs_diff)
14314 max_abs_diff = std::abs(diff);
14315 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
14316 {
14317 const Tp frac = diff / f0;
14318 if (std::abs(frac) > max_abs_frac)
14319 max_abs_frac = std::abs(frac);
14320 }
14321 }
14322 VERIFY(max_abs_frac < Tp(5.0000000000000024e-08));
14323 }
14324
14325 // Test data for a=10.000000000000000, b=20.000000000000000, c=6.0000000000000000.
14326 testcase_hyperg<double> data208[] = {
14327 { -1.6667473370780257e-08, 10.000000000000000, 20.000000000000000,
14328 6.0000000000000000, -0.90000000000000002 },
14329 { 8.6214844067774863e-08, 10.000000000000000, 20.000000000000000,
14330 6.0000000000000000, -0.80000000000000004 },
14331 { 5.7778331238835108e-07, 10.000000000000000, 20.000000000000000,
14332 6.0000000000000000, -0.69999999999999996 },
14333 { 2.1911400500362969e-06, 10.000000000000000, 20.000000000000000,
14334 6.0000000000000000, -0.59999999999999998 },
14335 { 4.7440049217100417e-06, 10.000000000000000, 20.000000000000000,
14336 6.0000000000000000, -0.50000000000000000 },
14337 { -1.0564233314924258e-05, 10.000000000000000, 20.000000000000000,
14338 6.0000000000000000, -0.40000000000000002 },
14339 { -0.00017990026051856349, 10.000000000000000, 20.000000000000000,
14340 6.0000000000000000, -0.30000000000000004 },
14341 { -0.00027618146288744351, 10.000000000000000, 20.000000000000000,
14342 6.0000000000000000, -0.19999999999999996 },
14343 { 0.030606019577723392, 10.000000000000000, 20.000000000000000,
14344 6.0000000000000000, -0.099999999999999978 },
14345 { 1.0000000000000000, 10.000000000000000, 20.000000000000000,
14346 6.0000000000000000, 0.0000000000000000 },
14347 { 27.832854169493341, 10.000000000000000, 20.000000000000000,
14348 6.0000000000000000, 0.10000000000000009 },
14349 { 874.00624088575228, 10.000000000000000, 20.000000000000000,
14350 6.0000000000000000, 0.19999999999999996 },
14351 { 36049.199340831554, 10.000000000000000, 20.000000000000000,
14352 6.0000000000000000, 0.30000000000000004 },
14353 { 2270967.7298624986, 10.000000000000000, 20.000000000000000,
14354 6.0000000000000000, 0.39999999999999991 },
14355 { 266979100.44444439, 10.000000000000000, 20.000000000000000,
14356 6.0000000000000000, 0.50000000000000000 },
14357 { 80311224337.493027, 10.000000000000000, 20.000000000000000,
14358 6.0000000000000000, 0.60000000000000009 },
14359 { 110111693103799.72, 10.000000000000000, 20.000000000000000,
14360 6.0000000000000000, 0.69999999999999996 },
14361 { 2.4838871426052618e+18, 10.000000000000000, 20.000000000000000,
14362 6.0000000000000000, 0.80000000000000004 },
14363 { 5.4626349999998603e+25, 10.000000000000000, 20.000000000000000,
14364 6.0000000000000000, 0.89999999999999991 },
14365 };
14366
14367 // Test function for a=10.000000000000000, b=20.000000000000000, c=6.0000000000000000.
14368 template <typename Tp>
14369 void test208()
14370 {
14371 const Tp eps = std::numeric_limits<Tp>::epsilon();
14372 Tp max_abs_diff = -Tp(1);
14373 Tp max_abs_frac = -Tp(1);
14374 unsigned int num_datum = sizeof(data208)
14375 / sizeof(testcase_hyperg<double>);
14376 for (unsigned int i = 0; i < num_datum; ++i)
14377 {
14378 const Tp f = std::tr1::hyperg(Tp(data208[i].a), Tp(data208[i].b),
14379 Tp(data208[i].c), Tp(data208[i].x));
14380 const Tp f0 = data208[i].f0;
14381 const Tp diff = f - f0;
14382 if (std::abs(diff) > max_abs_diff)
14383 max_abs_diff = std::abs(diff);
14384 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
14385 {
14386 const Tp frac = diff / f0;
14387 if (std::abs(frac) > max_abs_frac)
14388 max_abs_frac = std::abs(frac);
14389 }
14390 }
14391 VERIFY(max_abs_frac < Tp(5.0000000000000019e-07));
14392 }
14393
14394 // Test data for a=10.000000000000000, b=20.000000000000000, c=8.0000000000000000.
14395 testcase_hyperg<double> data209[] = {
14396 { -1.5843795893321480e-07, 10.000000000000000, 20.000000000000000,
14397 8.0000000000000000, -0.90000000000000002 },
14398 { -5.4877275994033766e-07, 10.000000000000000, 20.000000000000000,
14399 8.0000000000000000, -0.80000000000000004 },
14400 { -1.7169507967745992e-06, 10.000000000000000, 20.000000000000000,
14401 8.0000000000000000, -0.69999999999999996 },
14402 { -4.5236439748752000e-06, 10.000000000000000, 20.000000000000000,
14403 8.0000000000000000, -0.59999999999999998 },
14404 { -5.5690492560325806e-06, 10.000000000000000, 20.000000000000000,
14405 8.0000000000000000, -0.50000000000000000 },
14406 { 5.6914115606934911e-05, 10.000000000000000, 20.000000000000000,
14407 8.0000000000000000, -0.40000000000000002 },
14408 { 0.00082507252097519922, 10.000000000000000, 20.000000000000000,
14409 8.0000000000000000, -0.30000000000000004 },
14410 { 0.0085739249288229857, 10.000000000000000, 20.000000000000000,
14411 8.0000000000000000, -0.19999999999999996 },
14412 { 0.088244357683754757, 10.000000000000000, 20.000000000000000,
14413 8.0000000000000000, -0.099999999999999978 },
14414 { 1.0000000000000000, 10.000000000000000, 20.000000000000000,
14415 8.0000000000000000, 0.0000000000000000 },
14416 { 13.387208440156897, 10.000000000000000, 20.000000000000000,
14417 8.0000000000000000, 0.10000000000000009 },
14418 { 226.77895441155110, 10.000000000000000, 20.000000000000000,
14419 8.0000000000000000, 0.19999999999999996 },
14420 { 5281.5716482686785, 10.000000000000000, 20.000000000000000,
14421 8.0000000000000000, 0.30000000000000004 },
14422 { 189431.77762850464, 10.000000000000000, 20.000000000000000,
14423 8.0000000000000000, 0.39999999999999991 },
14424 { 12408149.333333332, 10.000000000000000, 20.000000000000000,
14425 8.0000000000000000, 0.50000000000000000 },
14426 { 1966782292.5839682, 10.000000000000000, 20.000000000000000,
14427 8.0000000000000000, 0.60000000000000009 },
14428 { 1274123112205.7495, 10.000000000000000, 20.000000000000000,
14429 8.0000000000000000, 0.69999999999999996 },
14430 { 10903676350911508., 10.000000000000000, 20.000000000000000,
14431 8.0000000000000000, 0.80000000000000004 },
14432 { 5.1849999999998819e+22, 10.000000000000000, 20.000000000000000,
14433 8.0000000000000000, 0.89999999999999991 },
14434 };
14435
14436 // Test function for a=10.000000000000000, b=20.000000000000000, c=8.0000000000000000.
14437 template <typename Tp>
14438 void test209()
14439 {
14440 const Tp eps = std::numeric_limits<Tp>::epsilon();
14441 Tp max_abs_diff = -Tp(1);
14442 Tp max_abs_frac = -Tp(1);
14443 unsigned int num_datum = sizeof(data209)
14444 / sizeof(testcase_hyperg<double>);
14445 for (unsigned int i = 0; i < num_datum; ++i)
14446 {
14447 const Tp f = std::tr1::hyperg(Tp(data209[i].a), Tp(data209[i].b),
14448 Tp(data209[i].c), Tp(data209[i].x));
14449 const Tp f0 = data209[i].f0;
14450 const Tp diff = f - f0;
14451 if (std::abs(diff) > max_abs_diff)
14452 max_abs_diff = std::abs(diff);
14453 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
14454 {
14455 const Tp frac = diff / f0;
14456 if (std::abs(frac) > max_abs_frac)
14457 max_abs_frac = std::abs(frac);
14458 }
14459 }
14460 VERIFY(max_abs_frac < Tp(2.5000000000000012e-08));
14461 }
14462
14463 // Test data for a=10.000000000000000, b=20.000000000000000, c=10.000000000000000.
14464 testcase_hyperg<double> data210[] = {
14465 { 2.6602838683283435e-06, 10.000000000000000, 20.000000000000000,
14466 10.000000000000000, -0.90000000000000002 },
14467 { 7.8442223930072316e-06, 10.000000000000000, 20.000000000000000,
14468 10.000000000000000, -0.80000000000000004 },
14469 { 2.4604898194634598e-05, 10.000000000000000, 20.000000000000000,
14470 10.000000000000000, -0.69999999999999996 },
14471 { 8.2718061255302686e-05, 10.000000000000000, 20.000000000000000,
14472 10.000000000000000, -0.59999999999999998 },
14473 { 0.00030072865982171723, 10.000000000000000, 20.000000000000000,
14474 10.000000000000000, -0.50000000000000000 },
14475 { 0.0011951964277455193, 10.000000000000000, 20.000000000000000,
14476 10.000000000000000, -0.40000000000000002 },
14477 { 0.0052617832469731814, 10.000000000000000, 20.000000000000000,
14478 10.000000000000000, -0.30000000000000004 },
14479 { 0.026084053304588847, 10.000000000000000, 20.000000000000000,
14480 10.000000000000000, -0.19999999999999996 },
14481 { 0.14864362802414346, 10.000000000000000, 20.000000000000000,
14482 10.000000000000000, -0.099999999999999978 },
14483 { 1.0000000000000000, 10.000000000000000, 20.000000000000000,
14484 10.000000000000000, 0.0000000000000000 },
14485 { 8.2252633399699757, 10.000000000000000, 20.000000000000000,
14486 10.000000000000000, 0.10000000000000009 },
14487 { 86.736173798840269, 10.000000000000000, 20.000000000000000,
14488 10.000000000000000, 0.19999999999999996 },
14489 { 1253.2542894196865, 10.000000000000000, 20.000000000000000,
14490 10.000000000000000, 0.30000000000000004 },
14491 { 27351.112277912434, 10.000000000000000, 20.000000000000000,
14492 10.000000000000000, 0.39999999999999991 },
14493 { 1048576.0000000000, 10.000000000000000, 20.000000000000000,
14494 10.000000000000000, 0.50000000000000000 },
14495 { 90949470.177293226, 10.000000000000000, 20.000000000000000,
14496 10.000000000000000, 0.60000000000000009 },
14497 { 28679719907.924358, 10.000000000000000, 20.000000000000000,
14498 10.000000000000000, 0.69999999999999996 },
14499 { 95367431640624.906, 10.000000000000000, 20.000000000000000,
14500 10.000000000000000, 0.80000000000000004 },
14501 { 9.9999999999998657e+19, 10.000000000000000, 20.000000000000000,
14502 10.000000000000000, 0.89999999999999991 },
14503 };
14504
14505 // Test function for a=10.000000000000000, b=20.000000000000000, c=10.000000000000000.
14506 template <typename Tp>
14507 void test210()
14508 {
14509 const Tp eps = std::numeric_limits<Tp>::epsilon();
14510 Tp max_abs_diff = -Tp(1);
14511 Tp max_abs_frac = -Tp(1);
14512 unsigned int num_datum = sizeof(data210)
14513 / sizeof(testcase_hyperg<double>);
14514 for (unsigned int i = 0; i < num_datum; ++i)
14515 {
14516 const Tp f = std::tr1::hyperg(Tp(data210[i].a), Tp(data210[i].b),
14517 Tp(data210[i].c), Tp(data210[i].x));
14518 const Tp f0 = data210[i].f0;
14519 const Tp diff = f - f0;
14520 if (std::abs(diff) > max_abs_diff)
14521 max_abs_diff = std::abs(diff);
14522 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
14523 {
14524 const Tp frac = diff / f0;
14525 if (std::abs(frac) > max_abs_frac)
14526 max_abs_frac = std::abs(frac);
14527 }
14528 }
14529 VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
14530 }
14531
14532 // Test data for a=20.000000000000000, b=0.0000000000000000, c=2.0000000000000000.
14533 testcase_hyperg<double> data211[] = {
14534 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14535 2.0000000000000000, -0.90000000000000002 },
14536 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14537 2.0000000000000000, -0.80000000000000004 },
14538 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14539 2.0000000000000000, -0.69999999999999996 },
14540 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14541 2.0000000000000000, -0.59999999999999998 },
14542 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14543 2.0000000000000000, -0.50000000000000000 },
14544 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14545 2.0000000000000000, -0.40000000000000002 },
14546 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14547 2.0000000000000000, -0.30000000000000004 },
14548 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14549 2.0000000000000000, -0.19999999999999996 },
14550 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14551 2.0000000000000000, -0.099999999999999978 },
14552 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14553 2.0000000000000000, 0.0000000000000000 },
14554 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14555 2.0000000000000000, 0.10000000000000009 },
14556 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14557 2.0000000000000000, 0.19999999999999996 },
14558 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14559 2.0000000000000000, 0.30000000000000004 },
14560 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14561 2.0000000000000000, 0.39999999999999991 },
14562 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14563 2.0000000000000000, 0.50000000000000000 },
14564 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14565 2.0000000000000000, 0.60000000000000009 },
14566 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14567 2.0000000000000000, 0.69999999999999996 },
14568 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14569 2.0000000000000000, 0.80000000000000004 },
14570 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14571 2.0000000000000000, 0.89999999999999991 },
14572 };
14573
14574 // Test function for a=20.000000000000000, b=0.0000000000000000, c=2.0000000000000000.
14575 template <typename Tp>
14576 void test211()
14577 {
14578 const Tp eps = std::numeric_limits<Tp>::epsilon();
14579 Tp max_abs_diff = -Tp(1);
14580 Tp max_abs_frac = -Tp(1);
14581 unsigned int num_datum = sizeof(data211)
14582 / sizeof(testcase_hyperg<double>);
14583 for (unsigned int i = 0; i < num_datum; ++i)
14584 {
14585 const Tp f = std::tr1::hyperg(Tp(data211[i].a), Tp(data211[i].b),
14586 Tp(data211[i].c), Tp(data211[i].x));
14587 const Tp f0 = data211[i].f0;
14588 const Tp diff = f - f0;
14589 if (std::abs(diff) > max_abs_diff)
14590 max_abs_diff = std::abs(diff);
14591 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
14592 {
14593 const Tp frac = diff / f0;
14594 if (std::abs(frac) > max_abs_frac)
14595 max_abs_frac = std::abs(frac);
14596 }
14597 }
14598 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
14599 }
14600
14601 // Test data for a=20.000000000000000, b=0.0000000000000000, c=4.0000000000000000.
14602 testcase_hyperg<double> data212[] = {
14603 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14604 4.0000000000000000, -0.90000000000000002 },
14605 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14606 4.0000000000000000, -0.80000000000000004 },
14607 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14608 4.0000000000000000, -0.69999999999999996 },
14609 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14610 4.0000000000000000, -0.59999999999999998 },
14611 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14612 4.0000000000000000, -0.50000000000000000 },
14613 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14614 4.0000000000000000, -0.40000000000000002 },
14615 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14616 4.0000000000000000, -0.30000000000000004 },
14617 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14618 4.0000000000000000, -0.19999999999999996 },
14619 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14620 4.0000000000000000, -0.099999999999999978 },
14621 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14622 4.0000000000000000, 0.0000000000000000 },
14623 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14624 4.0000000000000000, 0.10000000000000009 },
14625 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14626 4.0000000000000000, 0.19999999999999996 },
14627 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14628 4.0000000000000000, 0.30000000000000004 },
14629 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14630 4.0000000000000000, 0.39999999999999991 },
14631 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14632 4.0000000000000000, 0.50000000000000000 },
14633 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14634 4.0000000000000000, 0.60000000000000009 },
14635 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14636 4.0000000000000000, 0.69999999999999996 },
14637 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14638 4.0000000000000000, 0.80000000000000004 },
14639 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14640 4.0000000000000000, 0.89999999999999991 },
14641 };
14642
14643 // Test function for a=20.000000000000000, b=0.0000000000000000, c=4.0000000000000000.
14644 template <typename Tp>
14645 void test212()
14646 {
14647 const Tp eps = std::numeric_limits<Tp>::epsilon();
14648 Tp max_abs_diff = -Tp(1);
14649 Tp max_abs_frac = -Tp(1);
14650 unsigned int num_datum = sizeof(data212)
14651 / sizeof(testcase_hyperg<double>);
14652 for (unsigned int i = 0; i < num_datum; ++i)
14653 {
14654 const Tp f = std::tr1::hyperg(Tp(data212[i].a), Tp(data212[i].b),
14655 Tp(data212[i].c), Tp(data212[i].x));
14656 const Tp f0 = data212[i].f0;
14657 const Tp diff = f - f0;
14658 if (std::abs(diff) > max_abs_diff)
14659 max_abs_diff = std::abs(diff);
14660 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
14661 {
14662 const Tp frac = diff / f0;
14663 if (std::abs(frac) > max_abs_frac)
14664 max_abs_frac = std::abs(frac);
14665 }
14666 }
14667 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
14668 }
14669
14670 // Test data for a=20.000000000000000, b=0.0000000000000000, c=6.0000000000000000.
14671 testcase_hyperg<double> data213[] = {
14672 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14673 6.0000000000000000, -0.90000000000000002 },
14674 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14675 6.0000000000000000, -0.80000000000000004 },
14676 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14677 6.0000000000000000, -0.69999999999999996 },
14678 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14679 6.0000000000000000, -0.59999999999999998 },
14680 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14681 6.0000000000000000, -0.50000000000000000 },
14682 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14683 6.0000000000000000, -0.40000000000000002 },
14684 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14685 6.0000000000000000, -0.30000000000000004 },
14686 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14687 6.0000000000000000, -0.19999999999999996 },
14688 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14689 6.0000000000000000, -0.099999999999999978 },
14690 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14691 6.0000000000000000, 0.0000000000000000 },
14692 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14693 6.0000000000000000, 0.10000000000000009 },
14694 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14695 6.0000000000000000, 0.19999999999999996 },
14696 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14697 6.0000000000000000, 0.30000000000000004 },
14698 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14699 6.0000000000000000, 0.39999999999999991 },
14700 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14701 6.0000000000000000, 0.50000000000000000 },
14702 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14703 6.0000000000000000, 0.60000000000000009 },
14704 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14705 6.0000000000000000, 0.69999999999999996 },
14706 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14707 6.0000000000000000, 0.80000000000000004 },
14708 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14709 6.0000000000000000, 0.89999999999999991 },
14710 };
14711
14712 // Test function for a=20.000000000000000, b=0.0000000000000000, c=6.0000000000000000.
14713 template <typename Tp>
14714 void test213()
14715 {
14716 const Tp eps = std::numeric_limits<Tp>::epsilon();
14717 Tp max_abs_diff = -Tp(1);
14718 Tp max_abs_frac = -Tp(1);
14719 unsigned int num_datum = sizeof(data213)
14720 / sizeof(testcase_hyperg<double>);
14721 for (unsigned int i = 0; i < num_datum; ++i)
14722 {
14723 const Tp f = std::tr1::hyperg(Tp(data213[i].a), Tp(data213[i].b),
14724 Tp(data213[i].c), Tp(data213[i].x));
14725 const Tp f0 = data213[i].f0;
14726 const Tp diff = f - f0;
14727 if (std::abs(diff) > max_abs_diff)
14728 max_abs_diff = std::abs(diff);
14729 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
14730 {
14731 const Tp frac = diff / f0;
14732 if (std::abs(frac) > max_abs_frac)
14733 max_abs_frac = std::abs(frac);
14734 }
14735 }
14736 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
14737 }
14738
14739 // Test data for a=20.000000000000000, b=0.0000000000000000, c=8.0000000000000000.
14740 testcase_hyperg<double> data214[] = {
14741 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14742 8.0000000000000000, -0.90000000000000002 },
14743 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14744 8.0000000000000000, -0.80000000000000004 },
14745 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14746 8.0000000000000000, -0.69999999999999996 },
14747 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14748 8.0000000000000000, -0.59999999999999998 },
14749 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14750 8.0000000000000000, -0.50000000000000000 },
14751 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14752 8.0000000000000000, -0.40000000000000002 },
14753 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14754 8.0000000000000000, -0.30000000000000004 },
14755 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14756 8.0000000000000000, -0.19999999999999996 },
14757 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14758 8.0000000000000000, -0.099999999999999978 },
14759 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14760 8.0000000000000000, 0.0000000000000000 },
14761 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14762 8.0000000000000000, 0.10000000000000009 },
14763 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14764 8.0000000000000000, 0.19999999999999996 },
14765 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14766 8.0000000000000000, 0.30000000000000004 },
14767 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14768 8.0000000000000000, 0.39999999999999991 },
14769 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14770 8.0000000000000000, 0.50000000000000000 },
14771 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14772 8.0000000000000000, 0.60000000000000009 },
14773 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14774 8.0000000000000000, 0.69999999999999996 },
14775 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14776 8.0000000000000000, 0.80000000000000004 },
14777 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14778 8.0000000000000000, 0.89999999999999991 },
14779 };
14780
14781 // Test function for a=20.000000000000000, b=0.0000000000000000, c=8.0000000000000000.
14782 template <typename Tp>
14783 void test214()
14784 {
14785 const Tp eps = std::numeric_limits<Tp>::epsilon();
14786 Tp max_abs_diff = -Tp(1);
14787 Tp max_abs_frac = -Tp(1);
14788 unsigned int num_datum = sizeof(data214)
14789 / sizeof(testcase_hyperg<double>);
14790 for (unsigned int i = 0; i < num_datum; ++i)
14791 {
14792 const Tp f = std::tr1::hyperg(Tp(data214[i].a), Tp(data214[i].b),
14793 Tp(data214[i].c), Tp(data214[i].x));
14794 const Tp f0 = data214[i].f0;
14795 const Tp diff = f - f0;
14796 if (std::abs(diff) > max_abs_diff)
14797 max_abs_diff = std::abs(diff);
14798 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
14799 {
14800 const Tp frac = diff / f0;
14801 if (std::abs(frac) > max_abs_frac)
14802 max_abs_frac = std::abs(frac);
14803 }
14804 }
14805 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
14806 }
14807
14808 // Test data for a=20.000000000000000, b=0.0000000000000000, c=10.000000000000000.
14809 testcase_hyperg<double> data215[] = {
14810 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14811 10.000000000000000, -0.90000000000000002 },
14812 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14813 10.000000000000000, -0.80000000000000004 },
14814 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14815 10.000000000000000, -0.69999999999999996 },
14816 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14817 10.000000000000000, -0.59999999999999998 },
14818 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14819 10.000000000000000, -0.50000000000000000 },
14820 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14821 10.000000000000000, -0.40000000000000002 },
14822 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14823 10.000000000000000, -0.30000000000000004 },
14824 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14825 10.000000000000000, -0.19999999999999996 },
14826 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14827 10.000000000000000, -0.099999999999999978 },
14828 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14829 10.000000000000000, 0.0000000000000000 },
14830 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14831 10.000000000000000, 0.10000000000000009 },
14832 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14833 10.000000000000000, 0.19999999999999996 },
14834 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14835 10.000000000000000, 0.30000000000000004 },
14836 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14837 10.000000000000000, 0.39999999999999991 },
14838 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14839 10.000000000000000, 0.50000000000000000 },
14840 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14841 10.000000000000000, 0.60000000000000009 },
14842 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14843 10.000000000000000, 0.69999999999999996 },
14844 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14845 10.000000000000000, 0.80000000000000004 },
14846 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
14847 10.000000000000000, 0.89999999999999991 },
14848 };
14849
14850 // Test function for a=20.000000000000000, b=0.0000000000000000, c=10.000000000000000.
14851 template <typename Tp>
14852 void test215()
14853 {
14854 const Tp eps = std::numeric_limits<Tp>::epsilon();
14855 Tp max_abs_diff = -Tp(1);
14856 Tp max_abs_frac = -Tp(1);
14857 unsigned int num_datum = sizeof(data215)
14858 / sizeof(testcase_hyperg<double>);
14859 for (unsigned int i = 0; i < num_datum; ++i)
14860 {
14861 const Tp f = std::tr1::hyperg(Tp(data215[i].a), Tp(data215[i].b),
14862 Tp(data215[i].c), Tp(data215[i].x));
14863 const Tp f0 = data215[i].f0;
14864 const Tp diff = f - f0;
14865 if (std::abs(diff) > max_abs_diff)
14866 max_abs_diff = std::abs(diff);
14867 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
14868 {
14869 const Tp frac = diff / f0;
14870 if (std::abs(frac) > max_abs_frac)
14871 max_abs_frac = std::abs(frac);
14872 }
14873 }
14874 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
14875 }
14876
14877 // Test data for a=20.000000000000000, b=0.50000000000000000, c=2.0000000000000000.
14878 testcase_hyperg<double> data216[] = {
14879 { 0.26690449940521566, 20.000000000000000, 0.50000000000000000,
14880 2.0000000000000000, -0.90000000000000002 },
14881 { 0.28252302866181805, 20.000000000000000, 0.50000000000000000,
14882 2.0000000000000000, -0.80000000000000004 },
14883 { 0.30123616141153819, 20.000000000000000, 0.50000000000000000,
14884 2.0000000000000000, -0.69999999999999996 },
14885 { 0.32421384687602628, 20.000000000000000, 0.50000000000000000,
14886 2.0000000000000000, -0.59999999999999998 },
14887 { 0.35334630811776752, 20.000000000000000, 0.50000000000000000,
14888 2.0000000000000000, -0.50000000000000000 },
14889 { 0.39191793127467034, 20.000000000000000, 0.50000000000000000,
14890 2.0000000000000000, -0.40000000000000002 },
14891 { 0.44620488618129206, 20.000000000000000, 0.50000000000000000,
14892 2.0000000000000000, -0.30000000000000004 },
14893 { 0.52980896919265685, 20.000000000000000, 0.50000000000000000,
14894 2.0000000000000000, -0.19999999999999996 },
14895 { 0.67754711477562357, 20.000000000000000, 0.50000000000000000,
14896 2.0000000000000000, -0.099999999999999978 },
14897 { 1.0000000000000000, 20.000000000000000, 0.50000000000000000,
14898 2.0000000000000000, 0.0000000000000000 },
14899 { 1.9567557771780317, 20.000000000000000, 0.50000000000000000,
14900 2.0000000000000000, 0.10000000000000009 },
14901 { 6.1816042148333086, 20.000000000000000, 0.50000000000000000,
14902 2.0000000000000000, 0.19999999999999996 },
14903 { 35.653088618561227, 20.000000000000000, 0.50000000000000000,
14904 2.0000000000000000, 0.30000000000000004 },
14905 { 377.51482843179906, 20.000000000000000, 0.50000000000000000,
14906 2.0000000000000000, 0.39999999999999991 },
14907 { 7645.8816551195359, 20.000000000000000, 0.50000000000000000,
14908 2.0000000000000000, 0.50000000000000000 },
14909 { 354791.74537980522, 20.000000000000000, 0.50000000000000000,
14910 2.0000000000000000, 0.60000000000000009 },
14911 { 57009889.966638684, 20.000000000000000, 0.50000000000000000,
14912 2.0000000000000000, 0.69999999999999996 },
14913 { 83771357024.863937, 20.000000000000000, 0.50000000000000000,
14914 2.0000000000000000, 0.80000000000000004 },
14915 { 25866972896376408., 20.000000000000000, 0.50000000000000000,
14916 2.0000000000000000, 0.89999999999999991 },
14917 };
14918
14919 // Test function for a=20.000000000000000, b=0.50000000000000000, c=2.0000000000000000.
14920 template <typename Tp>
14921 void test216()
14922 {
14923 const Tp eps = std::numeric_limits<Tp>::epsilon();
14924 Tp max_abs_diff = -Tp(1);
14925 Tp max_abs_frac = -Tp(1);
14926 unsigned int num_datum = sizeof(data216)
14927 / sizeof(testcase_hyperg<double>);
14928 for (unsigned int i = 0; i < num_datum; ++i)
14929 {
14930 const Tp f = std::tr1::hyperg(Tp(data216[i].a), Tp(data216[i].b),
14931 Tp(data216[i].c), Tp(data216[i].x));
14932 const Tp f0 = data216[i].f0;
14933 const Tp diff = f - f0;
14934 if (std::abs(diff) > max_abs_diff)
14935 max_abs_diff = std::abs(diff);
14936 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
14937 {
14938 const Tp frac = diff / f0;
14939 if (std::abs(frac) > max_abs_frac)
14940 max_abs_frac = std::abs(frac);
14941 }
14942 }
14943 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
14944 }
14945
14946 // Test data for a=20.000000000000000, b=0.50000000000000000, c=4.0000000000000000.
14947 testcase_hyperg<double> data217[] = {
14948 { 0.40342659436153405, 20.000000000000000, 0.50000000000000000,
14949 4.0000000000000000, -0.90000000000000002 },
14950 { 0.42420571192034318, 20.000000000000000, 0.50000000000000000,
14951 4.0000000000000000, -0.80000000000000004 },
14952 { 0.44852768286073008, 20.000000000000000, 0.50000000000000000,
14953 4.0000000000000000, -0.69999999999999996 },
14954 { 0.47751245808592863, 20.000000000000000, 0.50000000000000000,
14955 4.0000000000000000, -0.59999999999999998 },
14956 { 0.51283632632707754, 20.000000000000000, 0.50000000000000000,
14957 4.0000000000000000, -0.50000000000000000 },
14958 { 0.55713468814894307, 20.000000000000000, 0.50000000000000000,
14959 4.0000000000000000, -0.40000000000000002 },
14960 { 0.61481320817757312, 20.000000000000000, 0.50000000000000000,
14961 4.0000000000000000, -0.30000000000000004 },
14962 { 0.69383483410097202, 20.000000000000000, 0.50000000000000000,
14963 4.0000000000000000, -0.19999999999999996 },
14964 { 0.81012002526006033, 20.000000000000000, 0.50000000000000000,
14965 4.0000000000000000, -0.099999999999999978 },
14966 { 1.0000000000000000, 20.000000000000000, 0.50000000000000000,
14967 4.0000000000000000, 0.0000000000000000 },
14968 { 1.3622225506603911, 20.000000000000000, 0.50000000000000000,
14969 4.0000000000000000, 0.10000000000000009 },
14970 { 2.2349513086109001, 20.000000000000000, 0.50000000000000000,
14971 4.0000000000000000, 0.19999999999999996 },
14972 { 5.1864917536761723, 20.000000000000000, 0.50000000000000000,
14973 4.0000000000000000, 0.30000000000000004 },
14974 { 21.020560423779411, 20.000000000000000, 0.50000000000000000,
14975 4.0000000000000000, 0.39999999999999991 },
14976 { 175.19649997100612, 20.000000000000000, 0.50000000000000000,
14977 4.0000000000000000, 0.50000000000000000 },
14978 { 3467.1587803688708, 20.000000000000000, 0.50000000000000000,
14979 4.0000000000000000, 0.60000000000000009 },
14980 { 225003.88683445856, 20.000000000000000, 0.50000000000000000,
14981 4.0000000000000000, 0.69999999999999996 },
14982 { 110837674.65652709, 20.000000000000000, 0.50000000000000000,
14983 4.0000000000000000, 0.80000000000000004 },
14984 { 6688966964170.6807, 20.000000000000000, 0.50000000000000000,
14985 4.0000000000000000, 0.89999999999999991 },
14986 };
14987
14988 // Test function for a=20.000000000000000, b=0.50000000000000000, c=4.0000000000000000.
14989 template <typename Tp>
14990 void test217()
14991 {
14992 const Tp eps = std::numeric_limits<Tp>::epsilon();
14993 Tp max_abs_diff = -Tp(1);
14994 Tp max_abs_frac = -Tp(1);
14995 unsigned int num_datum = sizeof(data217)
14996 / sizeof(testcase_hyperg<double>);
14997 for (unsigned int i = 0; i < num_datum; ++i)
14998 {
14999 const Tp f = std::tr1::hyperg(Tp(data217[i].a), Tp(data217[i].b),
15000 Tp(data217[i].c), Tp(data217[i].x));
15001 const Tp f0 = data217[i].f0;
15002 const Tp diff = f - f0;
15003 if (std::abs(diff) > max_abs_diff)
15004 max_abs_diff = std::abs(diff);
15005 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
15006 {
15007 const Tp frac = diff / f0;
15008 if (std::abs(frac) > max_abs_frac)
15009 max_abs_frac = std::abs(frac);
15010 }
15011 }
15012 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
15013 }
15014
15015 // Test data for a=20.000000000000000, b=0.50000000000000000, c=6.0000000000000000.
15016 testcase_hyperg<double> data218[] = {
15017 { 0.48716309885816761, 20.000000000000000, 0.50000000000000000,
15018 6.0000000000000000, -0.90000000000000002 },
15019 { 0.50965859152542281, 20.000000000000000, 0.50000000000000000,
15020 6.0000000000000000, -0.80000000000000004 },
15021 { 0.53554809210658971, 20.000000000000000, 0.50000000000000000,
15022 6.0000000000000000, -0.69999999999999996 },
15023 { 0.56576689207507136, 20.000000000000000, 0.50000000000000000,
15024 6.0000000000000000, -0.59999999999999998 },
15025 { 0.60164849637133688, 20.000000000000000, 0.50000000000000000,
15026 6.0000000000000000, -0.50000000000000000 },
15027 { 0.64516711595404375, 20.000000000000000, 0.50000000000000000,
15028 6.0000000000000000, -0.40000000000000002 },
15029 { 0.69938278735493542, 20.000000000000000, 0.50000000000000000,
15030 6.0000000000000000, -0.30000000000000004 },
15031 { 0.76931621518401860, 20.000000000000000, 0.50000000000000000,
15032 6.0000000000000000, -0.19999999999999996 },
15033 { 0.86381808725530695, 20.000000000000000, 0.50000000000000000,
15034 6.0000000000000000, -0.099999999999999978 },
15035 { 1.0000000000000000, 20.000000000000000, 0.50000000000000000,
15036 6.0000000000000000, 0.0000000000000000 },
15037 { 1.2152051956815531, 20.000000000000000, 0.50000000000000000,
15038 6.0000000000000000, 0.10000000000000009 },
15039 { 1.6052546785425543, 20.000000000000000, 0.50000000000000000,
15040 6.0000000000000000, 0.19999999999999996 },
15041 { 2.4765586046012635, 20.000000000000000, 0.50000000000000000,
15042 6.0000000000000000, 0.30000000000000004 },
15043 { 5.1564492216997486, 20.000000000000000, 0.50000000000000000,
15044 6.0000000000000000, 0.39999999999999991 },
15045 { 18.446158392136365, 20.000000000000000, 0.50000000000000000,
15046 6.0000000000000000, 0.50000000000000000 },
15047 { 150.44577670123971, 20.000000000000000, 0.50000000000000000,
15048 6.0000000000000000, 0.60000000000000009 },
15049 { 3862.6317400115768, 20.000000000000000, 0.50000000000000000,
15050 6.0000000000000000, 0.69999999999999996 },
15051 { 632428.34833625401, 20.000000000000000, 0.50000000000000000,
15052 6.0000000000000000, 0.80000000000000004 },
15053 { 7426927663.3808765, 20.000000000000000, 0.50000000000000000,
15054 6.0000000000000000, 0.89999999999999991 },
15055 };
15056
15057 // Test function for a=20.000000000000000, b=0.50000000000000000, c=6.0000000000000000.
15058 template <typename Tp>
15059 void test218()
15060 {
15061 const Tp eps = std::numeric_limits<Tp>::epsilon();
15062 Tp max_abs_diff = -Tp(1);
15063 Tp max_abs_frac = -Tp(1);
15064 unsigned int num_datum = sizeof(data218)
15065 / sizeof(testcase_hyperg<double>);
15066 for (unsigned int i = 0; i < num_datum; ++i)
15067 {
15068 const Tp f = std::tr1::hyperg(Tp(data218[i].a), Tp(data218[i].b),
15069 Tp(data218[i].c), Tp(data218[i].x));
15070 const Tp f0 = data218[i].f0;
15071 const Tp diff = f - f0;
15072 if (std::abs(diff) > max_abs_diff)
15073 max_abs_diff = std::abs(diff);
15074 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
15075 {
15076 const Tp frac = diff / f0;
15077 if (std::abs(frac) > max_abs_frac)
15078 max_abs_frac = std::abs(frac);
15079 }
15080 }
15081 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
15082 }
15083
15084 // Test data for a=20.000000000000000, b=0.50000000000000000, c=8.0000000000000000.
15085 testcase_hyperg<double> data219[] = {
15086 { 0.54703266209548362, 20.000000000000000, 0.50000000000000000,
15087 8.0000000000000000, -0.90000000000000002 },
15088 { 0.56997321774144971, 20.000000000000000, 0.50000000000000000,
15089 8.0000000000000000, -0.80000000000000004 },
15090 { 0.59603026159654970, 20.000000000000000, 0.50000000000000000,
15091 8.0000000000000000, -0.69999999999999996 },
15092 { 0.62596978851120511, 20.000000000000000, 0.50000000000000000,
15093 8.0000000000000000, -0.59999999999999998 },
15094 { 0.66084565876898926, 20.000000000000000, 0.50000000000000000,
15095 8.0000000000000000, -0.50000000000000000 },
15096 { 0.70215256667232839, 20.000000000000000, 0.50000000000000000,
15097 8.0000000000000000, -0.40000000000000002 },
15098 { 0.75208916592008568, 20.000000000000000, 0.50000000000000000,
15099 8.0000000000000000, -0.30000000000000004 },
15100 { 0.81403631111658648, 20.000000000000000, 0.50000000000000000,
15101 8.0000000000000000, -0.19999999999999996 },
15102 { 0.89348608489854608, 20.000000000000000, 0.50000000000000000,
15103 8.0000000000000000, -0.099999999999999978 },
15104 { 1.0000000000000000, 20.000000000000000, 0.50000000000000000,
15105 8.0000000000000000, 0.0000000000000000 },
15106 { 1.1517793185139173, 20.000000000000000, 0.50000000000000000,
15107 8.0000000000000000, 0.10000000000000009 },
15108 { 1.3878110313656598, 20.000000000000000, 0.50000000000000000,
15109 8.0000000000000000, 0.19999999999999996 },
15110 { 1.8061071794572381, 20.000000000000000, 0.50000000000000000,
15111 8.0000000000000000, 0.30000000000000004 },
15112 { 2.7148594517859586, 20.000000000000000, 0.50000000000000000,
15113 8.0000000000000000, 0.39999999999999991 },
15114 { 5.4529435709049361, 20.000000000000000, 0.50000000000000000,
15115 8.0000000000000000, 0.50000000000000000 },
15116 { 19.487310275377109, 20.000000000000000, 0.50000000000000000,
15117 8.0000000000000000, 0.60000000000000009 },
15118 { 191.69079165937470, 20.000000000000000, 0.50000000000000000,
15119 8.0000000000000000, 0.69999999999999996 },
15120 { 10218.543981792311, 20.000000000000000, 0.50000000000000000,
15121 8.0000000000000000, 0.80000000000000004 },
15122 { 23160836.646583911, 20.000000000000000, 0.50000000000000000,
15123 8.0000000000000000, 0.89999999999999991 },
15124 };
15125
15126 // Test function for a=20.000000000000000, b=0.50000000000000000, c=8.0000000000000000.
15127 template <typename Tp>
15128 void test219()
15129 {
15130 const Tp eps = std::numeric_limits<Tp>::epsilon();
15131 Tp max_abs_diff = -Tp(1);
15132 Tp max_abs_frac = -Tp(1);
15133 unsigned int num_datum = sizeof(data219)
15134 / sizeof(testcase_hyperg<double>);
15135 for (unsigned int i = 0; i < num_datum; ++i)
15136 {
15137 const Tp f = std::tr1::hyperg(Tp(data219[i].a), Tp(data219[i].b),
15138 Tp(data219[i].c), Tp(data219[i].x));
15139 const Tp f0 = data219[i].f0;
15140 const Tp diff = f - f0;
15141 if (std::abs(diff) > max_abs_diff)
15142 max_abs_diff = std::abs(diff);
15143 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
15144 {
15145 const Tp frac = diff / f0;
15146 if (std::abs(frac) > max_abs_frac)
15147 max_abs_frac = std::abs(frac);
15148 }
15149 }
15150 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
15151 }
15152
15153 // Test data for a=20.000000000000000, b=0.50000000000000000, c=10.000000000000000.
15154 testcase_hyperg<double> data220[] = {
15155 { 0.59292067298616002, 20.000000000000000, 0.50000000000000000,
15156 10.000000000000000, -0.90000000000000002 },
15157 { 0.61572496720679915, 20.000000000000000, 0.50000000000000000,
15158 10.000000000000000, -0.80000000000000004 },
15159 { 0.64135339122875623, 20.000000000000000, 0.50000000000000000,
15160 10.000000000000000, -0.69999999999999996 },
15161 { 0.67043457419280483, 20.000000000000000, 0.50000000000000000,
15162 10.000000000000000, -0.59999999999999998 },
15163 { 0.70380956268170980, 20.000000000000000, 0.50000000000000000,
15164 10.000000000000000, -0.50000000000000000 },
15165 { 0.74263251901495231, 20.000000000000000, 0.50000000000000000,
15166 10.000000000000000, -0.40000000000000002 },
15167 { 0.78853555445528278, 20.000000000000000, 0.50000000000000000,
15168 10.000000000000000, -0.30000000000000004 },
15169 { 0.84391122775673766, 20.000000000000000, 0.50000000000000000,
15170 10.000000000000000, -0.19999999999999996 },
15171 { 0.91242401018807406, 20.000000000000000, 0.50000000000000000,
15172 10.000000000000000, -0.099999999999999978 },
15173 { 1.0000000000000000, 20.000000000000000, 0.50000000000000000,
15174 10.000000000000000, 0.0000000000000000 },
15175 { 1.1169059681274873, 20.000000000000000, 0.50000000000000000,
15176 10.000000000000000, 0.10000000000000009 },
15177 { 1.2825928301302667, 20.000000000000000, 0.50000000000000000,
15178 10.000000000000000, 0.19999999999999996 },
15179 { 1.5385937789924939, 20.000000000000000, 0.50000000000000000,
15180 10.000000000000000, 0.30000000000000004 },
15181 { 1.9895771187893898, 20.000000000000000, 0.50000000000000000,
15182 10.000000000000000, 0.39999999999999991 },
15183 { 2.9707335806970168, 20.000000000000000, 0.50000000000000000,
15184 10.000000000000000, 0.50000000000000000 },
15185 { 6.0299506157180467, 20.000000000000000, 0.50000000000000000,
15186 10.000000000000000, 0.60000000000000009 },
15187 { 24.259090336955577, 20.000000000000000, 0.50000000000000000,
15188 10.000000000000000, 0.69999999999999996 },
15189 { 406.27267173257223, 20.000000000000000, 0.50000000000000000,
15190 10.000000000000000, 0.80000000000000004 },
15191 { 174330.03997220192, 20.000000000000000, 0.50000000000000000,
15192 10.000000000000000, 0.89999999999999991 },
15193 };
15194
15195 // Test function for a=20.000000000000000, b=0.50000000000000000, c=10.000000000000000.
15196 template <typename Tp>
15197 void test220()
15198 {
15199 const Tp eps = std::numeric_limits<Tp>::epsilon();
15200 Tp max_abs_diff = -Tp(1);
15201 Tp max_abs_frac = -Tp(1);
15202 unsigned int num_datum = sizeof(data220)
15203 / sizeof(testcase_hyperg<double>);
15204 for (unsigned int i = 0; i < num_datum; ++i)
15205 {
15206 const Tp f = std::tr1::hyperg(Tp(data220[i].a), Tp(data220[i].b),
15207 Tp(data220[i].c), Tp(data220[i].x));
15208 const Tp f0 = data220[i].f0;
15209 const Tp diff = f - f0;
15210 if (std::abs(diff) > max_abs_diff)
15211 max_abs_diff = std::abs(diff);
15212 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
15213 {
15214 const Tp frac = diff / f0;
15215 if (std::abs(frac) > max_abs_frac)
15216 max_abs_frac = std::abs(frac);
15217 }
15218 }
15219 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
15220 }
15221
15222 // Test data for a=20.000000000000000, b=1.0000000000000000, c=2.0000000000000000.
15223 testcase_hyperg<double> data221[] = {
15224 { 0.058479236576646373, 20.000000000000000, 1.0000000000000000,
15225 2.0000000000000000, -0.90000000000000002 },
15226 { 0.065788544763137669, 20.000000000000000, 1.0000000000000000,
15227 2.0000000000000000, -0.80000000000000004 },
15228 { 0.075184824937824662, 20.000000000000000, 1.0000000000000000,
15229 2.0000000000000000, -0.69999999999999996 },
15230 { 0.087707688693157260, 20.000000000000000, 1.0000000000000000,
15231 2.0000000000000000, -0.59999999999999998 },
15232 { 0.10521567442213345, 20.000000000000000, 1.0000000000000000,
15233 2.0000000000000000, -0.50000000000000000 },
15234 { 0.13135877960541525, 20.000000000000000, 1.0000000000000000,
15235 2.0000000000000000, -0.40000000000000002 },
15236 { 0.17423854066297104, 20.000000000000000, 1.0000000000000000,
15237 2.0000000000000000, -0.30000000000000004 },
15238 { 0.25492082527223525, 20.000000000000000, 1.0000000000000000,
15239 2.0000000000000000, -0.19999999999999996 },
15240 { 0.44025895219654843, 20.000000000000000, 1.0000000000000000,
15241 2.0000000000000000, -0.099999999999999978 },
15242 { 1.0000000000000000, 20.000000000000000, 1.0000000000000000,
15243 2.0000000000000000, 0.0000000000000000 },
15244 { 3.3698615820910360, 20.000000000000000, 1.0000000000000000,
15245 2.0000000000000000, 0.10000000000000009 },
15246 { 17.997089220808483, 20.000000000000000, 1.0000000000000000,
15247 2.0000000000000000, 0.19999999999999996 },
15248 { 153.73298291118951, 20.000000000000000, 1.0000000000000000,
15249 2.0000000000000000, 0.30000000000000004 },
15250 { 2159.1667587825627, 20.000000000000000, 1.0000000000000000,
15251 2.0000000000000000, 0.39999999999999991 },
15252 { 55188.105263157879, 20.000000000000000, 1.0000000000000000,
15253 2.0000000000000000, 0.50000000000000000 },
15254 { 3191209.3921857267, 20.000000000000000, 1.0000000000000000,
15255 2.0000000000000000, 0.60000000000000009 },
15256 { 646910975.29152656, 20.000000000000000, 1.0000000000000000,
15257 2.0000000000000000, 0.69999999999999996 },
15258 { 1254834626850.2659, 20.000000000000000, 1.0000000000000000,
15259 2.0000000000000000, 0.80000000000000004 },
15260 { 5.8479532163741414e+17, 20.000000000000000, 1.0000000000000000,
15261 2.0000000000000000, 0.89999999999999991 },
15262 };
15263
15264 // Test function for a=20.000000000000000, b=1.0000000000000000, c=2.0000000000000000.
15265 template <typename Tp>
15266 void test221()
15267 {
15268 const Tp eps = std::numeric_limits<Tp>::epsilon();
15269 Tp max_abs_diff = -Tp(1);
15270 Tp max_abs_frac = -Tp(1);
15271 unsigned int num_datum = sizeof(data221)
15272 / sizeof(testcase_hyperg<double>);
15273 for (unsigned int i = 0; i < num_datum; ++i)
15274 {
15275 const Tp f = std::tr1::hyperg(Tp(data221[i].a), Tp(data221[i].b),
15276 Tp(data221[i].c), Tp(data221[i].x));
15277 const Tp f0 = data221[i].f0;
15278 const Tp diff = f - f0;
15279 if (std::abs(diff) > max_abs_diff)
15280 max_abs_diff = std::abs(diff);
15281 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
15282 {
15283 const Tp frac = diff / f0;
15284 if (std::abs(frac) > max_abs_frac)
15285 max_abs_frac = std::abs(frac);
15286 }
15287 }
15288 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
15289 }
15290
15291 // Test data for a=20.000000000000000, b=1.0000000000000000, c=4.0000000000000000.
15292 testcase_hyperg<double> data222[] = {
15293 { 0.15519511120894947, 20.000000000000000, 1.0000000000000000,
15294 4.0000000000000000, -0.90000000000000002 },
15295 { 0.17197165701692899, 20.000000000000000, 1.0000000000000000,
15296 4.0000000000000000, -0.80000000000000004 },
15297 { 0.19276847315207363, 20.000000000000000, 1.0000000000000000,
15298 4.0000000000000000, -0.69999999999999996 },
15299 { 0.21920107206179093, 20.000000000000000, 1.0000000000000000,
15300 4.0000000000000000, -0.59999999999999998 },
15301 { 0.25386158960390581, 20.000000000000000, 1.0000000000000000,
15302 4.0000000000000000, -0.50000000000000000 },
15303 { 0.30115970686600657, 20.000000000000000, 1.0000000000000000,
15304 4.0000000000000000, -0.40000000000000002 },
15305 { 0.36916408142057117, 20.000000000000000, 1.0000000000000000,
15306 4.0000000000000000, -0.30000000000000004 },
15307 { 0.47406175901569558, 20.000000000000000, 1.0000000000000000,
15308 4.0000000000000000, -0.19999999999999996 },
15309 { 0.65237908266239919, 20.000000000000000, 1.0000000000000000,
15310 4.0000000000000000, -0.099999999999999978 },
15311 { 1.0000000000000000, 20.000000000000000, 1.0000000000000000,
15312 4.0000000000000000, 0.0000000000000000 },
15313 { 1.8227213362622299, 20.000000000000000, 1.0000000000000000,
15314 4.0000000000000000, 0.10000000000000009 },
15315 { 4.3716358339791332, 20.000000000000000, 1.0000000000000000,
15316 4.0000000000000000, 0.19999999999999996 },
15317 { 15.670841312959222, 20.000000000000000, 1.0000000000000000,
15318 4.0000000000000000, 0.30000000000000004 },
15319 { 94.742651122760179, 20.000000000000000, 1.0000000000000000,
15320 4.0000000000000000, 0.39999999999999991 },
15321 { 1081.7275541795671, 20.000000000000000, 1.0000000000000000,
15322 4.0000000000000000, 0.50000000000000000 },
15323 { 27809.787731465960, 20.000000000000000, 1.0000000000000000,
15324 4.0000000000000000, 0.60000000000000009 },
15325 { 2329811.1715181042, 20.000000000000000, 1.0000000000000000,
15326 4.0000000000000000, 0.69999999999999996 },
15327 { 1537787532.6780224, 20.000000000000000, 1.0000000000000000,
15328 4.0000000000000000, 0.80000000000000004 },
15329 { 141562653506999.88, 20.000000000000000, 1.0000000000000000,
15330 4.0000000000000000, 0.89999999999999991 },
15331 };
15332
15333 // Test function for a=20.000000000000000, b=1.0000000000000000, c=4.0000000000000000.
15334 template <typename Tp>
15335 void test222()
15336 {
15337 const Tp eps = std::numeric_limits<Tp>::epsilon();
15338 Tp max_abs_diff = -Tp(1);
15339 Tp max_abs_frac = -Tp(1);
15340 unsigned int num_datum = sizeof(data222)
15341 / sizeof(testcase_hyperg<double>);
15342 for (unsigned int i = 0; i < num_datum; ++i)
15343 {
15344 const Tp f = std::tr1::hyperg(Tp(data222[i].a), Tp(data222[i].b),
15345 Tp(data222[i].c), Tp(data222[i].x));
15346 const Tp f0 = data222[i].f0;
15347 const Tp diff = f - f0;
15348 if (std::abs(diff) > max_abs_diff)
15349 max_abs_diff = std::abs(diff);
15350 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
15351 {
15352 const Tp frac = diff / f0;
15353 if (std::abs(frac) > max_abs_frac)
15354 max_abs_frac = std::abs(frac);
15355 }
15356 }
15357 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
15358 }
15359
15360 // Test data for a=20.000000000000000, b=1.0000000000000000, c=6.0000000000000000.
15361 testcase_hyperg<double> data223[] = {
15362 { 0.23253645591196570, 20.000000000000000, 1.0000000000000000,
15363 6.0000000000000000, -0.90000000000000002 },
15364 { 0.25484220947068353, 20.000000000000000, 1.0000000000000000,
15365 6.0000000000000000, -0.80000000000000004 },
15366 { 0.28181987881113829, 20.000000000000000, 1.0000000000000000,
15367 6.0000000000000000, -0.69999999999999996 },
15368 { 0.31508211677735765, 20.000000000000000, 1.0000000000000000,
15369 6.0000000000000000, -0.59999999999999998 },
15370 { 0.35706285886959599, 20.000000000000000, 1.0000000000000000,
15371 6.0000000000000000, -0.50000000000000000 },
15372 { 0.41160053409238195, 20.000000000000000, 1.0000000000000000,
15373 6.0000000000000000, -0.40000000000000002 },
15374 { 0.48508083111181949, 20.000000000000000, 1.0000000000000000,
15375 6.0000000000000000, -0.30000000000000004 },
15376 { 0.58885194371375260, 20.000000000000000, 1.0000000000000000,
15377 6.0000000000000000, -0.19999999999999996 },
15378 { 0.74482241684585748, 20.000000000000000, 1.0000000000000000,
15379 6.0000000000000000, -0.099999999999999978 },
15380 { 1.0000000000000000, 20.000000000000000, 1.0000000000000000,
15381 6.0000000000000000, 0.0000000000000000 },
15382 { 1.4700356864367146, 20.000000000000000, 1.0000000000000000,
15383 6.0000000000000000, 0.10000000000000009 },
15384 { 2.4955144453055143, 20.000000000000000, 1.0000000000000000,
15385 6.0000000000000000, 0.19999999999999996 },
15386 { 5.3506594845833471, 20.000000000000000, 1.0000000000000000,
15387 6.0000000000000000, 0.30000000000000004 },
15388 { 16.618413752184221, 20.000000000000000, 1.0000000000000000,
15389 6.0000000000000000, 0.39999999999999991 },
15390 { 89.310629514963878, 20.000000000000000, 1.0000000000000000,
15391 6.0000000000000000, 0.50000000000000000 },
15392 { 1029.3439900542960, 20.000000000000000, 1.0000000000000000,
15393 6.0000000000000000, 0.60000000000000009 },
15394 { 35659.847863372350, 20.000000000000000, 1.0000000000000000,
15395 6.0000000000000000, 0.69999999999999996 },
15396 { 8009309.6233230168, 20.000000000000000, 1.0000000000000000,
15397 6.0000000000000000, 0.80000000000000004 },
15398 { 145640590027.39731, 20.000000000000000, 1.0000000000000000,
15399 6.0000000000000000, 0.89999999999999991 },
15400 };
15401
15402 // Test function for a=20.000000000000000, b=1.0000000000000000, c=6.0000000000000000.
15403 template <typename Tp>
15404 void test223()
15405 {
15406 const Tp eps = std::numeric_limits<Tp>::epsilon();
15407 Tp max_abs_diff = -Tp(1);
15408 Tp max_abs_frac = -Tp(1);
15409 unsigned int num_datum = sizeof(data223)
15410 / sizeof(testcase_hyperg<double>);
15411 for (unsigned int i = 0; i < num_datum; ++i)
15412 {
15413 const Tp f = std::tr1::hyperg(Tp(data223[i].a), Tp(data223[i].b),
15414 Tp(data223[i].c), Tp(data223[i].x));
15415 const Tp f0 = data223[i].f0;
15416 const Tp diff = f - f0;
15417 if (std::abs(diff) > max_abs_diff)
15418 max_abs_diff = std::abs(diff);
15419 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
15420 {
15421 const Tp frac = diff / f0;
15422 if (std::abs(frac) > max_abs_frac)
15423 max_abs_frac = std::abs(frac);
15424 }
15425 }
15426 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
15427 }
15428
15429 // Test data for a=20.000000000000000, b=1.0000000000000000, c=8.0000000000000000.
15430 testcase_hyperg<double> data224[] = {
15431 { 0.29614148314592498, 20.000000000000000, 1.0000000000000000,
15432 8.0000000000000000, -0.90000000000000002 },
15433 { 0.32176277356430810, 20.000000000000000, 1.0000000000000000,
15434 8.0000000000000000, -0.80000000000000004 },
15435 { 0.35217870475550522, 20.000000000000000, 1.0000000000000000,
15436 8.0000000000000000, -0.69999999999999996 },
15437 { 0.38885270445515091, 20.000000000000000, 1.0000000000000000,
15438 8.0000000000000000, -0.59999999999999998 },
15439 { 0.43389978380608424, 20.000000000000000, 1.0000000000000000,
15440 8.0000000000000000, -0.50000000000000000 },
15441 { 0.49048612522269436, 20.000000000000000, 1.0000000000000000,
15442 8.0000000000000000, -0.40000000000000002 },
15443 { 0.56355539635634611, 20.000000000000000, 1.0000000000000000,
15444 8.0000000000000000, -0.30000000000000004 },
15445 { 0.66123153239117682, 20.000000000000000, 1.0000000000000000,
15446 8.0000000000000000, -0.19999999999999996 },
15447 { 0.79773363961895427, 20.000000000000000, 1.0000000000000000,
15448 8.0000000000000000, -0.099999999999999978 },
15449 { 1.0000000000000000, 20.000000000000000, 1.0000000000000000,
15450 8.0000000000000000, 0.0000000000000000 },
15451 { 1.3245132157016595, 20.000000000000000, 1.0000000000000000,
15452 8.0000000000000000, 0.10000000000000009 },
15453 { 1.9065148749742076, 20.000000000000000, 1.0000000000000000,
15454 8.0000000000000000, 0.19999999999999996 },
15455 { 3.1328798652457452, 20.000000000000000, 1.0000000000000000,
15456 8.0000000000000000, 0.30000000000000004 },
15457 { 6.4172532944033476, 20.000000000000000, 1.0000000000000000,
15458 8.0000000000000000, 0.39999999999999991 },
15459 { 19.071683734222436, 20.000000000000000, 1.0000000000000000,
15460 8.0000000000000000, 0.50000000000000000 },
15461 { 104.41989641582512, 20.000000000000000, 1.0000000000000000,
15462 8.0000000000000000, 0.60000000000000009 },
15463 { 1510.5743992324240, 20.000000000000000, 1.0000000000000000,
15464 8.0000000000000000, 0.69999999999999996 },
15465 { 115518.14360562043, 20.000000000000000, 1.0000000000000000,
15466 8.0000000000000000, 0.80000000000000004 },
15467 { 414930455.29173034, 20.000000000000000, 1.0000000000000000,
15468 8.0000000000000000, 0.89999999999999991 },
15469 };
15470
15471 // Test function for a=20.000000000000000, b=1.0000000000000000, c=8.0000000000000000.
15472 template <typename Tp>
15473 void test224()
15474 {
15475 const Tp eps = std::numeric_limits<Tp>::epsilon();
15476 Tp max_abs_diff = -Tp(1);
15477 Tp max_abs_frac = -Tp(1);
15478 unsigned int num_datum = sizeof(data224)
15479 / sizeof(testcase_hyperg<double>);
15480 for (unsigned int i = 0; i < num_datum; ++i)
15481 {
15482 const Tp f = std::tr1::hyperg(Tp(data224[i].a), Tp(data224[i].b),
15483 Tp(data224[i].c), Tp(data224[i].x));
15484 const Tp f0 = data224[i].f0;
15485 const Tp diff = f - f0;
15486 if (std::abs(diff) > max_abs_diff)
15487 max_abs_diff = std::abs(diff);
15488 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
15489 {
15490 const Tp frac = diff / f0;
15491 if (std::abs(frac) > max_abs_frac)
15492 max_abs_frac = std::abs(frac);
15493 }
15494 }
15495 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
15496 }
15497
15498 // Test data for a=20.000000000000000, b=1.0000000000000000, c=10.000000000000000.
15499 testcase_hyperg<double> data225[] = {
15500 { 0.34954259539177696, 20.000000000000000, 1.0000000000000000,
15501 10.000000000000000, -0.90000000000000002 },
15502 { 0.37714038609235123, 20.000000000000000, 1.0000000000000000,
15503 10.000000000000000, -0.80000000000000004 },
15504 { 0.40942091659748725, 20.000000000000000, 1.0000000000000000,
15505 10.000000000000000, -0.69999999999999996 },
15506 { 0.44767109606846428, 20.000000000000000, 1.0000000000000000,
15507 10.000000000000000, -0.59999999999999998 },
15508 { 0.49368984777532254, 20.000000000000000, 1.0000000000000000,
15509 10.000000000000000, -0.50000000000000000 },
15510 { 0.55006638216982318, 20.000000000000000, 1.0000000000000000,
15511 10.000000000000000, -0.40000000000000002 },
15512 { 0.62065830207408912, 20.000000000000000, 1.0000000000000000,
15513 10.000000000000000, -0.30000000000000004 },
15514 { 0.71145554513583786, 20.000000000000000, 1.0000000000000000,
15515 10.000000000000000, -0.19999999999999996 },
15516 { 0.83223839666914623, 20.000000000000000, 1.0000000000000000,
15517 10.000000000000000, -0.099999999999999978 },
15518 { 1.0000000000000000, 20.000000000000000, 1.0000000000000000,
15519 10.000000000000000, 0.0000000000000000 },
15520 { 1.2466748028187731, 20.000000000000000, 1.0000000000000000,
15521 10.000000000000000, 0.10000000000000009 },
15522 { 1.6386752725021749, 20.000000000000000, 1.0000000000000000,
15523 10.000000000000000, 0.19999999999999996 },
15524 { 2.3340068725479681, 20.000000000000000, 1.0000000000000000,
15525 10.000000000000000, 0.30000000000000004 },
15526 { 3.7848108613132054, 20.000000000000000, 1.0000000000000000,
15527 10.000000000000000, 0.39999999999999991 },
15528 { 7.6754638550304133, 20.000000000000000, 1.0000000000000000,
15529 10.000000000000000, 0.50000000000000000 },
15530 { 23.344217312927277, 20.000000000000000, 1.0000000000000000,
15531 10.000000000000000, 0.60000000000000009 },
15532 { 149.83491198246921, 20.000000000000000, 1.0000000000000000,
15533 10.000000000000000, 0.69999999999999996 },
15534 { 3936.9253501916060, 20.000000000000000, 1.0000000000000000,
15535 10.000000000000000, 0.80000000000000004 },
15536 { 2794143.5036480185, 20.000000000000000, 1.0000000000000000,
15537 10.000000000000000, 0.89999999999999991 },
15538 };
15539
15540 // Test function for a=20.000000000000000, b=1.0000000000000000, c=10.000000000000000.
15541 template <typename Tp>
15542 void test225()
15543 {
15544 const Tp eps = std::numeric_limits<Tp>::epsilon();
15545 Tp max_abs_diff = -Tp(1);
15546 Tp max_abs_frac = -Tp(1);
15547 unsigned int num_datum = sizeof(data225)
15548 / sizeof(testcase_hyperg<double>);
15549 for (unsigned int i = 0; i < num_datum; ++i)
15550 {
15551 const Tp f = std::tr1::hyperg(Tp(data225[i].a), Tp(data225[i].b),
15552 Tp(data225[i].c), Tp(data225[i].x));
15553 const Tp f0 = data225[i].f0;
15554 const Tp diff = f - f0;
15555 if (std::abs(diff) > max_abs_diff)
15556 max_abs_diff = std::abs(diff);
15557 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
15558 {
15559 const Tp frac = diff / f0;
15560 if (std::abs(frac) > max_abs_frac)
15561 max_abs_frac = std::abs(frac);
15562 }
15563 }
15564 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
15565 }
15566
15567 // Test data for a=20.000000000000000, b=2.0000000000000000, c=2.0000000000000000.
15568 testcase_hyperg<double> data226[] = {
15569 { 2.6602838683283435e-06, 20.000000000000000, 2.0000000000000000,
15570 2.0000000000000000, -0.90000000000000002 },
15571 { 7.8442223930072316e-06, 20.000000000000000, 2.0000000000000000,
15572 2.0000000000000000, -0.80000000000000004 },
15573 { 2.4604898194634598e-05, 20.000000000000000, 2.0000000000000000,
15574 2.0000000000000000, -0.69999999999999996 },
15575 { 8.2718061255302686e-05, 20.000000000000000, 2.0000000000000000,
15576 2.0000000000000000, -0.59999999999999998 },
15577 { 0.00030072865982171723, 20.000000000000000, 2.0000000000000000,
15578 2.0000000000000000, -0.50000000000000000 },
15579 { 0.0011951964277455193, 20.000000000000000, 2.0000000000000000,
15580 2.0000000000000000, -0.40000000000000002 },
15581 { 0.0052617832469731814, 20.000000000000000, 2.0000000000000000,
15582 2.0000000000000000, -0.30000000000000004 },
15583 { 0.026084053304588847, 20.000000000000000, 2.0000000000000000,
15584 2.0000000000000000, -0.19999999999999996 },
15585 { 0.14864362802414346, 20.000000000000000, 2.0000000000000000,
15586 2.0000000000000000, -0.099999999999999978 },
15587 { 1.0000000000000000, 20.000000000000000, 2.0000000000000000,
15588 2.0000000000000000, 0.0000000000000000 },
15589 { 8.2252633399699757, 20.000000000000000, 2.0000000000000000,
15590 2.0000000000000000, 0.10000000000000009 },
15591 { 86.736173798840269, 20.000000000000000, 2.0000000000000000,
15592 2.0000000000000000, 0.19999999999999996 },
15593 { 1253.2542894196865, 20.000000000000000, 2.0000000000000000,
15594 2.0000000000000000, 0.30000000000000004 },
15595 { 27351.112277912434, 20.000000000000000, 2.0000000000000000,
15596 2.0000000000000000, 0.39999999999999991 },
15597 { 1048576.0000000000, 20.000000000000000, 2.0000000000000000,
15598 2.0000000000000000, 0.50000000000000000 },
15599 { 90949470.177293226, 20.000000000000000, 2.0000000000000000,
15600 2.0000000000000000, 0.60000000000000009 },
15601 { 28679719907.924358, 20.000000000000000, 2.0000000000000000,
15602 2.0000000000000000, 0.69999999999999996 },
15603 { 95367431640624.906, 20.000000000000000, 2.0000000000000000,
15604 2.0000000000000000, 0.80000000000000004 },
15605 { 9.9999999999998657e+19, 20.000000000000000, 2.0000000000000000,
15606 2.0000000000000000, 0.89999999999999991 },
15607 };
15608
15609 // Test function for a=20.000000000000000, b=2.0000000000000000, c=2.0000000000000000.
15610 template <typename Tp>
15611 void test226()
15612 {
15613 const Tp eps = std::numeric_limits<Tp>::epsilon();
15614 Tp max_abs_diff = -Tp(1);
15615 Tp max_abs_frac = -Tp(1);
15616 unsigned int num_datum = sizeof(data226)
15617 / sizeof(testcase_hyperg<double>);
15618 for (unsigned int i = 0; i < num_datum; ++i)
15619 {
15620 const Tp f = std::tr1::hyperg(Tp(data226[i].a), Tp(data226[i].b),
15621 Tp(data226[i].c), Tp(data226[i].x));
15622 const Tp f0 = data226[i].f0;
15623 const Tp diff = f - f0;
15624 if (std::abs(diff) > max_abs_diff)
15625 max_abs_diff = std::abs(diff);
15626 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
15627 {
15628 const Tp frac = diff / f0;
15629 if (std::abs(frac) > max_abs_frac)
15630 max_abs_frac = std::abs(frac);
15631 }
15632 }
15633 VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
15634 }
15635
15636 // Test data for a=20.000000000000000, b=2.0000000000000000, c=4.0000000000000000.
15637 testcase_hyperg<double> data227[] = {
15638 { 0.018828092583720951, 20.000000000000000, 2.0000000000000000,
15639 4.0000000000000000, -0.90000000000000002 },
15640 { 0.023381944060455316, 20.000000000000000, 2.0000000000000000,
15641 4.0000000000000000, -0.80000000000000004 },
15642 { 0.029789623984280793, 20.000000000000000, 2.0000000000000000,
15643 4.0000000000000000, -0.69999999999999996 },
15644 { 0.039191021482500497, 20.000000000000000, 2.0000000000000000,
15645 4.0000000000000000, -0.59999999999999998 },
15646 { 0.053727813036721514, 20.000000000000000, 2.0000000000000000,
15647 4.0000000000000000, -0.50000000000000000 },
15648 { 0.077762010061669024, 20.000000000000000, 2.0000000000000000,
15649 4.0000000000000000, -0.40000000000000002 },
15650 { 0.12110505620123302, 20.000000000000000, 2.0000000000000000,
15651 4.0000000000000000, -0.30000000000000004 },
15652 { 0.20870149809080590, 20.000000000000000, 2.0000000000000000,
15653 4.0000000000000000, -0.19999999999999996 },
15654 { 0.41429234328785769, 20.000000000000000, 2.0000000000000000,
15655 4.0000000000000000, -0.099999999999999978 },
15656 { 1.0000000000000000, 20.000000000000000, 2.0000000000000000,
15657 4.0000000000000000, 0.0000000000000000 },
15658 { 3.1308087404153113, 20.000000000000000, 2.0000000000000000,
15659 4.0000000000000000, 0.10000000000000009 },
15660 { 13.586180626453050, 20.000000000000000, 2.0000000000000000,
15661 4.0000000000000000, 0.19999999999999996 },
15662 { 87.117304082784415, 20.000000000000000, 2.0000000000000000,
15663 4.0000000000000000, 0.30000000000000004 },
15664 { 889.26474381242826, 20.000000000000000, 2.0000000000000000,
15665 4.0000000000000000, 0.39999999999999991 },
15666 { 16231.913312693494, 20.000000000000000, 2.0000000000000000,
15667 4.0000000000000000, 0.50000000000000000 },
15668 { 653537.51168945129, 20.000000000000000, 2.0000000000000000,
15669 4.0000000000000000, 0.60000000000000009 },
15670 { 87756230.793848589, 20.000000000000000, 2.0000000000000000,
15671 4.0000000000000000, 0.69999999999999996 },
15672 { 101493977171.74945, 20.000000000000000, 2.0000000000000000,
15673 4.0000000000000000, 0.80000000000000004 },
15674 { 21375960679556916., 20.000000000000000, 2.0000000000000000,
15675 4.0000000000000000, 0.89999999999999991 },
15676 };
15677
15678 // Test function for a=20.000000000000000, b=2.0000000000000000, c=4.0000000000000000.
15679 template <typename Tp>
15680 void test227()
15681 {
15682 const Tp eps = std::numeric_limits<Tp>::epsilon();
15683 Tp max_abs_diff = -Tp(1);
15684 Tp max_abs_frac = -Tp(1);
15685 unsigned int num_datum = sizeof(data227)
15686 / sizeof(testcase_hyperg<double>);
15687 for (unsigned int i = 0; i < num_datum; ++i)
15688 {
15689 const Tp f = std::tr1::hyperg(Tp(data227[i].a), Tp(data227[i].b),
15690 Tp(data227[i].c), Tp(data227[i].x));
15691 const Tp f0 = data227[i].f0;
15692 const Tp diff = f - f0;
15693 if (std::abs(diff) > max_abs_diff)
15694 max_abs_diff = std::abs(diff);
15695 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
15696 {
15697 const Tp frac = diff / f0;
15698 if (std::abs(frac) > max_abs_frac)
15699 max_abs_frac = std::abs(frac);
15700 }
15701 }
15702 VERIFY(max_abs_frac < Tp(1.0000000000000008e-12));
15703 }
15704
15705 // Test data for a=20.000000000000000, b=2.0000000000000000, c=6.0000000000000000.
15706 testcase_hyperg<double> data228[] = {
15707 { 0.049200410661854252, 20.000000000000000, 2.0000000000000000,
15708 6.0000000000000000, -0.90000000000000002 },
15709 { 0.059460876757152226, 20.000000000000000, 2.0000000000000000,
15710 6.0000000000000000, -0.80000000000000004 },
15711 { 0.073244762686653350, 20.000000000000000, 2.0000000000000000,
15712 6.0000000000000000, -0.69999999999999996 },
15713 { 0.092334626017932922, 20.000000000000000, 2.0000000000000000,
15714 6.0000000000000000, -0.59999999999999998 },
15715 { 0.11976760350696837, 20.000000000000000, 2.0000000000000000,
15716 6.0000000000000000, -0.50000000000000000 },
15717 { 0.16102414609169383, 20.000000000000000, 2.0000000000000000,
15718 6.0000000000000000, -0.40000000000000002 },
15719 { 0.22670456785796222, 20.000000000000000, 2.0000000000000000,
15720 6.0000000000000000, -0.30000000000000004 },
15721 { 0.33912903252727361, 20.000000000000000, 2.0000000000000000,
15722 6.0000000000000000, -0.19999999999999996 },
15723 { 0.55049794600858060, 20.000000000000000, 2.0000000000000000,
15724 6.0000000000000000, -0.099999999999999978 },
15725 { 1.0000000000000000, 20.000000000000000, 2.0000000000000000,
15726 6.0000000000000000, 0.0000000000000000 },
15727 { 2.1254722872032232, 20.000000000000000, 2.0000000000000000,
15728 6.0000000000000000, 0.10000000000000009 },
15729 { 5.6261213886736172, 20.000000000000000, 2.0000000000000000,
15730 6.0000000000000000, 0.19999999999999996 },
15731 { 20.137315891130996, 20.000000000000000, 2.0000000000000000,
15732 6.0000000000000000, 0.30000000000000004 },
15733 { 108.04381584643853, 20.000000000000000, 2.0000000000000000,
15734 6.0000000000000000, 0.39999999999999991 },
15735 { 992.41692466460245, 20.000000000000000, 2.0000000000000000,
15736 6.0000000000000000, 0.50000000000000000 },
15737 { 19055.363816004465, 20.000000000000000, 2.0000000000000000,
15738 6.0000000000000000, 0.60000000000000009 },
15739 { 1105471.9504312086, 20.000000000000000, 2.0000000000000000,
15740 6.0000000000000000, 0.69999999999999996 },
15741 { 448521363.90608919, 20.000000000000000, 2.0000000000000000,
15742 6.0000000000000000, 0.80000000000000004 },
15743 { 19078917293639.004, 20.000000000000000, 2.0000000000000000,
15744 6.0000000000000000, 0.89999999999999991 },
15745 };
15746
15747 // Test function for a=20.000000000000000, b=2.0000000000000000, c=6.0000000000000000.
15748 template <typename Tp>
15749 void test228()
15750 {
15751 const Tp eps = std::numeric_limits<Tp>::epsilon();
15752 Tp max_abs_diff = -Tp(1);
15753 Tp max_abs_frac = -Tp(1);
15754 unsigned int num_datum = sizeof(data228)
15755 / sizeof(testcase_hyperg<double>);
15756 for (unsigned int i = 0; i < num_datum; ++i)
15757 {
15758 const Tp f = std::tr1::hyperg(Tp(data228[i].a), Tp(data228[i].b),
15759 Tp(data228[i].c), Tp(data228[i].x));
15760 const Tp f0 = data228[i].f0;
15761 const Tp diff = f - f0;
15762 if (std::abs(diff) > max_abs_diff)
15763 max_abs_diff = std::abs(diff);
15764 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
15765 {
15766 const Tp frac = diff / f0;
15767 if (std::abs(frac) > max_abs_frac)
15768 max_abs_frac = std::abs(frac);
15769 }
15770 }
15771 VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
15772 }
15773
15774 // Test data for a=20.000000000000000, b=2.0000000000000000, c=8.0000000000000000.
15775 testcase_hyperg<double> data229[] = {
15776 { 0.083753547015334745, 20.000000000000000, 2.0000000000000000,
15777 8.0000000000000000, -0.90000000000000002 },
15778 { 0.099238444687035701, 20.000000000000000, 2.0000000000000000,
15779 8.0000000000000000, -0.80000000000000004 },
15780 { 0.11938294012867758, 20.000000000000000, 2.0000000000000000,
15781 8.0000000000000000, -0.69999999999999996 },
15782 { 0.14622683905023326, 20.000000000000000, 2.0000000000000000,
15783 8.0000000000000000, -0.59999999999999998 },
15784 { 0.18303556733713025, 20.000000000000000, 2.0000000000000000,
15785 8.0000000000000000, -0.50000000000000000 },
15786 { 0.23527764069382409, 20.000000000000000, 2.0000000000000000,
15787 8.0000000000000000, -0.40000000000000002 },
15788 { 0.31261681740827085, 20.000000000000000, 2.0000000000000000,
15789 8.0000000000000000, -0.30000000000000004 },
15790 { 0.43327581880538862, 20.000000000000000, 2.0000000000000000,
15791 8.0000000000000000, -0.19999999999999996 },
15792 { 0.63445840637296658, 20.000000000000000, 2.0000000000000000,
15793 8.0000000000000000, -0.099999999999999978 },
15794 { 1.0000000000000000, 20.000000000000000, 2.0000000000000000,
15795 8.0000000000000000, 0.0000000000000000 },
15796 { 1.7438842395813297, 20.000000000000000, 2.0000000000000000,
15797 8.0000000000000000, 0.10000000000000009 },
15798 { 3.5070840938209269, 20.000000000000000, 2.0000000000000000,
15799 8.0000000000000000, 0.19999999999999996 },
15800 { 8.6573372006089713, 20.000000000000000, 2.0000000000000000,
15801 8.0000000000000000, 0.30000000000000004 },
15802 { 28.779342118408906, 20.000000000000000, 2.0000000000000000,
15803 8.0000000000000000, 0.39999999999999991 },
15804 { 147.50178613955714, 20.000000000000000, 2.0000000000000000,
15805 8.0000000000000000, 0.50000000000000000 },
15806 { 1427.1686016136398, 20.000000000000000, 2.0000000000000000,
15807 8.0000000000000000, 0.60000000000000009 },
15808 { 36780.643714655642, 20.000000000000000, 2.0000000000000000,
15809 8.0000000000000000, 0.69999999999999996 },
15810 { 5313869.6058585485, 20.000000000000000, 2.0000000000000000,
15811 8.0000000000000000, 0.80000000000000004 },
15812 { 46057280607.381966, 20.000000000000000, 2.0000000000000000,
15813 8.0000000000000000, 0.89999999999999991 },
15814 };
15815
15816 // Test function for a=20.000000000000000, b=2.0000000000000000, c=8.0000000000000000.
15817 template <typename Tp>
15818 void test229()
15819 {
15820 const Tp eps = std::numeric_limits<Tp>::epsilon();
15821 Tp max_abs_diff = -Tp(1);
15822 Tp max_abs_frac = -Tp(1);
15823 unsigned int num_datum = sizeof(data229)
15824 / sizeof(testcase_hyperg<double>);
15825 for (unsigned int i = 0; i < num_datum; ++i)
15826 {
15827 const Tp f = std::tr1::hyperg(Tp(data229[i].a), Tp(data229[i].b),
15828 Tp(data229[i].c), Tp(data229[i].x));
15829 const Tp f0 = data229[i].f0;
15830 const Tp diff = f - f0;
15831 if (std::abs(diff) > max_abs_diff)
15832 max_abs_diff = std::abs(diff);
15833 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
15834 {
15835 const Tp frac = diff / f0;
15836 if (std::abs(frac) > max_abs_frac)
15837 max_abs_frac = std::abs(frac);
15838 }
15839 }
15840 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
15841 }
15842
15843 // Test data for a=20.000000000000000, b=2.0000000000000000, c=10.000000000000000.
15844 testcase_hyperg<double> data230[] = {
15845 { 0.11920045035073683, 20.000000000000000, 2.0000000000000000,
15846 10.000000000000000, -0.90000000000000002 },
15847 { 0.13907946814302774, 20.000000000000000, 2.0000000000000000,
15848 10.000000000000000, -0.80000000000000004 },
15849 { 0.16431439792559688, 20.000000000000000, 2.0000000000000000,
15850 10.000000000000000, -0.69999999999999996 },
15851 { 0.19698796016987008, 20.000000000000000, 2.0000000000000000,
15852 10.000000000000000, -0.59999999999999998 },
15853 { 0.24028510928790570, 20.000000000000000, 2.0000000000000000,
15854 10.000000000000000, -0.50000000000000000 },
15855 { 0.29926031296483119, 20.000000000000000, 2.0000000000000000,
15856 10.000000000000000, -0.40000000000000002 },
15857 { 0.38229327814229169, 20.000000000000000, 2.0000000000000000,
15858 10.000000000000000, -0.30000000000000004 },
15859 { 0.50402047283093110, 20.000000000000000, 2.0000000000000000,
15860 10.000000000000000, -0.19999999999999996 },
15861 { 0.69167261179586503, 20.000000000000000, 2.0000000000000000,
15862 10.000000000000000, -0.099999999999999978 },
15863 { 1.0000000000000000, 20.000000000000000, 2.0000000000000000,
15864 10.000000000000000, 0.0000000000000000 },
15865 { 1.5503152253394308, 20.000000000000000, 2.0000000000000000,
15866 10.000000000000000, 0.10000000000000009 },
15867 { 2.6469548193635797, 20.000000000000000, 2.0000000000000000,
15868 10.000000000000000, 0.19999999999999996 },
15869 { 5.1882631330566813, 20.000000000000000, 2.0000000000000000,
15870 10.000000000000000, 0.30000000000000004 },
15871 { 12.476792759124516, 20.000000000000000, 2.0000000000000000,
15872 10.000000000000000, 0.39999999999999991 },
15873 { 41.026391565091259, 20.000000000000000, 2.0000000000000000,
15874 10.000000000000000, 0.50000000000000000 },
15875 { 220.92584715988204, 20.000000000000000, 2.0000000000000000,
15876 10.000000000000000, 0.60000000000000009 },
15877 { 2677.0834450236207, 20.000000000000000, 2.0000000000000000,
15878 10.000000000000000, 0.69999999999999996 },
15879 { 141774.31260689779, 20.000000000000000, 2.0000000000000000,
15880 10.000000000000000, 0.80000000000000004 },
15881 { 254267148.83196995, 20.000000000000000, 2.0000000000000000,
15882 10.000000000000000, 0.89999999999999991 },
15883 };
15884
15885 // Test function for a=20.000000000000000, b=2.0000000000000000, c=10.000000000000000.
15886 template <typename Tp>
15887 void test230()
15888 {
15889 const Tp eps = std::numeric_limits<Tp>::epsilon();
15890 Tp max_abs_diff = -Tp(1);
15891 Tp max_abs_frac = -Tp(1);
15892 unsigned int num_datum = sizeof(data230)
15893 / sizeof(testcase_hyperg<double>);
15894 for (unsigned int i = 0; i < num_datum; ++i)
15895 {
15896 const Tp f = std::tr1::hyperg(Tp(data230[i].a), Tp(data230[i].b),
15897 Tp(data230[i].c), Tp(data230[i].x));
15898 const Tp f0 = data230[i].f0;
15899 const Tp diff = f - f0;
15900 if (std::abs(diff) > max_abs_diff)
15901 max_abs_diff = std::abs(diff);
15902 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
15903 {
15904 const Tp frac = diff / f0;
15905 if (std::abs(frac) > max_abs_frac)
15906 max_abs_frac = std::abs(frac);
15907 }
15908 }
15909 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
15910 }
15911
15912 // Test data for a=20.000000000000000, b=5.0000000000000000, c=2.0000000000000000.
15913 testcase_hyperg<double> data231[] = {
15914 { -1.8650300348791041e-05, 20.000000000000000, 5.0000000000000000,
15915 2.0000000000000000, -0.90000000000000002 },
15916 { -3.6488008415183135e-05, 20.000000000000000, 5.0000000000000000,
15917 2.0000000000000000, -0.80000000000000004 },
15918 { -6.4614776410999025e-05, 20.000000000000000, 5.0000000000000000,
15919 2.0000000000000000, -0.69999999999999996 },
15920 { -8.4495207102575916e-05, 20.000000000000000, 5.0000000000000000,
15921 2.0000000000000000, -0.59999999999999998 },
15922 { 2.2276197023819217e-05, 20.000000000000000, 5.0000000000000000,
15923 2.0000000000000000, -0.50000000000000000 },
15924 { 0.00070736115111467578, 20.000000000000000, 5.0000000000000000,
15925 2.0000000000000000, -0.40000000000000002 },
15926 { 0.0027829732057272809, 20.000000000000000, 5.0000000000000000,
15927 2.0000000000000000, -0.30000000000000004 },
15928 { 0.0013283545664373570, 20.000000000000000, 5.0000000000000000,
15929 2.0000000000000000, -0.19999999999999996 },
15930 { -0.041767631015048733, 20.000000000000000, 5.0000000000000000,
15931 2.0000000000000000, -0.099999999999999978 },
15932 { 1.0000000000000000, 20.000000000000000, 5.0000000000000000,
15933 2.0000000000000000, 0.0000000000000000 },
15934 { 61.311496556100003, 20.000000000000000, 5.0000000000000000,
15935 2.0000000000000000, 0.10000000000000009 },
15936 { 2397.4420539085681, 20.000000000000000, 5.0000000000000000,
15937 2.0000000000000000, 0.19999999999999996 },
15938 { 103687.60998586559, 20.000000000000000, 5.0000000000000000,
15939 2.0000000000000000, 0.30000000000000004 },
15940 { 6247196.6451068865, 20.000000000000000, 5.0000000000000000,
15941 2.0000000000000000, 0.39999999999999991 },
15942 { 656408576.00000000, 20.000000000000000, 5.0000000000000000,
15943 2.0000000000000000, 0.50000000000000000 },
15944 { 165334768098.54715, 20.000000000000000, 5.0000000000000000,
15945 2.0000000000000000, 0.60000000000000009 },
15946 { 175097125520816.81, 20.000000000000000, 5.0000000000000000,
15947 2.0000000000000000, 0.69999999999999996 },
15948 { 2.6818275451660257e+18, 20.000000000000000, 5.0000000000000000,
15949 2.0000000000000000, 0.80000000000000004 },
15950 { 2.9794599999999321e+25, 20.000000000000000, 5.0000000000000000,
15951 2.0000000000000000, 0.89999999999999991 },
15952 };
15953
15954 // Test function for a=20.000000000000000, b=5.0000000000000000, c=2.0000000000000000.
15955 template <typename Tp>
15956 void test231()
15957 {
15958 const Tp eps = std::numeric_limits<Tp>::epsilon();
15959 Tp max_abs_diff = -Tp(1);
15960 Tp max_abs_frac = -Tp(1);
15961 unsigned int num_datum = sizeof(data231)
15962 / sizeof(testcase_hyperg<double>);
15963 for (unsigned int i = 0; i < num_datum; ++i)
15964 {
15965 const Tp f = std::tr1::hyperg(Tp(data231[i].a), Tp(data231[i].b),
15966 Tp(data231[i].c), Tp(data231[i].x));
15967 const Tp f0 = data231[i].f0;
15968 const Tp diff = f - f0;
15969 if (std::abs(diff) > max_abs_diff)
15970 max_abs_diff = std::abs(diff);
15971 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
15972 {
15973 const Tp frac = diff / f0;
15974 if (std::abs(frac) > max_abs_frac)
15975 max_abs_frac = std::abs(frac);
15976 }
15977 }
15978 VERIFY(max_abs_frac < Tp(5.0000000000000034e-10));
15979 }
15980
15981 // Test data for a=20.000000000000000, b=5.0000000000000000, c=4.0000000000000000.
15982 testcase_hyperg<double> data232[] = {
15983 { -3.6403884515183385e-06, 20.000000000000000, 5.0000000000000000,
15984 4.0000000000000000, -0.90000000000000002 },
15985 { -9.5873829247725586e-06, 20.000000000000000, 5.0000000000000000,
15986 4.0000000000000000, -0.80000000000000004 },
15987 { -2.6052245147354694e-05, 20.000000000000000, 5.0000000000000000,
15988 4.0000000000000000, -0.69999999999999996 },
15989 { -7.2378303598294010e-05, 20.000000000000000, 5.0000000000000000,
15990 4.0000000000000000, -0.59999999999999998 },
15991 { -0.00020048577321454082, 20.000000000000000, 5.0000000000000000,
15992 4.0000000000000000, -0.50000000000000000 },
15993 { -0.00051222704046236022, 20.000000000000000, 5.0000000000000000,
15994 4.0000000000000000, -0.40000000000000002 },
15995 { -0.00080950511491911315, 20.000000000000000, 5.0000000000000000,
15996 4.0000000000000000, -0.30000000000000004 },
15997 { 0.0043473422174314449, 20.000000000000000, 5.0000000000000000,
15998 4.0000000000000000, -0.19999999999999996 },
15999 { 0.081078342558623825, 20.000000000000000, 5.0000000000000000,
16000 4.0000000000000000, -0.099999999999999978 },
16001 { 1.0000000000000000, 20.000000000000000, 5.0000000000000000,
16002 4.0000000000000000, 0.0000000000000000 },
16003 { 12.794854084397739, 20.000000000000000, 5.0000000000000000,
16004 4.0000000000000000, 0.10000000000000009 },
16005 { 195.15639104739046, 20.000000000000000, 5.0000000000000000,
16006 4.0000000000000000, 0.19999999999999996 },
16007 { 3938.7991953190131, 20.000000000000000, 5.0000000000000000,
16008 4.0000000000000000, 0.30000000000000004 },
16009 { 118521.48653762060, 20.000000000000000, 5.0000000000000000,
16010 4.0000000000000000, 0.39999999999999991 },
16011 { 6291455.9999999972, 20.000000000000000, 5.0000000000000000,
16012 4.0000000000000000, 0.50000000000000000 },
16013 { 773070496.50699198, 20.000000000000000, 5.0000000000000000,
16014 4.0000000000000000, 0.60000000000000009 },
16015 { 363276452167.04102, 20.000000000000000, 5.0000000000000000,
16016 4.0000000000000000, 0.69999999999999996 },
16017 { 2002716064453133.0, 20.000000000000000, 5.0000000000000000,
16018 4.0000000000000000, 0.80000000000000004 },
16019 { 4.5999999999999109e+21, 20.000000000000000, 5.0000000000000000,
16020 4.0000000000000000, 0.89999999999999991 },
16021 };
16022
16023 // Test function for a=20.000000000000000, b=5.0000000000000000, c=4.0000000000000000.
16024 template <typename Tp>
16025 void test232()
16026 {
16027 const Tp eps = std::numeric_limits<Tp>::epsilon();
16028 Tp max_abs_diff = -Tp(1);
16029 Tp max_abs_frac = -Tp(1);
16030 unsigned int num_datum = sizeof(data232)
16031 / sizeof(testcase_hyperg<double>);
16032 for (unsigned int i = 0; i < num_datum; ++i)
16033 {
16034 const Tp f = std::tr1::hyperg(Tp(data232[i].a), Tp(data232[i].b),
16035 Tp(data232[i].c), Tp(data232[i].x));
16036 const Tp f0 = data232[i].f0;
16037 const Tp diff = f - f0;
16038 if (std::abs(diff) > max_abs_diff)
16039 max_abs_diff = std::abs(diff);
16040 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
16041 {
16042 const Tp frac = diff / f0;
16043 if (std::abs(frac) > max_abs_frac)
16044 max_abs_frac = std::abs(frac);
16045 }
16046 }
16047 VERIFY(max_abs_frac < Tp(2.5000000000000013e-09));
16048 }
16049
16050 // Test data for a=20.000000000000000, b=5.0000000000000000, c=6.0000000000000000.
16051 testcase_hyperg<double> data233[] = {
16052 { 0.00014313323624069244, 20.000000000000000, 5.0000000000000000,
16053 6.0000000000000000, -0.90000000000000002 },
16054 { 0.00025426183473140697, 20.000000000000000, 5.0000000000000000,
16055 6.0000000000000000, -0.80000000000000004 },
16056 { 0.00048255612836426809, 20.000000000000000, 5.0000000000000000,
16057 6.0000000000000000, -0.69999999999999996 },
16058 { 0.00099096904674788092, 20.000000000000000, 5.0000000000000000,
16059 6.0000000000000000, -0.59999999999999998 },
16060 { 0.0022347805521915607, 20.000000000000000, 5.0000000000000000,
16061 6.0000000000000000, -0.50000000000000000 },
16062 { 0.0056271390060292376, 20.000000000000000, 5.0000000000000000,
16063 6.0000000000000000, -0.40000000000000002 },
16064 { 0.016109059519227226, 20.000000000000000, 5.0000000000000000,
16065 6.0000000000000000, -0.30000000000000004 },
16066 { 0.053453465775608999, 20.000000000000000, 5.0000000000000000,
16067 6.0000000000000000, -0.19999999999999996 },
16068 { 0.20995202901839258, 20.000000000000000, 5.0000000000000000,
16069 6.0000000000000000, -0.099999999999999978 },
16070 { 1.0000000000000000, 20.000000000000000, 5.0000000000000000,
16071 6.0000000000000000, 0.0000000000000000 },
16072 { 5.9534372167648799, 20.000000000000000, 5.0000000000000000,
16073 6.0000000000000000, 0.10000000000000009 },
16074 { 46.157632071205875, 20.000000000000000, 5.0000000000000000,
16075 6.0000000000000000, 0.19999999999999996 },
16076 { 494.32074431164915, 20.000000000000000, 5.0000000000000000,
16077 6.0000000000000000, 0.30000000000000004 },
16078 { 7989.5277611775946, 20.000000000000000, 5.0000000000000000,
16079 6.0000000000000000, 0.39999999999999991 },
16080 { 224179.55830753347, 20.000000000000000, 5.0000000000000000,
16081 6.0000000000000000, 0.50000000000000000 },
16082 { 13848144.485282511, 20.000000000000000, 5.0000000000000000,
16083 6.0000000000000000, 0.60000000000000009 },
16084 { 2948587692.8891716, 20.000000000000000, 5.0000000000000000,
16085 6.0000000000000000, 0.69999999999999996 },
16086 { 5940513286161.6602, 20.000000000000000, 5.0000000000000000,
16087 6.0000000000000000, 0.80000000000000004 },
16088 { 2.8531757655945201e+18, 20.000000000000000, 5.0000000000000000,
16089 6.0000000000000000, 0.89999999999999991 },
16090 };
16091
16092 // Test function for a=20.000000000000000, b=5.0000000000000000, c=6.0000000000000000.
16093 template <typename Tp>
16094 void test233()
16095 {
16096 const Tp eps = std::numeric_limits<Tp>::epsilon();
16097 Tp max_abs_diff = -Tp(1);
16098 Tp max_abs_frac = -Tp(1);
16099 unsigned int num_datum = sizeof(data233)
16100 / sizeof(testcase_hyperg<double>);
16101 for (unsigned int i = 0; i < num_datum; ++i)
16102 {
16103 const Tp f = std::tr1::hyperg(Tp(data233[i].a), Tp(data233[i].b),
16104 Tp(data233[i].c), Tp(data233[i].x));
16105 const Tp f0 = data233[i].f0;
16106 const Tp diff = f - f0;
16107 if (std::abs(diff) > max_abs_diff)
16108 max_abs_diff = std::abs(diff);
16109 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
16110 {
16111 const Tp frac = diff / f0;
16112 if (std::abs(frac) > max_abs_frac)
16113 max_abs_frac = std::abs(frac);
16114 }
16115 }
16116 VERIFY(max_abs_frac < Tp(1.0000000000000006e-10));
16117 }
16118
16119 // Test data for a=20.000000000000000, b=5.0000000000000000, c=8.0000000000000000.
16120 testcase_hyperg<double> data234[] = {
16121 { 0.0012492049968742865, 20.000000000000000, 5.0000000000000000,
16122 8.0000000000000000, -0.90000000000000002 },
16123 { 0.0019931241968014451, 20.000000000000000, 5.0000000000000000,
16124 8.0000000000000000, -0.80000000000000004 },
16125 { 0.0033203386861411057, 20.000000000000000, 5.0000000000000000,
16126 8.0000000000000000, -0.69999999999999996 },
16127 { 0.0058191894509855282, 20.000000000000000, 5.0000000000000000,
16128 8.0000000000000000, -0.59999999999999998 },
16129 { 0.010830090368313866, 20.000000000000000, 5.0000000000000000,
16130 8.0000000000000000, -0.50000000000000000 },
16131 { 0.021653062305193163, 20.000000000000000, 5.0000000000000000,
16132 8.0000000000000000, -0.40000000000000002 },
16133 { 0.047180821280919084, 20.000000000000000, 5.0000000000000000,
16134 8.0000000000000000, -0.30000000000000004 },
16135 { 0.11405637279736180, 20.000000000000000, 5.0000000000000000,
16136 8.0000000000000000, -0.19999999999999996 },
16137 { 0.31275468794720990, 20.000000000000000, 5.0000000000000000,
16138 8.0000000000000000, -0.099999999999999978 },
16139 { 1.0000000000000000, 20.000000000000000, 5.0000000000000000,
16140 8.0000000000000000, 0.0000000000000000 },
16141 { 3.8598904658643969, 20.000000000000000, 5.0000000000000000,
16142 8.0000000000000000, 0.10000000000000009 },
16143 { 18.806301417906667, 20.000000000000000, 5.0000000000000000,
16144 8.0000000000000000, 0.19999999999999996 },
16145 { 122.77054465017432, 20.000000000000000, 5.0000000000000000,
16146 8.0000000000000000, 0.30000000000000004 },
16147 { 1168.4762146808946, 20.000000000000000, 5.0000000000000000,
16148 8.0000000000000000, 0.39999999999999991 },
16149 { 18437.511788521082, 20.000000000000000, 5.0000000000000000,
16150 8.0000000000000000, 0.50000000000000000 },
16151 { 597441.79669264762, 20.000000000000000, 5.0000000000000000,
16152 8.0000000000000000, 0.60000000000000009 },
16153 { 59390411.369227782, 20.000000000000000, 5.0000000000000000,
16154 8.0000000000000000, 0.69999999999999996 },
16155 { 44681668993.361603, 20.000000000000000, 5.0000000000000000,
16156 8.0000000000000000, 0.80000000000000004 },
16157 { 4559673269683164.0, 20.000000000000000, 5.0000000000000000,
16158 8.0000000000000000, 0.89999999999999991 },
16159 };
16160
16161 // Test function for a=20.000000000000000, b=5.0000000000000000, c=8.0000000000000000.
16162 template <typename Tp>
16163 void test234()
16164 {
16165 const Tp eps = std::numeric_limits<Tp>::epsilon();
16166 Tp max_abs_diff = -Tp(1);
16167 Tp max_abs_frac = -Tp(1);
16168 unsigned int num_datum = sizeof(data234)
16169 / sizeof(testcase_hyperg<double>);
16170 for (unsigned int i = 0; i < num_datum; ++i)
16171 {
16172 const Tp f = std::tr1::hyperg(Tp(data234[i].a), Tp(data234[i].b),
16173 Tp(data234[i].c), Tp(data234[i].x));
16174 const Tp f0 = data234[i].f0;
16175 const Tp diff = f - f0;
16176 if (std::abs(diff) > max_abs_diff)
16177 max_abs_diff = std::abs(diff);
16178 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
16179 {
16180 const Tp frac = diff / f0;
16181 if (std::abs(frac) > max_abs_frac)
16182 max_abs_frac = std::abs(frac);
16183 }
16184 }
16185 VERIFY(max_abs_frac < Tp(1.0000000000000006e-11));
16186 }
16187
16188 // Test data for a=20.000000000000000, b=5.0000000000000000, c=10.000000000000000.
16189 testcase_hyperg<double> data235[] = {
16190 { 0.0038867957051371450, 20.000000000000000, 5.0000000000000000,
16191 10.000000000000000, -0.90000000000000002 },
16192 { 0.0058484892597364443, 20.000000000000000, 5.0000000000000000,
16193 10.000000000000000, -0.80000000000000004 },
16194 { 0.0090987656053757009, 20.000000000000000, 5.0000000000000000,
16195 10.000000000000000, -0.69999999999999996 },
16196 { 0.014714392537270733, 20.000000000000000, 5.0000000000000000,
16197 10.000000000000000, -0.59999999999999998 },
16198 { 0.024900404542056769, 20.000000000000000, 5.0000000000000000,
16199 10.000000000000000, -0.50000000000000000 },
16200 { 0.044460184663785055, 20.000000000000000, 5.0000000000000000,
16201 10.000000000000000, -0.40000000000000002 },
16202 { 0.084638849196356836, 20.000000000000000, 5.0000000000000000,
16203 10.000000000000000, -0.30000000000000004 },
16204 { 0.17409058241290998, 20.000000000000000, 5.0000000000000000,
16205 10.000000000000000, -0.19999999999999996 },
16206 { 0.39357055823580755, 20.000000000000000, 5.0000000000000000,
16207 10.000000000000000, -0.099999999999999978 },
16208 { 1.0000000000000000, 20.000000000000000, 5.0000000000000000,
16209 10.000000000000000, 0.0000000000000000 },
16210 { 2.9410794636226596, 20.000000000000000, 5.0000000000000000,
16211 10.000000000000000, 0.10000000000000009 },
16212 { 10.417226071414344, 20.000000000000000, 5.0000000000000000,
16213 10.000000000000000, 0.19999999999999996 },
16214 { 46.930585873140835, 20.000000000000000, 5.0000000000000000,
16215 10.000000000000000, 0.30000000000000004 },
16216 { 290.76717121814852, 20.000000000000000, 5.0000000000000000,
16217 10.000000000000000, 0.39999999999999991 },
16218 { 2788.1641083374830, 20.000000000000000, 5.0000000000000000,
16219 10.000000000000000, 0.50000000000000000 },
16220 { 50228.117718560752, 20.000000000000000, 5.0000000000000000,
16221 10.000000000000000, 0.60000000000000009 },
16222 { 2433042.3476752634, 20.000000000000000, 5.0000000000000000,
16223 10.000000000000000, 0.69999999999999996 },
16224 { 705345246.77141762, 20.000000000000000, 5.0000000000000000,
16225 10.000000000000000, 0.80000000000000004 },
16226 { 15652478868616.762, 20.000000000000000, 5.0000000000000000,
16227 10.000000000000000, 0.89999999999999991 },
16228 };
16229
16230 // Test function for a=20.000000000000000, b=5.0000000000000000, c=10.000000000000000.
16231 template <typename Tp>
16232 void test235()
16233 {
16234 const Tp eps = std::numeric_limits<Tp>::epsilon();
16235 Tp max_abs_diff = -Tp(1);
16236 Tp max_abs_frac = -Tp(1);
16237 unsigned int num_datum = sizeof(data235)
16238 / sizeof(testcase_hyperg<double>);
16239 for (unsigned int i = 0; i < num_datum; ++i)
16240 {
16241 const Tp f = std::tr1::hyperg(Tp(data235[i].a), Tp(data235[i].b),
16242 Tp(data235[i].c), Tp(data235[i].x));
16243 const Tp f0 = data235[i].f0;
16244 const Tp diff = f - f0;
16245 if (std::abs(diff) > max_abs_diff)
16246 max_abs_diff = std::abs(diff);
16247 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
16248 {
16249 const Tp frac = diff / f0;
16250 if (std::abs(frac) > max_abs_frac)
16251 max_abs_frac = std::abs(frac);
16252 }
16253 }
16254 VERIFY(max_abs_frac < Tp(1.0000000000000008e-12));
16255 }
16256
16257 // Test data for a=20.000000000000000, b=10.000000000000000, c=2.0000000000000000.
16258 testcase_hyperg<double> data236[] = {
16259 { -2.1776535308707967e-07, 20.000000000000000, 10.000000000000000,
16260 2.0000000000000000, -0.90000000000000002 },
16261 { -2.9128833151427998e-06, 20.000000000000000, 10.000000000000000,
16262 2.0000000000000000, -0.80000000000000004 },
16263 { -9.4755553429035093e-06, 20.000000000000000, 10.000000000000000,
16264 2.0000000000000000, -0.69999999999999996 },
16265 { -1.2844297353813116e-05, 20.000000000000000, 10.000000000000000,
16266 2.0000000000000000, -0.59999999999999998 },
16267 { 3.6576965483568809e-05, 20.000000000000000, 10.000000000000000,
16268 2.0000000000000000, -0.50000000000000000 },
16269 { 0.00020847453890692649, 20.000000000000000, 10.000000000000000,
16270 2.0000000000000000, -0.40000000000000002 },
16271 { -0.00022868510398174632, 20.000000000000000, 10.000000000000000,
16272 2.0000000000000000, -0.30000000000000004 },
16273 { -0.0021855513841942732, 20.000000000000000, 10.000000000000000,
16274 2.0000000000000000, -0.19999999999999996 },
16275 { 0.014662111759334634, 20.000000000000000, 10.000000000000000,
16276 2.0000000000000000, -0.099999999999999978 },
16277 { 1.0000000000000000, 20.000000000000000, 10.000000000000000,
16278 2.0000000000000000, 0.0000000000000000 },
16279 { 746.44776348798098, 20.000000000000000, 10.000000000000000,
16280 2.0000000000000000, 0.10000000000000009 },
16281 { 136080.48445225612, 20.000000000000000, 10.000000000000000,
16282 2.0000000000000000, 0.19999999999999996 },
16283 { 23094279.597826406, 20.000000000000000, 10.000000000000000,
16284 2.0000000000000000, 0.30000000000000004 },
16285 { 5315913395.5545301, 20.000000000000000, 10.000000000000000,
16286 2.0000000000000000, 0.39999999999999991 },
16287 { 2261935718399.9990, 20.000000000000000, 10.000000000000000,
16288 2.0000000000000000, 0.50000000000000000 },
16289 { 2669150854828235.0, 20.000000000000000, 10.000000000000000,
16290 2.0000000000000000, 0.60000000000000009 },
16291 { 1.7499363099365994e+19, 20.000000000000000, 10.000000000000000,
16292 2.0000000000000000, 0.69999999999999996 },
16293 { 2.8881518494606140e+24, 20.000000000000000, 10.000000000000000,
16294 2.0000000000000000, 0.80000000000000004 },
16295 { 1.4165513933661626e+33, 20.000000000000000, 10.000000000000000,
16296 2.0000000000000000, 0.89999999999999991 },
16297 };
16298
16299 // Test function for a=20.000000000000000, b=10.000000000000000, c=2.0000000000000000.
16300 template <typename Tp>
16301 void test236()
16302 {
16303 const Tp eps = std::numeric_limits<Tp>::epsilon();
16304 Tp max_abs_diff = -Tp(1);
16305 Tp max_abs_frac = -Tp(1);
16306 unsigned int num_datum = sizeof(data236)
16307 / sizeof(testcase_hyperg<double>);
16308 for (unsigned int i = 0; i < num_datum; ++i)
16309 {
16310 const Tp f = std::tr1::hyperg(Tp(data236[i].a), Tp(data236[i].b),
16311 Tp(data236[i].c), Tp(data236[i].x));
16312 const Tp f0 = data236[i].f0;
16313 const Tp diff = f - f0;
16314 if (std::abs(diff) > max_abs_diff)
16315 max_abs_diff = std::abs(diff);
16316 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
16317 {
16318 const Tp frac = diff / f0;
16319 if (std::abs(frac) > max_abs_frac)
16320 max_abs_frac = std::abs(frac);
16321 }
16322 }
16323 VERIFY(max_abs_frac < Tp(1.0000000000000005e-08));
16324 }
16325
16326 // Test data for a=20.000000000000000, b=10.000000000000000, c=4.0000000000000000.
16327 testcase_hyperg<double> data237[] = {
16328 { 1.7149006973860441e-07, 20.000000000000000, 10.000000000000000,
16329 4.0000000000000000, -0.90000000000000002 },
16330 { 3.2399324904088936e-07, 20.000000000000000, 10.000000000000000,
16331 4.0000000000000000, -0.80000000000000004 },
16332 { 1.6015317712089860e-07, 20.000000000000000, 10.000000000000000,
16333 4.0000000000000000, -0.69999999999999996 },
16334 { -2.0500917204199595e-06, 20.000000000000000, 10.000000000000000,
16335 4.0000000000000000, -0.59999999999999998 },
16336 { -1.0175546788599472e-05, 20.000000000000000, 10.000000000000000,
16337 4.0000000000000000, -0.50000000000000000 },
16338 { -1.1720101988202453e-05, 20.000000000000000, 10.000000000000000,
16339 4.0000000000000000, -0.40000000000000002 },
16340 { 0.00014199637113974185, 20.000000000000000, 10.000000000000000,
16341 4.0000000000000000, -0.30000000000000004 },
16342 { 0.00021263363640642297, 20.000000000000000, 10.000000000000000,
16343 4.0000000000000000, -0.19999999999999996 },
16344 { -0.0072649256698441751, 20.000000000000000, 10.000000000000000,
16345 4.0000000000000000, -0.099999999999999978 },
16346 { 1.0000000000000000, 20.000000000000000, 10.000000000000000,
16347 4.0000000000000000, 0.0000000000000000 },
16348 { 90.430293772869618, 20.000000000000000, 10.000000000000000,
16349 4.0000000000000000, 0.10000000000000009 },
16350 { 6248.1455940292308, 20.000000000000000, 10.000000000000000,
16351 4.0000000000000000, 0.19999999999999996 },
16352 { 501143.39852548984, 20.000000000000000, 10.000000000000000,
16353 4.0000000000000000, 0.30000000000000004 },
16354 { 58852027.356439680, 20.000000000000000, 10.000000000000000,
16355 4.0000000000000000, 0.39999999999999991 },
16356 { 12942923093.333330, 20.000000000000000, 10.000000000000000,
16357 4.0000000000000000, 0.50000000000000000 },
16358 { 7618073993853.6592, 20.000000000000000, 10.000000000000000,
16359 4.0000000000000000, 0.60000000000000009 },
16360 { 22630251562549288., 20.000000000000000, 10.000000000000000,
16361 4.0000000000000000, 0.69999999999999996 },
16362 { 1.3708372433980356e+21, 20.000000000000000, 10.000000000000000,
16363 4.0000000000000000, 0.80000000000000004 },
16364 { 1.4154113619999653e+29, 20.000000000000000, 10.000000000000000,
16365 4.0000000000000000, 0.89999999999999991 },
16366 };
16367
16368 // Test function for a=20.000000000000000, b=10.000000000000000, c=4.0000000000000000.
16369 template <typename Tp>
16370 void test237()
16371 {
16372 const Tp eps = std::numeric_limits<Tp>::epsilon();
16373 Tp max_abs_diff = -Tp(1);
16374 Tp max_abs_frac = -Tp(1);
16375 unsigned int num_datum = sizeof(data237)
16376 / sizeof(testcase_hyperg<double>);
16377 for (unsigned int i = 0; i < num_datum; ++i)
16378 {
16379 const Tp f = std::tr1::hyperg(Tp(data237[i].a), Tp(data237[i].b),
16380 Tp(data237[i].c), Tp(data237[i].x));
16381 const Tp f0 = data237[i].f0;
16382 const Tp diff = f - f0;
16383 if (std::abs(diff) > max_abs_diff)
16384 max_abs_diff = std::abs(diff);
16385 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
16386 {
16387 const Tp frac = diff / f0;
16388 if (std::abs(frac) > max_abs_frac)
16389 max_abs_frac = std::abs(frac);
16390 }
16391 }
16392 VERIFY(max_abs_frac < Tp(5.0000000000000024e-08));
16393 }
16394
16395 // Test data for a=20.000000000000000, b=10.000000000000000, c=6.0000000000000000.
16396 testcase_hyperg<double> data238[] = {
16397 { -1.6667473370780257e-08, 20.000000000000000, 10.000000000000000,
16398 6.0000000000000000, -0.90000000000000002 },
16399 { 8.6214844067774863e-08, 20.000000000000000, 10.000000000000000,
16400 6.0000000000000000, -0.80000000000000004 },
16401 { 5.7778331238835108e-07, 20.000000000000000, 10.000000000000000,
16402 6.0000000000000000, -0.69999999999999996 },
16403 { 2.1911400500362969e-06, 20.000000000000000, 10.000000000000000,
16404 6.0000000000000000, -0.59999999999999998 },
16405 { 4.7440049217100417e-06, 20.000000000000000, 10.000000000000000,
16406 6.0000000000000000, -0.50000000000000000 },
16407 { -1.0564233314924258e-05, 20.000000000000000, 10.000000000000000,
16408 6.0000000000000000, -0.40000000000000002 },
16409 { -0.00017990026051856349, 20.000000000000000, 10.000000000000000,
16410 6.0000000000000000, -0.30000000000000004 },
16411 { -0.00027618146288744351, 20.000000000000000, 10.000000000000000,
16412 6.0000000000000000, -0.19999999999999996 },
16413 { 0.030606019577723392, 20.000000000000000, 10.000000000000000,
16414 6.0000000000000000, -0.099999999999999978 },
16415 { 1.0000000000000000, 20.000000000000000, 10.000000000000000,
16416 6.0000000000000000, 0.0000000000000000 },
16417 { 27.832854169493341, 20.000000000000000, 10.000000000000000,
16418 6.0000000000000000, 0.10000000000000009 },
16419 { 874.00624088575228, 20.000000000000000, 10.000000000000000,
16420 6.0000000000000000, 0.19999999999999996 },
16421 { 36049.199340831554, 20.000000000000000, 10.000000000000000,
16422 6.0000000000000000, 0.30000000000000004 },
16423 { 2270967.7298624986, 20.000000000000000, 10.000000000000000,
16424 6.0000000000000000, 0.39999999999999991 },
16425 { 266979100.44444439, 20.000000000000000, 10.000000000000000,
16426 6.0000000000000000, 0.50000000000000000 },
16427 { 80311224337.493027, 20.000000000000000, 10.000000000000000,
16428 6.0000000000000000, 0.60000000000000009 },
16429 { 110111693103799.72, 20.000000000000000, 10.000000000000000,
16430 6.0000000000000000, 0.69999999999999996 },
16431 { 2.4838871426052618e+18, 20.000000000000000, 10.000000000000000,
16432 6.0000000000000000, 0.80000000000000004 },
16433 { 5.4626349999998603e+25, 20.000000000000000, 10.000000000000000,
16434 6.0000000000000000, 0.89999999999999991 },
16435 };
16436
16437 // Test function for a=20.000000000000000, b=10.000000000000000, c=6.0000000000000000.
16438 template <typename Tp>
16439 void test238()
16440 {
16441 const Tp eps = std::numeric_limits<Tp>::epsilon();
16442 Tp max_abs_diff = -Tp(1);
16443 Tp max_abs_frac = -Tp(1);
16444 unsigned int num_datum = sizeof(data238)
16445 / sizeof(testcase_hyperg<double>);
16446 for (unsigned int i = 0; i < num_datum; ++i)
16447 {
16448 const Tp f = std::tr1::hyperg(Tp(data238[i].a), Tp(data238[i].b),
16449 Tp(data238[i].c), Tp(data238[i].x));
16450 const Tp f0 = data238[i].f0;
16451 const Tp diff = f - f0;
16452 if (std::abs(diff) > max_abs_diff)
16453 max_abs_diff = std::abs(diff);
16454 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
16455 {
16456 const Tp frac = diff / f0;
16457 if (std::abs(frac) > max_abs_frac)
16458 max_abs_frac = std::abs(frac);
16459 }
16460 }
16461 VERIFY(max_abs_frac < Tp(5.0000000000000019e-07));
16462 }
16463
16464 // Test data for a=20.000000000000000, b=10.000000000000000, c=8.0000000000000000.
16465 testcase_hyperg<double> data239[] = {
16466 { -1.5843795893321480e-07, 20.000000000000000, 10.000000000000000,
16467 8.0000000000000000, -0.90000000000000002 },
16468 { -5.4877275994033766e-07, 20.000000000000000, 10.000000000000000,
16469 8.0000000000000000, -0.80000000000000004 },
16470 { -1.7169507967745992e-06, 20.000000000000000, 10.000000000000000,
16471 8.0000000000000000, -0.69999999999999996 },
16472 { -4.5236439748752000e-06, 20.000000000000000, 10.000000000000000,
16473 8.0000000000000000, -0.59999999999999998 },
16474 { -5.5690492560325806e-06, 20.000000000000000, 10.000000000000000,
16475 8.0000000000000000, -0.50000000000000000 },
16476 { 5.6914115606934911e-05, 20.000000000000000, 10.000000000000000,
16477 8.0000000000000000, -0.40000000000000002 },
16478 { 0.00082507252097519922, 20.000000000000000, 10.000000000000000,
16479 8.0000000000000000, -0.30000000000000004 },
16480 { 0.0085739249288229857, 20.000000000000000, 10.000000000000000,
16481 8.0000000000000000, -0.19999999999999996 },
16482 { 0.088244357683754757, 20.000000000000000, 10.000000000000000,
16483 8.0000000000000000, -0.099999999999999978 },
16484 { 1.0000000000000000, 20.000000000000000, 10.000000000000000,
16485 8.0000000000000000, 0.0000000000000000 },
16486 { 13.387208440156897, 20.000000000000000, 10.000000000000000,
16487 8.0000000000000000, 0.10000000000000009 },
16488 { 226.77895441155110, 20.000000000000000, 10.000000000000000,
16489 8.0000000000000000, 0.19999999999999996 },
16490 { 5281.5716482686785, 20.000000000000000, 10.000000000000000,
16491 8.0000000000000000, 0.30000000000000004 },
16492 { 189431.77762850464, 20.000000000000000, 10.000000000000000,
16493 8.0000000000000000, 0.39999999999999991 },
16494 { 12408149.333333332, 20.000000000000000, 10.000000000000000,
16495 8.0000000000000000, 0.50000000000000000 },
16496 { 1966782292.5839682, 20.000000000000000, 10.000000000000000,
16497 8.0000000000000000, 0.60000000000000009 },
16498 { 1274123112205.7495, 20.000000000000000, 10.000000000000000,
16499 8.0000000000000000, 0.69999999999999996 },
16500 { 10903676350911508., 20.000000000000000, 10.000000000000000,
16501 8.0000000000000000, 0.80000000000000004 },
16502 { 5.1849999999998819e+22, 20.000000000000000, 10.000000000000000,
16503 8.0000000000000000, 0.89999999999999991 },
16504 };
16505
16506 // Test function for a=20.000000000000000, b=10.000000000000000, c=8.0000000000000000.
16507 template <typename Tp>
16508 void test239()
16509 {
16510 const Tp eps = std::numeric_limits<Tp>::epsilon();
16511 Tp max_abs_diff = -Tp(1);
16512 Tp max_abs_frac = -Tp(1);
16513 unsigned int num_datum = sizeof(data239)
16514 / sizeof(testcase_hyperg<double>);
16515 for (unsigned int i = 0; i < num_datum; ++i)
16516 {
16517 const Tp f = std::tr1::hyperg(Tp(data239[i].a), Tp(data239[i].b),
16518 Tp(data239[i].c), Tp(data239[i].x));
16519 const Tp f0 = data239[i].f0;
16520 const Tp diff = f - f0;
16521 if (std::abs(diff) > max_abs_diff)
16522 max_abs_diff = std::abs(diff);
16523 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
16524 {
16525 const Tp frac = diff / f0;
16526 if (std::abs(frac) > max_abs_frac)
16527 max_abs_frac = std::abs(frac);
16528 }
16529 }
16530 VERIFY(max_abs_frac < Tp(2.5000000000000012e-08));
16531 }
16532
16533 // Test data for a=20.000000000000000, b=10.000000000000000, c=10.000000000000000.
16534 testcase_hyperg<double> data240[] = {
16535 { 2.6602838683283435e-06, 20.000000000000000, 10.000000000000000,
16536 10.000000000000000, -0.90000000000000002 },
16537 { 7.8442223930072316e-06, 20.000000000000000, 10.000000000000000,
16538 10.000000000000000, -0.80000000000000004 },
16539 { 2.4604898194634598e-05, 20.000000000000000, 10.000000000000000,
16540 10.000000000000000, -0.69999999999999996 },
16541 { 8.2718061255302686e-05, 20.000000000000000, 10.000000000000000,
16542 10.000000000000000, -0.59999999999999998 },
16543 { 0.00030072865982171723, 20.000000000000000, 10.000000000000000,
16544 10.000000000000000, -0.50000000000000000 },
16545 { 0.0011951964277455193, 20.000000000000000, 10.000000000000000,
16546 10.000000000000000, -0.40000000000000002 },
16547 { 0.0052617832469731814, 20.000000000000000, 10.000000000000000,
16548 10.000000000000000, -0.30000000000000004 },
16549 { 0.026084053304588847, 20.000000000000000, 10.000000000000000,
16550 10.000000000000000, -0.19999999999999996 },
16551 { 0.14864362802414346, 20.000000000000000, 10.000000000000000,
16552 10.000000000000000, -0.099999999999999978 },
16553 { 1.0000000000000000, 20.000000000000000, 10.000000000000000,
16554 10.000000000000000, 0.0000000000000000 },
16555 { 8.2252633399699757, 20.000000000000000, 10.000000000000000,
16556 10.000000000000000, 0.10000000000000009 },
16557 { 86.736173798840269, 20.000000000000000, 10.000000000000000,
16558 10.000000000000000, 0.19999999999999996 },
16559 { 1253.2542894196865, 20.000000000000000, 10.000000000000000,
16560 10.000000000000000, 0.30000000000000004 },
16561 { 27351.112277912434, 20.000000000000000, 10.000000000000000,
16562 10.000000000000000, 0.39999999999999991 },
16563 { 1048576.0000000000, 20.000000000000000, 10.000000000000000,
16564 10.000000000000000, 0.50000000000000000 },
16565 { 90949470.177293226, 20.000000000000000, 10.000000000000000,
16566 10.000000000000000, 0.60000000000000009 },
16567 { 28679719907.924358, 20.000000000000000, 10.000000000000000,
16568 10.000000000000000, 0.69999999999999996 },
16569 { 95367431640624.906, 20.000000000000000, 10.000000000000000,
16570 10.000000000000000, 0.80000000000000004 },
16571 { 9.9999999999998657e+19, 20.000000000000000, 10.000000000000000,
16572 10.000000000000000, 0.89999999999999991 },
16573 };
16574
16575 // Test function for a=20.000000000000000, b=10.000000000000000, c=10.000000000000000.
16576 template <typename Tp>
16577 void test240()
16578 {
16579 const Tp eps = std::numeric_limits<Tp>::epsilon();
16580 Tp max_abs_diff = -Tp(1);
16581 Tp max_abs_frac = -Tp(1);
16582 unsigned int num_datum = sizeof(data240)
16583 / sizeof(testcase_hyperg<double>);
16584 for (unsigned int i = 0; i < num_datum; ++i)
16585 {
16586 const Tp f = std::tr1::hyperg(Tp(data240[i].a), Tp(data240[i].b),
16587 Tp(data240[i].c), Tp(data240[i].x));
16588 const Tp f0 = data240[i].f0;
16589 const Tp diff = f - f0;
16590 if (std::abs(diff) > max_abs_diff)
16591 max_abs_diff = std::abs(diff);
16592 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
16593 {
16594 const Tp frac = diff / f0;
16595 if (std::abs(frac) > max_abs_frac)
16596 max_abs_frac = std::abs(frac);
16597 }
16598 }
16599 VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
16600 }
16601
16602 // Test data for a=20.000000000000000, b=20.000000000000000, c=2.0000000000000000.
16603 testcase_hyperg<double> data241[] = {
16604 { 7.4612991101768883e-09, 20.000000000000000, 20.000000000000000,
16605 2.0000000000000000, -0.90000000000000002 },
16606 { 1.1006588946889981e-07, 20.000000000000000, 20.000000000000000,
16607 2.0000000000000000, -0.80000000000000004 },
16608 { 2.0126933743389316e-07, 20.000000000000000, 20.000000000000000,
16609 2.0000000000000000, -0.69999999999999996 },
16610 { -1.0013775379801016e-06, 20.000000000000000, 20.000000000000000,
16611 2.0000000000000000, -0.59999999999999998 },
16612 { -3.0371956856472516e-06, 20.000000000000000, 20.000000000000000,
16613 2.0000000000000000, -0.50000000000000000 },
16614 { 2.2012669924527286e-05, 20.000000000000000, 20.000000000000000,
16615 2.0000000000000000, -0.40000000000000002 },
16616 { -6.2415598025417670e-05, 20.000000000000000, 20.000000000000000,
16617 2.0000000000000000, -0.30000000000000004 },
16618 { 0.00033551320394378602, 20.000000000000000, 20.000000000000000,
16619 2.0000000000000000, -0.19999999999999996 },
16620 { -0.0062342152641436353, 20.000000000000000, 20.000000000000000,
16621 2.0000000000000000, -0.099999999999999978 },
16622 { 1.0000000000000000, 20.000000000000000, 20.000000000000000,
16623 2.0000000000000000, 0.0000000000000000 },
16624 { 34830.688900741610, 20.000000000000000, 20.000000000000000,
16625 2.0000000000000000, 0.10000000000000009 },
16626 { 67626221.263030857, 20.000000000000000, 20.000000000000000,
16627 2.0000000000000000, 0.19999999999999996 },
16628 { 102764604848.69762, 20.000000000000000, 20.000000000000000,
16629 2.0000000000000000, 0.30000000000000004 },
16630 { 220278355222373.38, 20.000000000000000, 20.000000000000000,
16631 2.0000000000000000, 0.39999999999999991 },
16632 { 1.0422324699794536e+18, 20.000000000000000, 20.000000000000000,
16633 2.0000000000000000, 0.50000000000000000 },
16634 { 1.9128731788368004e+22, 20.000000000000000, 20.000000000000000,
16635 2.0000000000000000, 0.60000000000000009 },
16636 { 3.5234592919485287e+27, 20.000000000000000, 20.000000000000000,
16637 2.0000000000000000, 0.69999999999999996 },
16638 { 5.0867023209025249e+34, 20.000000000000000, 20.000000000000000,
16639 2.0000000000000000, 0.80000000000000004 },
16640 { 3.7461088506658564e+46, 20.000000000000000, 20.000000000000000,
16641 2.0000000000000000, 0.89999999999999991 },
16642 };
16643
16644 // Test function for a=20.000000000000000, b=20.000000000000000, c=2.0000000000000000.
16645 template <typename Tp>
16646 void test241()
16647 {
16648 const Tp eps = std::numeric_limits<Tp>::epsilon();
16649 Tp max_abs_diff = -Tp(1);
16650 Tp max_abs_frac = -Tp(1);
16651 unsigned int num_datum = sizeof(data241)
16652 / sizeof(testcase_hyperg<double>);
16653 for (unsigned int i = 0; i < num_datum; ++i)
16654 {
16655 const Tp f = std::tr1::hyperg(Tp(data241[i].a), Tp(data241[i].b),
16656 Tp(data241[i].c), Tp(data241[i].x));
16657 const Tp f0 = data241[i].f0;
16658 const Tp diff = f - f0;
16659 if (std::abs(diff) > max_abs_diff)
16660 max_abs_diff = std::abs(diff);
16661 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
16662 {
16663 const Tp frac = diff / f0;
16664 if (std::abs(frac) > max_abs_frac)
16665 max_abs_frac = std::abs(frac);
16666 }
16667 }
16668 VERIFY(max_abs_frac < Tp(1.0000000000000005e-07));
16669 }
16670
16671 // Test data for a=20.000000000000000, b=20.000000000000000, c=4.0000000000000000.
16672 testcase_hyperg<double> data242[] = {
16673 { -1.5895900796973045e-09, 20.000000000000000, 20.000000000000000,
16674 4.0000000000000000, -0.90000000000000002 },
16675 { -2.4403576837293198e-09, 20.000000000000000, 20.000000000000000,
16676 4.0000000000000000, -0.80000000000000004 },
16677 { 1.1622915290732117e-08, 20.000000000000000, 20.000000000000000,
16678 4.0000000000000000, -0.69999999999999996 },
16679 { 6.3899796307731726e-08, 20.000000000000000, 20.000000000000000,
16680 4.0000000000000000, -0.59999999999999998 },
16681 { -1.3503608352807462e-07, 20.000000000000000, 20.000000000000000,
16682 4.0000000000000000, -0.50000000000000000 },
16683 { -1.2198533623899163e-06, 20.000000000000000, 20.000000000000000,
16684 4.0000000000000000, -0.40000000000000002 },
16685 { 9.9086618119129001e-06, 20.000000000000000, 20.000000000000000,
16686 4.0000000000000000, -0.30000000000000004 },
16687 { -7.6797020080162010e-05, 20.000000000000000, 20.000000000000000,
16688 4.0000000000000000, -0.19999999999999996 },
16689 { 0.0013196405087170875, 20.000000000000000, 20.000000000000000,
16690 4.0000000000000000, -0.099999999999999978 },
16691 { 1.0000000000000000, 20.000000000000000, 20.000000000000000,
16692 4.0000000000000000, 0.0000000000000000 },
16693 { 2274.2044768143564, 20.000000000000000, 20.000000000000000,
16694 4.0000000000000000, 0.10000000000000009 },
16695 { 1611640.1560475440, 20.000000000000000, 20.000000000000000,
16696 4.0000000000000000, 0.19999999999999996 },
16697 { 1147063984.7359734, 20.000000000000000, 20.000000000000000,
16698 4.0000000000000000, 0.30000000000000004 },
16699 { 1253162497163.8311, 20.000000000000000, 20.000000000000000,
16700 4.0000000000000000, 0.39999999999999991 },
16701 { 3071321673390476.0, 20.000000000000000, 20.000000000000000,
16702 4.0000000000000000, 0.50000000000000000 },
16703 { 2.8221123559124324e+19, 20.000000000000000, 20.000000000000000,
16704 4.0000000000000000, 0.60000000000000009 },
16705 { 2.3658463807419519e+24, 20.000000000000000, 20.000000000000000,
16706 4.0000000000000000, 0.69999999999999996 },
16707 { 1.2596553731345468e+31, 20.000000000000000, 20.000000000000000,
16708 4.0000000000000000, 0.80000000000000004 },
16709 { 1.9627175792062075e+42, 20.000000000000000, 20.000000000000000,
16710 4.0000000000000000, 0.89999999999999991 },
16711 };
16712
16713 // Test function for a=20.000000000000000, b=20.000000000000000, c=4.0000000000000000.
16714 template <typename Tp>
16715 void test242()
16716 {
16717 const Tp eps = std::numeric_limits<Tp>::epsilon();
16718 Tp max_abs_diff = -Tp(1);
16719 Tp max_abs_frac = -Tp(1);
16720 unsigned int num_datum = sizeof(data242)
16721 / sizeof(testcase_hyperg<double>);
16722 for (unsigned int i = 0; i < num_datum; ++i)
16723 {
16724 const Tp f = std::tr1::hyperg(Tp(data242[i].a), Tp(data242[i].b),
16725 Tp(data242[i].c), Tp(data242[i].x));
16726 const Tp f0 = data242[i].f0;
16727 const Tp diff = f - f0;
16728 if (std::abs(diff) > max_abs_diff)
16729 max_abs_diff = std::abs(diff);
16730 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
16731 {
16732 const Tp frac = diff / f0;
16733 if (std::abs(frac) > max_abs_frac)
16734 max_abs_frac = std::abs(frac);
16735 }
16736 }
16737 VERIFY(max_abs_frac < Tp(2.5000000000000006e-06));
16738 }
16739
16740 // Test data for a=20.000000000000000, b=20.000000000000000, c=6.0000000000000000.
16741 testcase_hyperg<double> data243[] = {
16742 { 8.0159808156941562e-11, 20.000000000000000, 20.000000000000000,
16743 6.0000000000000000, -0.90000000000000002 },
16744 { -6.4422687845093557e-10, 20.000000000000000, 20.000000000000000,
16745 6.0000000000000000, -0.80000000000000004 },
16746 { -3.7526134186308981e-09, 20.000000000000000, 20.000000000000000,
16747 6.0000000000000000, -0.69999999999999996 },
16748 { -1.7692034167897114e-09, 20.000000000000000, 20.000000000000000,
16749 6.0000000000000000, -0.59999999999999998 },
16750 { 7.9304558772837909e-08, 20.000000000000000, 20.000000000000000,
16751 6.0000000000000000, -0.50000000000000000 },
16752 { 5.9348070318594204e-08, 20.000000000000000, 20.000000000000000,
16753 6.0000000000000000, -0.40000000000000002 },
16754 { -3.5827694517425210e-06, 20.000000000000000, 20.000000000000000,
16755 6.0000000000000000, -0.30000000000000004 },
16756 { 4.4951490418284159e-05, 20.000000000000000, 20.000000000000000,
16757 6.0000000000000000, -0.19999999999999996 },
16758 { -0.0013716249406310486, 20.000000000000000, 20.000000000000000,
16759 6.0000000000000000, -0.099999999999999978 },
16760 { 1.0000000000000000, 20.000000000000000, 20.000000000000000,
16761 6.0000000000000000, 0.0000000000000000 },
16762 { 415.32493304415505, 20.000000000000000, 20.000000000000000,
16763 6.0000000000000000, 0.10000000000000009 },
16764 { 121300.42991518594, 20.000000000000000, 20.000000000000000,
16765 6.0000000000000000, 0.19999999999999996 },
16766 { 42725673.833462097, 20.000000000000000, 20.000000000000000,
16767 6.0000000000000000, 0.30000000000000004 },
16768 { 24588915328.261719, 20.000000000000000, 20.000000000000000,
16769 6.0000000000000000, 0.39999999999999991 },
16770 { 31929082412503.652, 20.000000000000000, 20.000000000000000,
16771 6.0000000000000000, 0.50000000000000000 },
16772 { 1.4934954443280477e+17, 20.000000000000000, 20.000000000000000,
16773 6.0000000000000000, 0.60000000000000009 },
16774 { 5.7726220597696125e+21, 20.000000000000000, 20.000000000000000,
16775 6.0000000000000000, 0.69999999999999996 },
16776 { 1.1454387824049374e+28, 20.000000000000000, 20.000000000000000,
16777 6.0000000000000000, 0.80000000000000004 },
16778 { 3.8088637321581534e+38, 20.000000000000000, 20.000000000000000,
16779 6.0000000000000000, 0.89999999999999991 },
16780 };
16781
16782 // Test function for a=20.000000000000000, b=20.000000000000000, c=6.0000000000000000.
16783 template <typename Tp>
16784 void test243()
16785 {
16786 const Tp eps = std::numeric_limits<Tp>::epsilon();
16787 Tp max_abs_diff = -Tp(1);
16788 Tp max_abs_frac = -Tp(1);
16789 unsigned int num_datum = sizeof(data243)
16790 / sizeof(testcase_hyperg<double>);
16791 for (unsigned int i = 0; i < num_datum; ++i)
16792 {
16793 const Tp f = std::tr1::hyperg(Tp(data243[i].a), Tp(data243[i].b),
16794 Tp(data243[i].c), Tp(data243[i].x));
16795 const Tp f0 = data243[i].f0;
16796 const Tp diff = f - f0;
16797 if (std::abs(diff) > max_abs_diff)
16798 max_abs_diff = std::abs(diff);
16799 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
16800 {
16801 const Tp frac = diff / f0;
16802 if (std::abs(frac) > max_abs_frac)
16803 max_abs_frac = std::abs(frac);
16804 }
16805 }
16806 VERIFY(max_abs_frac < Tp(2.5000000000000005e-05));
16807 }
16808
16809 // Test data for a=20.000000000000000, b=20.000000000000000, c=8.0000000000000000.
16810 testcase_hyperg<double> data244[] = {
16811 { 1.0699072529874453e-10, 20.000000000000000, 20.000000000000000,
16812 8.0000000000000000, -0.90000000000000002 },
16813 { 5.4297753417228627e-10, 20.000000000000000, 20.000000000000000,
16814 8.0000000000000000, -0.80000000000000004 },
16815 { 9.7625471266824426e-10, 20.000000000000000, 20.000000000000000,
16816 8.0000000000000000, -0.69999999999999996 },
16817 { -6.7257762867770348e-09, 20.000000000000000, 20.000000000000000,
16818 8.0000000000000000, -0.59999999999999998 },
16819 { -5.4634571496175302e-08, 20.000000000000000, 20.000000000000000,
16820 8.0000000000000000, -0.50000000000000000 },
16821 { 1.4595644213893387e-07, 20.000000000000000, 20.000000000000000,
16822 8.0000000000000000, -0.40000000000000002 },
16823 { 3.3515966497049909e-06, 20.000000000000000, 20.000000000000000,
16824 8.0000000000000000, -0.30000000000000004 },
16825 { -6.5848086985914887e-05, 20.000000000000000, 20.000000000000000,
16826 8.0000000000000000, -0.19999999999999996 },
16827 { 0.0034800171306214813, 20.000000000000000, 20.000000000000000,
16828 8.0000000000000000, -0.099999999999999978 },
16829 { 1.0000000000000000, 20.000000000000000, 20.000000000000000,
16830 8.0000000000000000, 0.0000000000000000 },
16831 { 130.93865856750304, 20.000000000000000, 20.000000000000000,
16832 8.0000000000000000, 0.10000000000000009 },
16833 { 17850.203502975532, 20.000000000000000, 20.000000000000000,
16834 8.0000000000000000, 0.19999999999999996 },
16835 { 3307058.5655149994, 20.000000000000000, 20.000000000000000,
16836 8.0000000000000000, 0.30000000000000004 },
16837 { 1041065396.2302787, 20.000000000000000, 20.000000000000000,
16838 8.0000000000000000, 0.39999999999999991 },
16839 { 735221357488.41736, 20.000000000000000, 20.000000000000000,
16840 8.0000000000000000, 0.50000000000000000 },
16841 { 1785176805049585.2, 20.000000000000000, 20.000000000000000,
16842 8.0000000000000000, 0.60000000000000009 },
16843 { 3.2302829930269192e+19, 20.000000000000000, 20.000000000000000,
16844 8.0000000000000000, 0.69999999999999996 },
16845 { 2.4184909805178299e+25, 20.000000000000000, 20.000000000000000,
16846 8.0000000000000000, 0.80000000000000004 },
16847 { 1.7340021007794567e+35, 20.000000000000000, 20.000000000000000,
16848 8.0000000000000000, 0.89999999999999991 },
16849 };
16850
16851 // Test function for a=20.000000000000000, b=20.000000000000000, c=8.0000000000000000.
16852 template <typename Tp>
16853 void test244()
16854 {
16855 const Tp eps = std::numeric_limits<Tp>::epsilon();
16856 Tp max_abs_diff = -Tp(1);
16857 Tp max_abs_frac = -Tp(1);
16858 unsigned int num_datum = sizeof(data244)
16859 / sizeof(testcase_hyperg<double>);
16860 for (unsigned int i = 0; i < num_datum; ++i)
16861 {
16862 const Tp f = std::tr1::hyperg(Tp(data244[i].a), Tp(data244[i].b),
16863 Tp(data244[i].c), Tp(data244[i].x));
16864 const Tp f0 = data244[i].f0;
16865 const Tp diff = f - f0;
16866 if (std::abs(diff) > max_abs_diff)
16867 max_abs_diff = std::abs(diff);
16868 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
16869 {
16870 const Tp frac = diff / f0;
16871 if (std::abs(frac) > max_abs_frac)
16872 max_abs_frac = std::abs(frac);
16873 }
16874 }
16875 VERIFY(max_abs_frac < Tp(2.5000000000000005e-05));
16876 }
16877
16878 // Test data for a=20.000000000000000, b=20.000000000000000, c=10.000000000000000.
16879 testcase_hyperg<double> data245[] = {
16880 { -1.7945363894141429e-10, 20.000000000000000, 20.000000000000000,
16881 10.000000000000000, -0.90000000000000002 },
16882 { -4.4440666675421800e-10, 20.000000000000000, 20.000000000000000,
16883 10.000000000000000, -0.80000000000000004 },
16884 { 6.6171630913717945e-10, 20.000000000000000, 20.000000000000000,
16885 10.000000000000000, -0.69999999999999996 },
16886 { 1.5453889642199650e-08, 20.000000000000000, 20.000000000000000,
16887 10.000000000000000, -0.59999999999999998 },
16888 { 7.5754083860094422e-08, 20.000000000000000, 20.000000000000000,
16889 10.000000000000000, -0.50000000000000000 },
16890 { -4.1113628639873710e-07, 20.000000000000000, 20.000000000000000,
16891 10.000000000000000, -0.40000000000000002 },
16892 { -9.5300704265214247e-06, 20.000000000000000, 20.000000000000000,
16893 10.000000000000000, -0.30000000000000004 },
16894 { 0.00016081533175785109, 20.000000000000000, 20.000000000000000,
16895 10.000000000000000, -0.19999999999999996 },
16896 { 0.017684650940379486, 20.000000000000000, 20.000000000000000,
16897 10.000000000000000, -0.099999999999999978 },
16898 { 1.0000000000000000, 20.000000000000000, 20.000000000000000,
16899 10.000000000000000, 0.0000000000000000 },
16900 { 57.562247312454403, 20.000000000000000, 20.000000000000000,
16901 10.000000000000000, 0.10000000000000009 },
16902 { 4124.4159820362511, 20.000000000000000, 20.000000000000000,
16903 10.000000000000000, 0.19999999999999996 },
16904 { 428774.21436196787, 20.000000000000000, 20.000000000000000,
16905 10.000000000000000, 0.30000000000000004 },
16906 { 76996819.900892526, 20.000000000000000, 20.000000000000000,
16907 10.000000000000000, 0.39999999999999991 },
16908 { 30473174828.943691, 20.000000000000000, 20.000000000000000,
16909 10.000000000000000, 0.50000000000000000 },
16910 { 39291970835753.094, 20.000000000000000, 20.000000000000000,
16911 10.000000000000000, 0.60000000000000009 },
16912 { 3.3890331048069018e+17, 20.000000000000000, 20.000000000000000,
16913 10.000000000000000, 0.69999999999999996 },
16914 { 9.7157373454594049e+22, 20.000000000000000, 20.000000000000000,
16915 10.000000000000000, 0.80000000000000004 },
16916 { 1.5205808288860858e+32, 20.000000000000000, 20.000000000000000,
16917 10.000000000000000, 0.89999999999999991 },
16918 };
16919
16920 // Test function for a=20.000000000000000, b=20.000000000000000, c=10.000000000000000.
16921 template <typename Tp>
16922 void test245()
16923 {
16924 const Tp eps = std::numeric_limits<Tp>::epsilon();
16925 Tp max_abs_diff = -Tp(1);
16926 Tp max_abs_frac = -Tp(1);
16927 unsigned int num_datum = sizeof(data245)
16928 / sizeof(testcase_hyperg<double>);
16929 for (unsigned int i = 0; i < num_datum; ++i)
16930 {
16931 const Tp f = std::tr1::hyperg(Tp(data245[i].a), Tp(data245[i].b),
16932 Tp(data245[i].c), Tp(data245[i].x));
16933 const Tp f0 = data245[i].f0;
16934 const Tp diff = f - f0;
16935 if (std::abs(diff) > max_abs_diff)
16936 max_abs_diff = std::abs(diff);
16937 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
16938 {
16939 const Tp frac = diff / f0;
16940 if (std::abs(frac) > max_abs_frac)
16941 max_abs_frac = std::abs(frac);
16942 }
16943 }
16944 VERIFY(max_abs_frac < Tp(2.5000000000000005e-05));
16945 }
16946
16947 int main(int, char**)
16948 {
16949 test001<double>();
16950 test002<double>();
16951 test003<double>();
16952 test004<double>();
16953 test005<double>();
16954 test006<double>();
16955 test007<double>();
16956 test008<double>();
16957 test009<double>();
16958 test010<double>();
16959 test011<double>();
16960 test012<double>();
16961 test013<double>();
16962 test014<double>();
16963 test015<double>();
16964 test016<double>();
16965 test017<double>();
16966 test018<double>();
16967 test019<double>();
16968 test020<double>();
16969 test021<double>();
16970 test022<double>();
16971 test023<double>();
16972 test024<double>();
16973 test025<double>();
16974 test026<double>();
16975 test027<double>();
16976 test028<double>();
16977 test029<double>();
16978 test030<double>();
16979 test031<double>();
16980 test032<double>();
16981 test033<double>();
16982 test034<double>();
16983 test035<double>();
16984 test036<double>();
16985 test037<double>();
16986 test038<double>();
16987 test039<double>();
16988 test040<double>();
16989 test041<double>();
16990 test042<double>();
16991 test043<double>();
16992 test044<double>();
16993 test045<double>();
16994 test046<double>();
16995 test047<double>();
16996 test048<double>();
16997 test049<double>();
16998 test050<double>();
16999 test051<double>();
17000 test052<double>();
17001 test053<double>();
17002 test054<double>();
17003 test055<double>();
17004 test056<double>();
17005 test057<double>();
17006 test058<double>();
17007 test059<double>();
17008 test060<double>();
17009 test061<double>();
17010 test062<double>();
17011 test063<double>();
17012 test064<double>();
17013 test065<double>();
17014 test066<double>();
17015 test067<double>();
17016 test068<double>();
17017 test069<double>();
17018 test070<double>();
17019 test071<double>();
17020 test072<double>();
17021 test073<double>();
17022 test074<double>();
17023 test075<double>();
17024 test076<double>();
17025 test077<double>();
17026 test078<double>();
17027 test079<double>();
17028 test080<double>();
17029 test081<double>();
17030 test082<double>();
17031 test083<double>();
17032 test084<double>();
17033 test085<double>();
17034 test086<double>();
17035 test087<double>();
17036 test088<double>();
17037 test089<double>();
17038 test090<double>();
17039 test091<double>();
17040 test092<double>();
17041 test093<double>();
17042 test094<double>();
17043 test095<double>();
17044 test096<double>();
17045 test097<double>();
17046 test098<double>();
17047 test099<double>();
17048 test100<double>();
17049 test101<double>();
17050 test102<double>();
17051 test103<double>();
17052 test104<double>();
17053 test105<double>();
17054 test106<double>();
17055 test107<double>();
17056 test108<double>();
17057 test109<double>();
17058 test110<double>();
17059 test111<double>();
17060 test112<double>();
17061 test113<double>();
17062 test114<double>();
17063 test115<double>();
17064 test116<double>();
17065 test117<double>();
17066 test118<double>();
17067 test119<double>();
17068 test120<double>();
17069 test121<double>();
17070 test122<double>();
17071 test123<double>();
17072 test124<double>();
17073 test125<double>();
17074 test126<double>();
17075 test127<double>();
17076 test128<double>();
17077 test129<double>();
17078 test130<double>();
17079 test131<double>();
17080 test132<double>();
17081 test133<double>();
17082 test134<double>();
17083 test135<double>();
17084 test136<double>();
17085 test137<double>();
17086 test138<double>();
17087 test139<double>();
17088 test140<double>();
17089 test141<double>();
17090 test142<double>();
17091 test143<double>();
17092 test144<double>();
17093 test145<double>();
17094 test146<double>();
17095 test147<double>();
17096 test148<double>();
17097 test149<double>();
17098 test150<double>();
17099 test151<double>();
17100 test152<double>();
17101 test153<double>();
17102 test154<double>();
17103 test155<double>();
17104 test156<double>();
17105 test157<double>();
17106 test158<double>();
17107 test159<double>();
17108 test160<double>();
17109 test161<double>();
17110 test162<double>();
17111 test163<double>();
17112 test164<double>();
17113 test165<double>();
17114 test166<double>();
17115 test167<double>();
17116 test168<double>();
17117 test169<double>();
17118 test170<double>();
17119 test171<double>();
17120 test172<double>();
17121 test173<double>();
17122 test174<double>();
17123 test175<double>();
17124 test176<double>();
17125 test177<double>();
17126 test178<double>();
17127 test179<double>();
17128 test180<double>();
17129 test181<double>();
17130 test182<double>();
17131 test183<double>();
17132 test184<double>();
17133 test185<double>();
17134 test186<double>();
17135 test187<double>();
17136 test188<double>();
17137 test189<double>();
17138 test190<double>();
17139 test191<double>();
17140 test192<double>();
17141 test193<double>();
17142 test194<double>();
17143 test195<double>();
17144 test196<double>();
17145 test197<double>();
17146 test198<double>();
17147 test199<double>();
17148 test200<double>();
17149 test201<double>();
17150 test202<double>();
17151 test203<double>();
17152 test204<double>();
17153 test205<double>();
17154 test206<double>();
17155 test207<double>();
17156 test208<double>();
17157 test209<double>();
17158 test210<double>();
17159 test211<double>();
17160 test212<double>();
17161 test213<double>();
17162 test214<double>();
17163 test215<double>();
17164 test216<double>();
17165 test217<double>();
17166 test218<double>();
17167 test219<double>();
17168 test220<double>();
17169 test221<double>();
17170 test222<double>();
17171 test223<double>();
17172 test224<double>();
17173 test225<double>();
17174 test226<double>();
17175 test227<double>();
17176 test228<double>();
17177 test229<double>();
17178 test230<double>();
17179 test231<double>();
17180 test232<double>();
17181 test233<double>();
17182 test234<double>();
17183 test235<double>();
17184 test236<double>();
17185 test237<double>();
17186 test238<double>();
17187 test239<double>();
17188 test240<double>();
17189 test241<double>();
17190 test242<double>();
17191 test243<double>();
17192 test244<double>();
17193 test245<double>();
17194 return 0;
17195 }